student
和classes
之间存在多对多关系。
我创建了另一个名为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
答案 0 :(得分:2)
在此模型中(根据您的描述)学生只能为给定主题使用一本书,如果您需要多个,则将BookID
移动到StudentBook
表的主键中。请注意,StudentBook
表格中有两个外键:FK1 {StudentID, SubjectID}
和FK2 {SubjectID, BookID}
。
答案 1 :(得分:1)
对于您描述的情况,您建议的模型将起作用,因为,松散地说:
要明确:不要将book_Id作为主键的一部分,你没事。
答案 2 :(得分:0)
我想你想要:
[student_classes] student_id classes_id
[student_classes_books] student_id classes_id book_id
这将允许学生在需要的情况下选择多本书。根据我的经验,许多课程需要不止一个核心文本。