【问题标题】:MySQL design one-to-many?MySQL设计一对多?
【发布时间】:2012-04-14 08:16:50
【问题描述】:

我有一个处理学生的数据库。所以我有表学生和班级。现在每个学生都可以随心所欲地去上课;我将如何在 MySQL 数据库模式中对此进行建模?

学生桌:

student_id
student_name
student_age
...

类表:

class_id
class_name
class_profesor
...

基本上,我不知道如何设计一个表格,让一个学生可以为他/她自己注册任意数量的课程?

我应该为此另做一张桌子吗?
这是一对多的关系吗?

【问题讨论】:

    标签: mysql database database-design


    【解决方案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”表中添加额外的字段,例如学生在该课程中的平均成绩,或者他没有上过该课程的次数。

        【讨论】:

          猜你喜欢
          • 2012-11-11
          • 2011-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多