我正在構建我的第三個數據庫,我不確定如何構建主鍵和唯一約束以確保數據完整性。數據庫設計:主鍵和唯一約束
當公開數據發佈時,數據庫會定期更新,每月一次,每年一次,並且查詢負載較低。
我有一些表中列的組合使每一行都是唯一的。我知道我可以使用複合主鍵,但我不確定這是否是最佳實踐,因爲我閱讀的許多文章都有相互衝突的觀點。
例如,一個表需要的唯一性五列與數據類型:
- SMALLINT
- 炭(7)
- VARCHAR(7)
- SMALLINT
- VARCHAR(3)
我相信這會使主鍵高達25字節並且所有這五列將經常被選擇並經常在where子句中使用。其中一個smallint也是一個外鍵,但沒有外鍵會引用這個表。
我知道的唯一選擇是爲每一行創建一個唯一標識符,將其設置爲主鍵並在五列上創建唯一約束。
- 什麼是最好的選擇,如果是使用複合主鍵應該是聚簇還是非聚簇?
- 是否有一個建議的組合主鍵的最大列數和字節數?
由於沒有外鍵引用此表,沒有下降到複合羣集主鍵。您只需根據查詢表的方式決定哪個列應該是最前面的列,然後爲用戶可能經常搜索的其他列(鍵或不鍵)添加非聚簇索引。 – 2015-04-02 11:58:48
我認爲領先專欄應該是最常用於查詢的專欄?其他欄的順序是否有相關性? – Kieran 2015-04-02 13:03:17
是的,領先列取決於查詢表的方式。例如,如果外鍵列通常作爲一對多標識關係的多邊訪問,那麼將外鍵列指定爲主鍵中的第一個鍵是有意義的。 – 2015-04-03 02:31:07