我有一個表叫球員是否正確與FK有1到1的關係,這也是PK?
- PlayerID(PK)
- 多個列
我希望創建一個具有名爲PlayerExtraInfo包含一個1至1關係到球員的另一個表一些專欄。所以,我有幾種選擇:
而不是創建新表,加PlayerExtraInfo列於表球員
創建PlayerExtraInfo表,並有一個FK的球員表。
球員表
- PlayerID(PK)
- 多個列
- PlayerExtraInfoID(FK)
PlayerExtraInfo表
- PlayerExtraInfo(PK)
- 更多列
相反:PlayerExtraInfo含有FK到播放表中。爲了確保這種關係保持1比1,我添加了一個獨特的約束。
球員表
- PlayerID(PK)
- 多個列
PlayerExtraInfo表
- PlayerExtraInfo(PK) 分
- 更多列
- PlayerID(FK,唯一)
類似於選項3,但混合PK和FK於一體。在這種情況下,我的外鍵也變成了主鍵:
球員表
- PlayerID(PK)
- 多個列
PlayerExtraInfo表
- 玩家ID(PK,FK)
- 多個列
我知道選項1,2是正確的,但由於性能問題,我選項選項3或4,思考這些3 4個選項中選擇約4攻擊我有些疑惑: 所以我的問題是:
- 是選項3,4正確嗎?
- 選項4是否打破任何標準格式?
- 有沒有其他的選擇我沒有想過?
雖然這是事實,但它往往是不成熟的優化。另一方面,如果表2中的數據並不總是需要,選項4可以是更快的解決方案。 – 2012-08-17 12:34:54
不是一個優化,是我擴展表格時的一個起點。此外,唯一的時候,選項4可以更快,然後1將插入/更新行(條件工作只完成表1)。選擇時,我看不出4的速度快於1的原因。即使你選擇的數據通常是1(除非你像從表中選擇*一樣) – 2012-08-17 12:52:19
如果你的表中有BLOB,查詢即使BLOB本身不是查詢列的一部分,也會變慢。另一個原因可以是類繼承的映射。看到我對迭戈的帖子的評論。 – 2012-08-17 15:20:09