具有3个键的数据库表

时间:2012-10-04 14:40:34

标签: database database-design relational-database

studentclasses之间存在多对多关系。

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

我还有另一个名为books的表,它有特定类的核心书籍。

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

然后我认为如果Ii可以将它映射到交接表上是理想的 - 这似乎是合乎逻辑的,因为核心书籍不仅取决于学生而且取决于课堂。

这是一个很好的设计,让联结表中还有另一把钥匙吗?

所以表:

[student]
stduent_id

[classes]
classes_id

[book]
book_id

[student_classes]
student_id
classes_id
book_id 

3 个答案:

答案 0 :(得分:2)

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

enter image description here

答案 1 :(得分:1)

对于您描述的情况,您建议的模型将起作用,因为,松散地说:

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

要明确:不要将book_Id作为主键的一部分,你没事。

答案 2 :(得分:0)

我想你想要:

[student_classes] student_id classes_id 
[student_classes_books] student_id classes_id book_id 

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