2012-10-04 55 views
1

我在studentclasses之間有多對多的關係。有3個鍵的數據庫表

我創建了一個名爲student_classes的另一個表(聯結表),用於保存student的主鍵和class的主鍵,這樣可以將多對多關係建模爲標準數據庫設計。

我還有另一張名爲books的表,它具有特定類的核心書籍。

學生可以選擇哪個一個他/她想要用於課堂的核心書籍。我打算將它添加到classes表中,但書的選擇取決於學生。

然後,我認爲如果Ii能夠將它映射到交界表上,這將是理想的 - 因爲核心書不僅取決於學生,還取決於課程。

這是一個很好的設計,可以讓交匯處擁有另一本書的關鍵嗎?

所以表:

[student] 
stduent_id 

[classes] 
classes_id 

[book] 
book_id 

[student_classes] 
student_id 
classes_id 
book_id 
+0

課程與課程相同嗎?或者同一學期的同一課程可以有多個班級?圖書清單是由班級還是課程確定的? –

回答

2

在這個模型中(根據您的描述)的學生可以只用一本書針對特定的主題,如果你需要不止一個,然後移動BookIDStudentBook表的主鍵。請注意,StudentBook表中有兩個外鍵:FK1 {StudentID, SubjectID}FK2 {SubjectID, BookID}

enter image description here

+0

幾乎所有的大學課程都有不止一本書! – HLGEM

+0

謝謝......這對我有很大的幫助。 – user1555190

+0

如何首先在EF代碼中映射它? – Frank

0

我想你想:

[student_classes] student_id classes_id 
[student_classes_books] student_id classes_id book_id 

這將允許在需要的地方的學生的情況下選擇一個以上的書。根據我的經驗,許多課程都需要一個以上的核心文本。

1

對於您所描述的情況,你建議將工作模式,因爲嚴格意義:

  • 主鍵唯一在表
  • 所有其他定義行(實體)表中的列是主鍵的屬性
  • 這裏,主鍵是stduent_id + classes_id
  • 正確地說,book_ ID是stduent_id的屬性 + classes_id

需要明確的是:不要讓主鍵的book_Id一部分,你的罰款。