Normalization

兩個不相關的表與第三個表的外鍵是否打破了第一個範式?

  • May 20, 2014

我想知道這是否打破了第一個正常形式。

AddressTable
 Id           - PK
 Street
 City
 State

BusinessTable
 Id           - PK
 BusinessName
 AddressId    - FK

PersonTable
 Id           - PK
 FirstName
 LastName
 AddressId    - FK

我問的原因是我聽說由於地址表上的任何給定欄位都可能是公司地址或個人地址,因此您在同一列中有兩種不同的數據類型。根據該論點,我需要有一個 BusinessAddress 和一個 PersonalAddress 表。同時,這個數據庫似乎井井有條,而且我習慣了打破第一範式的數據庫不太明智,而且出現異常似乎並不容易。最接近出現異常的情況是,如果企業和個人連結到同一個地址,那麼如果其中一個更新其地址但另一個沒有更新(或者它們可能指向兩個具有相同地址的不同記錄),則會產生問題除了 id 之外的每個數據,這也可能是異常)。

不,還好。

考慮一下您擁有物品所有者的情況。許多類型的東西都可以有一個所有者,不值得將所有者分成不同類型的所有者。

好不好就看使用情況了。如果您以任何方式區別對待公司地址和個人地址,那麼它們應該是兩個單獨的表,否則一個就可以了。過度通用和重用表可能是一個問題,如果有疑問,兩個表連接比拆分更容易。

如果您開始將人們與使用哪個地址的企業聯繫起來,可能會出現混淆,但在任何一種情況下都是如此。

引用自:https://dba.stackexchange.com/questions/65421