【问题标题】:A database table having 3 keys具有 3 个键的数据库表
【发布时间】:2012-10-04 14:40:33
【问题描述】:

studentclasses 之间存在多对多关系。

我创建了另一个名为student_classes 的表(联结表)来保存student 的主键和class 的主键,这样就可以将多对多关系建模为标准数据库设计。

我还有另一个名为books 的表,其中包含特定课程的核心书籍。

学生可以选择他/她想要在课堂上使用的一本核心书籍。我打算将它添加到 classes 表中,但书的选择取决于学生。

然后我认为如果 Ii 可以将其映射到连接表上会很理想 - 这似乎合乎逻辑,因为核心书籍不仅取决于学生,还取决于班级。

如果让连接表持有另一本书的钥匙,这会是一个好的设计吗?

所以表格:

[student]
stduent_id

[classes]
classes_id

[book]
book_id

[student_classes]
student_id
classes_id
book_id 

【问题讨论】:

  • 课程和课程是一回事吗?或者同一学期的同一门课可以有多节课?书单是由班级决定的还是由课程决定的?

标签: database database-design relational-database


【解决方案1】:

在此模型中(根据您的描述),学生对于给定主题只能使用一本书,如果您需要多本,则将 BookID 移动到 StudentBook 表的主键中。注意StudentBook表中有两个外键:FK1 {StudentID, SubjectID}FK2 {SubjectID, BookID}

【讨论】:

  • 几乎我所有的大学课程都不止一本书!
【解决方案2】:

对于您描述的情况,您提出的模型将起作用,因为,粗略地说:

  • 主键唯一地定义了表中的一行(实体)
  • 表中的所有其他列都是主键的属性
  • 这里,主键是stduent_id + classes_id
  • 正确地说,book_id 是 stduent_id + classes_id 的属性

明确一点:不要让 book_Id 成为主键的一部分,你很好。

【讨论】:

    【解决方案3】:

    我想你想要:

    [student_classes] student_id classes_id 
    [student_classes_books] student_id classes_id book_id 
    

    这将允许学生在需要时选择不止一本书。根据我的经验,许多课程需要不止一个核心文本。

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2021-10-26
      • 2017-08-03
      • 2020-03-09
      • 1970-01-01
      相关资源
      最近更新 更多