答案是機械地從功能依賴的想法中派生出來的。
對於一個關係中存在的值,這意味着值必須存在於另一個關係中。如果這是真的,屆時將有來自相關表(前)外鍵約束的獨立表(後者)
看待這個另一種方式是一對一的關係,實際上只是一個特殊的一對多關係的情況;只有而不是許多,你只有一個。
在SQL
:
CREATE TABLE independent (
id INTEGER PRIMARY KEY
);
CREATE TABLE dependent (
independent_id INTEGER UNIQUE NOT NULL FOREIGN KEY REFERENCES independent(id)
);
像一對多,「衆多」有一個外鍵「一」,但打開「多」到「一」,只是使它unique
。這是典型的便利通過使外鍵列上的依賴關係的主鍵的這種關係來表達這一切:
CREATE TABLE dependent (
independent_id INTEGER PRIMARY KEY FOREIGN KEY REFERENCES independent(id)
);
編輯:我注意到您的標題提出了一個不同的問題比你的身體似乎問。以上回答標題。
從數據庫規範化的角度來看,可能最好使用多個表,如上所述,以支持可空屬性。空值是一種帶外方式,表示特定屬性的價值在某種程度上是「特殊的」,但並不真正強化對可能意味着什麼的任何特定解釋。空manager_id
可能意味着完全不同於空birthdate
,即使它們具有相同的標記。
從嚴格的抽象或學術的角度來看,添加表格並不是一件壞事;也沒有添加屬性。選擇應始終基於您實際需要建模的數據類型。
這就是說,有一些非常實際的原因使用其中一個或另一個。最明顯的性能原因來自於使用其中一個或另一個的空間成本。當通常使用可選值時,外鍵和相應索引使用的額外空間不會很好地支付。同樣,如果可選值很少使用;將這些值放在另一個關係中更加緊湊。具有可空屬性會佔用表中幾乎不用的空間。
找出哪些基本上需要實際的數據,以及性能測試這些(也許是其他)配置,看看哪個最好。
另請參閱此關係問題:http://stackoverflow.com/questions/5177991/normalization-of-an-11-or-10-relationship – Hibou57