2012-08-01 30 views
0

比方說,我們有一個Player表和Team桌子和一個一對多它們之間的關係(Player是一個Team僅成員或沒有成員)數據庫設計。一到多的額外的屬性

所以我在Player表中有一個可空的team_id字段,引用Team表。

但是現在我必須存儲關於球員在球隊中的位置的額外信息。像:

  • isCaptain
  • number
  • 等...

什麼是正確的(正常)的方式來實現這一點?

我最好的想法是額外的表:

Player一到一個(NULL)PlayerTeam多到一個(NOT NULL)Team

+0

如果一個玩家只能擁有一個團隊,那麼這些額外的屬性在玩家表本身是不是有意義?除非你可能有不同類型的PlayerTeam元數據配置或其他東西。 – jdi 2012-08-01 04:03:09

+0

我只是不確定是否正確使用額外的'NULL'字段來污染玩家表。我怎麼能確定當'team_id'是'NULL'時,所有額外的字段也是'NULL'? – dmzkrsk 2012-08-01 04:07:22

回答

3

我建議你自己的建議作出新的表:

id | player_id | team_id | role_id | number 

,然後進行player_id獨特的,TEAM_ID不爲空。

這將保持播放器表清潔和數據庫正常化。

+1

我喜歡它。並且在player_id,team_id,role_id,number上有一個唯一的分段索引,以確保沒有重複的關係。 – 2012-08-01 04:08:37

0

如果玩家只能有一個團隊,您可以/應該直接在Player上存儲該信息。另一方面,如果您打算存儲歷史信息,則Player-Team可能會變成多對多,在這種情況下,PlayerTeam連接表將是放置該信息的正確位置。

相關問題