2012-10-22 30 views
0

我很新的MySQL和數據庫結構,我想知道是否有人可以幫助設計這個數據庫的最佳方式。該應用程序本質上是一個在線練習冊。它將爲學生完成練習並將結果存儲在數據庫中。試圖設計一個在線學生練習數據庫

家長將能夠查看他們孩子的答案,而老師可以查看他們整個班級的成績。

我有3種不同類型的用戶,Teachers,ParentsStudents。每個學生都鏈接到一個家長,每個學生都與一個班級相關聯。教師與多個班級相關聯。

我現在的用戶結構可以在這裏看到;

enter image description here

我應該創建一個單獨的用戶表,有一個UserType場?如果是這樣,我該如何將學生與班級和家長聯繫起來?

+2

雖然這是一個有趣的問題,但它對於SO來說太主觀了。它可能會徵求意見,而不是有一個明確的答案。請閱讀常見問題解答部分,其中提供了[無法提問](http://stackoverflow.com/faq#dontask)的指導。 – vascowhite

+0

在上述模式中,學生只能參加一門課。有兩個領域,班級和學生的連接表會更好。 –

回答

1

我創建了一個架構如下: -

DROP TABLE IF EXISTS `class`; 

CREATE TABLE `class` (
    `class_id` int(11) NOT NULL AUTO_INCREMENT, 
    `class_name` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`class_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; 

/*Data for the table `class` */ 

insert into `class`(`class_id`,`class_name`) values (1,'A'),(2,'B'),(3,'C'); 

/*Table structure for table `info` */ 

DROP TABLE IF EXISTS `info`; 

CREATE TABLE `info` (
    `info_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) DEFAULT NULL, 
    `parent_id` int(11) DEFAULT NULL, 
    `class_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`info_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; 

/*Data for the table `info` */ 

insert into `info`(`info_id`,`user_id`,`parent_id`,`class_id`) values (1,3,2,1); 

/*Table structure for table `user` */ 

DROP TABLE IF EXISTS `user`; 

CREATE TABLE `user` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_name` varchar(255) DEFAULT NULL, 
    `users_types_id` int(11) DEFAULT NULL, 
    `class_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; 

/*Data for the table `user` */ 

insert into `user`(`user_id`,`user_name`,`users_types_id`,`class_id`) values (1,'TeacherA',1,1),(2,'Parent',2,0),(3,'StudentA',3,1),(4,'TeacherB',1,2),(5,'TeacherC',1,3); 

DROP TABLE IF EXISTS `users_types`; 

CREATE TABLE `users_types` (
    `users_types_id` int(11) NOT NULL AUTO_INCREMENT, 
    `type` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`users_types_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; 

/*Data for the table `users_types` */ 

insert into `users_types`(`users_types_id`,`type`) values (1,'Teacher'),(2,'Parent'),(3,'Student'); 

sqlfiddle here

此外,如果存在用戶和家長在信息表中的記錄插入檢查之前。

+0

哇,謝謝,它真的幫了很大忙,我只是有點困惑與菜單表,所以你建議我存儲菜單選項作爲數據庫?什麼是方法列? – ChaoticLoki

+0

對不起,我正在我的本地主機測試數據庫中已經包含一個表菜單測試此代碼。我使用codeigniter所以方法是控制器的方法或功能 –

+0

請刪除這個菜單表它不屬於你的問題 –

0

如果您從另一個角度來看待應用程序,事情會更容易。所有的 首先,有用戶的實體,它提供了所有的授權功能,如果用戶必須具有不同的功能 - 你最好使不同類型的用戶:

Users: 
id (int) 
user_type_id int 
username  varchar 
password  varchar 
email   varchar 

User_types: 
id    int 
name   varchar 

如果使用InnoDB引擎,你可以做一個外鍵用戶 - User_types的參照完整性。