Foreign-Key

規範化:“郵政編碼”作為主鍵

  • November 25, 2013

我經常看到您不應該將所有地址欄位(郵編、街道、城市、州、國家等)與您的使用者資訊表(pk_id、姓名、電子郵件…)放在同一個表中。

這將違反第三次正規化。這是有道理的,所有地址欄位都不是基於使用者(或使用者的pk)。

但是,我不止一次看到郵政編碼是一個很好的主/外鍵來解決這個問題?嗯?範例:數據庫規範化

顯然不止一個人可以住在同一個郵政編碼中,所以這對我來說沒有意義。將郵政編碼保留在使用者表中但將地址的其餘部分保留在另一個表中對我來說似乎很奇怪。

分離地址表但仍遵守規範化規則的標準最佳方法是什麼?

您連結到的頁面很簡單,是錯誤的。

將郵政編碼作為地址表中的主鍵是沒有意義的。正如您所說,您希望在同一個郵政編碼中有多個地址。郵政編碼跨越城市、縣和州界線,這使得它作為一個鍵特別差(其他國家的郵政編碼可能沒有那麼問題,但數據建模者總是不得不擔心最壞的情況)。另外,郵政編碼會隨著時間的推移而改變,這不是您想要的主鍵中的地址。

一般來說,鑑於地址往往沒有任何可用作自然主鍵的東西,您的地址表將需要一個address_id沒有意義且僅充當主鍵的合成主鍵 ( )。數據庫有不同的方法來生成合成主鍵、序列和自增列是常見的方法。

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