Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 试图设计一个在线学生练习数据库_Mysql_Database_Database Design - Fatal编程技术网

Mysql 试图设计一个在线学生练习数据库

Mysql 试图设计一个在线学生练习数据库,mysql,database,database-design,Mysql,Database,Database Design,我对MySQL和数据库结构非常陌生,我想知道是否有人能帮助我找到设计这个数据库的最佳方法。该应用程序本质上是一个在线练习本。它将有供学生完成的练习,并将结果存储在数据库中 家长可以查看孩子的答案,而老师可以查看整个班级的成绩 我有三种不同类型的用户,教师,家长和学生。每个学生链接到家长,每个学生链接到班级。一名教师链接到多个班级 我目前的用户结构可以在这里看到 我是否应该创建一个单用户表并具有UserType字段?如果是这样的话,我该如何将学生与班级和家长联系起来?如果你从另一个角度看待你的应

我对MySQL和数据库结构非常陌生,我想知道是否有人能帮助我找到设计这个数据库的最佳方法。该应用程序本质上是一个在线练习本。它将有供学生完成的练习,并将结果存储在数据库中

家长可以查看孩子的答案,而老师可以查看整个班级的成绩

我有三种不同类型的用户,
教师
家长
学生
。每个学生链接到家长,每个学生链接到班级。一名教师链接到多个班级

我目前的用户结构可以在这里看到


我是否应该创建一个单用户表并具有
UserType
字段?如果是这样的话,我该如何将学生与班级和家长联系起来?

如果你从另一个角度看待你的应用程序,事情就会简单得多。 首先,有一个用户实体,它提供所有授权功能,如果用户必须具有不同的功能-您最好创建不同类型的用户:

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

User_types:
id             int
name           varchar

如果您使用InnoDB引擎,您可以为引用完整性创建一个外键Users-User_-types。

我已经为此创建了一个架构:-

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');


在插入之前,还要检查info表中是否存在用户和家长的记录。

虽然这是一个有趣的问题,但这太主观了。它可能会征求意见,而不是给出一个明确的答案。请阅读FAQ中的指导部分。在上述模式中,学生只能选修一门课。最好有一个包含两个字段的联接表,class和student。哇,谢谢你,这真的帮助很大,我只是对菜单表有点困惑,所以你建议我将菜单选项存储为数据库?method列的用途是什么?很抱歉,我在本地主机测试数据库中测试了这段代码,它已经包含了一个表菜单。我使用codeigniter,所以方法是控制器方法或函数。请删除此菜单表,它不属于您的问题。哈哈,我明白了,那么这更有意义了,我没有看到它对我的问题有什么用处。谢谢