1

student我在和之间有多对多的关系classes

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

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

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

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

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

所以表:

[student]
stduent_id

[classes]
classes_id

[book]
book_id

[student_classes]
student_id
classes_id
book_id 
4

3 回答 3

2

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

在此处输入图像描述

于 2012-10-04T16:47:01.383 回答
1

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

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

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

于 2012-10-04T16:58:05.840 回答
0

我想你想要:

[student_classes] student_id classes_id 
[student_classes_books] student_id classes_id book_id 

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

于 2012-10-04T14:43:56.383 回答