在工作中,進行了審查,它由三列的表:什麼是數據庫表中的最佳實踐與兩列主鍵,其中一列是可選的?
- 行ID(NOT NULL,整數)
- 上下文ID(NOT NULL,整數)
- 值(NOT NULL,可變字符)
行的總數很小(小於100)。如果沒有上下文ID,則上下文ID當前設置爲0。上下文ID是可選的。
主鍵是(行ID,上下文ID)
在這種情況下,有提出兩個選擇:
保持它,因爲它是
鴻溝表成兩張桌子。上下文ID爲0時的一個表(行ID,值)和上下文ID有值時的一個表(行ID,上下文ID,值)。
如果有大量的行,那麼我同意分割表的決定。如果有少量的行,分割表似乎是矯枉過正。
我會非常有興趣什麼人建議在這種情況呢?總是把單個表分成兩個表是更好嗎?
感謝,
拉里
我認爲你需要提供更多的背景信息。什麼是「行ID」和「上下文ID」?他們是自然的鑰匙還是代理人?如果他們是代理鍵,我不清楚爲什麼你選擇了一個組合鍵(但這真的取決於其他表如何加入到這張表以及如何使用它)。 – orange
感謝您的檢查。這兩個值都是代理鍵。行編號命名不正確。它應該真的是「財產ID」。它是爲了識別一個屬性,例如名稱。 「上下文ID」旨在爲該屬性指定上下文。因此,一般屬性的上下文ID爲0.例如,對於加利福尼亞州的人來說,只有屬性可以具有「上下文ID」= 1,對於內華達州來說,具有「上下文ID」爲2的屬性。 –
「Context ID」中存儲0的問題到底是什麼?你是否試圖執行一個FOREIGN KEY,並且由於在父表中沒有相應的行,所以0是這樣的? –