【问题标题】:Database relations between each other (users and groups)彼此之间的数据库关系(用户和组)
【发布时间】:2019-06-21 03:44:55
【问题描述】:
我正在做一个学校辅导项目,同时让数据库在设计获取数据库中组、用户和组的导师之间关系的最佳方式时遇到了麻烦。
我有学生、老师、导师,保存在我的“用户”表中
一个小组有很多学生,但只有一个导师。
我想这样做的方式是在我的用户表中添加一个外键,所以我的学生用户属于一个组,每个“组”都有一个导师,所以我需要添加一个外键到“ “组”表中的用户,但我不确定这是否是最好的方法。
所以我想请教一些建议,谢谢阅读
【问题讨论】:
-
如果您要显示“多对多”表的实际 CREATE TABLE 语句,请按照我提供的提示 here
标签:
mysql
database
database-design
data-modeling
【解决方案1】:
是的。在 GroupTable 中添加 TutorID 即可。
使用列“GroupID”(PrimaryKey)、“GroupName”、“TutorID”(带有用户表的外键)创建一个表“GroupTable”。
使用列“StudentID”(带有用户的外键)、“GroupID”(带有 GroupTable 的外键)创建一个表“StudentGroupMapping”。该表的主键可以是(StudentID,GroupID)的复合主键。有了这个,我们可以让一个学生属于多个组。
我们需要注意的完整性是标记为 Tutor 的用户不会进入 Student。
【解决方案2】:
因此,总的来说,您应该拥有以下三个表格。第三张表将起到桥表的作用。
用户:
- user_id (PK)
- 用户名
- 角色(即学生、教师、导师)
组:
- group_id (PK)
- user_id (FK)(即tutor_id)
- 组名
- group_timings
组用户关系:
- group_id (FK)
- user_id (FK)(即 student_id)
group_id 和 user_id 将组合成一个复合键。
这样,如果将来需要,您可以定义学生和导师之间的多对多关系。例如,一位导师可以教授多个小组,一个学生也可以注册多个小组。