我应该为MySql中的讲师和学生制作1或2个表吗?

时间:2014-11-17 16:02:53

标签: mysql database database-design single-table-inheritance class-table-inheritance

我目前正在开展一个项目,您可以在其中保存讲师和学生的详细信息。 我不确定是否应该使用一个表User或两个表LecturerStudent

当您以讲师身份登录时,您具有特殊权限作为项目的组管理页面,在加载学生不具备的组页面上。在User tbl中会有一列 status注册时,您可以选择成为学生或讲师的页面并输入特殊页面 讲师代码。我正在使用PHP和mySql。

在摘要中,我应该为学生和讲师使用1 User表,还是有2个单独的StudentLecturer表。

附加信息:1门课程可以有很多讲师和学生,但是1名学生将有1门课程,其中讲师有很多课程。

2 个答案:

答案 0 :(得分:7)

好问题!

这可能看起来过于复杂,但如果你想扩展这个系统,我强烈建议对此进行更多建模"标准化"。通过认识到讲师和学生是同一个实体(人/用户),你已经走在正确的轨道上。诀窍在于你应该建立"角色",然后模拟用户的角色。这使得模型的这一小部分共有3个表。

USERS               USER_ROLES           ROLES
+------------+      +----------+         +--------+
| id         | <--> | user_id  |     /-->| id     |
| login_name |      | role_id  | <--/    | name   |
| etc        |      +----------+         +--------+
+------------+

users
======
id
login_name
etc

roles
=======
id
name

user_roles
===========
user_id
role_id
since

样本数据

USERS
+----+------------+
| id | login_name |
+----+------------+
| 1  | Chris      |
+----+------------+
| 2  | Cherri     |
+----+------------+


ROLES
+----+------------+
| id | name       |
+----+------------+
| 1  | Lecturer   |
+----+------------+
| 2  | Student    |
+----+------------+

USER_ROLES
+---------+---------+
| user_id | role_id |
+---------+---------+
|    1    |     1   | <-- Chris is a Lecturer
+---------+---------+
|    2    |     2   | <-- Cherri is a student
+---------+---------+
|    2    |     1   | <-- Cherri is also a lecturer
+---------+---------+

答案 1 :(得分:-2)

使用带有字段的单个表格,该字段表明它是学生还是讲师。它可以是一个简单的整数列名“role”,其中role = 0表示student,role = 1表示讲师。

这很简单,快速实施,并且符合要求。