MySQL设计一对多?
Posted
技术标签:
【中文标题】MySQL设计一对多?【英文标题】:MySQL design one-to-many? 【发布时间】:2012-04-14 08:16:50 【问题描述】:我有一个处理学生的数据库。所以我有表学生和班级。现在每个学生都可以随心所欲地去上课;我将如何在 mysql 数据库模式中对此进行建模?
学生桌:
student_id
student_name
student_age
...
类表:
class_id
class_name
class_profesor
...
基本上,我不知道如何设计一个表格,让一个学生可以为他/她自己注册任意数量的课程?
我应该为此另做一张桌子吗? 这是一对多的关系吗?
【问题讨论】:
【参考方案1】:你需要一个多对多或映射表,例如:
class_student
-------------
class_id
student_id
此表的主键应为:(class_id, student_id)
。
在以下位置创建索引:(class_id, student_id)
,和(student_id, class_id)
.
查看this other SO question and answers 了解更多详情。
设置完成后,您可以使用以下命令查询给定班级的登记者:
SELECT c.class_name, s.student_name, ...
FROM class_student cs
LEFT JOIN class c ON c.class_id = cs.class_id
LEFT JOIN student s ON s.student_id = cs.student_id
WHERE cs.class_id = '<some_class_id_here>'
【讨论】:
【参考方案2】:您可以再维护一张表“Goes_to”,该表将仅存储 student_id 和 class_id。这将规范您的数据,并且您可以根据您的要求编写不同类型的查询。
【讨论】:
【参考方案3】:同意伯尼的观点,这是多对多的关系。除了 Bernie 解释的内容之外,您还可以在“class_student”表中添加额外的字段,例如学生在该课程中的平均成绩,或者他没有上过该课程的次数。
【讨论】:
以上是关于MySQL设计一对多?的主要内容,如果未能解决你的问题,请参考以下文章