【问题标题】:DataBase Analysis-junction table数据库分析-连接表
【发布时间】:2014-01-02 20:39:11
【问题描述】:

这件事让我很困惑, 我有一个大学信息系统学生表和科目(课程)表之间的连接表,主键是复合键(StudentID,SubjectID),它们都是外键,但学生可能会在考试中失败并重复主题所以我们将有重复的PK,我们需要记录所有数据。我有两种方法可以解决这个问题,但我不知道最好的方法?

  1. 添加新列作为主键而不是复合键。
  2. 加入组合键Season Column 和year 列,组合键将是(StudentID, SubjectID, Season, Year)。不得不提的是,我不需要这个复合键作为外键。

哪种方式对性能和数据库完整性更好?

【问题讨论】:

    标签: database database-design primary-key composite-primary-key junction-table


    【解决方案1】:

    主题和考试是独立的(如果相关)概念,因此您不应尝试在同一个表格中表示它们。此外,针对给定科目举行了考试的事实与任何特定学生参加该考试的事实是分开的。将所有这些概念拆分成各自的表格,模型变得更加自然,例如:

    代表多次参加同一考试的学生只需在 STUDENT_EXAM 表中添加多行即可。


    注意:STUDENT_SUBJECT 仅记录学生已注册该科目的事实,而不是何时(哪一年/学期)。保留特定学期的信息可能需要模型中的其他表格和更复杂的关系。

    注意:此模型中存在菱形依赖关系。由于 SUBJECT_ID 是从“顶部”(SUBJECT)传递到“两侧”(STUDENT_SUBJECT,EXAM),然后在菱形的“底部”(STUDENT_EXAM)处合并,因此学生无法参加某个科目的考试他还没有注册。

    【讨论】:

    • 这是我没有提到它的好方法,但我要求的主要概念是关于复合键,我理解它是好的。非常感谢 Mush
    猜你喜欢
    • 2017-04-11
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2012-01-24
    • 2020-11-12
    相关资源
    最近更新 更多