0

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

家长将能够查看他们孩子的答案,而教师可以查看他们整个班级的结果。

我有 3 种不同类型的用户TeachersParentsStudents。每个学生都链接到一个家长,每个学生都链接到一个班级。一位教师与多个班级相关联。

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

在此处输入图像描述

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

4

2 回答 2

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在这里

同样在插入之前检查信息表中用户和父级的记录是否存在。

于 2012-10-22T06:46:23.213 回答
0

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

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

User_types:
id             int
name           varchar

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

于 2012-10-22T06:32:43.010 回答