我想知道這是不是一個好的設計。我有許多需要地址信息的表格(例如街道,郵政編碼/郵編,國家,傳真,電子郵件)。有時相同的地址會重複多次。例如,可以針對供應商存儲地址,然後將每個採購訂單發送給他們。然後供應商可以更改他們的地址,任何後續的採購訂單都應該有新的地址。這比這更復雜,但這是一個示例要求。這是在關係數據庫中建模地址信息的好方法嗎?
選項1 將所有地址列作爲屬性放在各個表上。在供應商創建時將詳細信息從供應商複製到採購訂單。可能存儲多個副本的
選項2 創建單獨的地址表。從供應商和採購訂單表中獲取一個外鍵到地址表。只允許在地址表上插入和刪除,因爲更新可能會改變超出您的預期。然後我會有一些計劃的任務,從地址表中刪除任何不再被任何東西引用的行,這樣就可以不使用未使用的行。也許在地址表中的所有非pk列上也有一個唯一的約束來阻止重複。
我傾向於選項2.是否有更好的方法?
編輯:我必須保留購買訂單上的地址,因爲它發送時。另外,我建議可能有一個交付地址和一個帳單地址(還有一堆其他地址信息表),這有點複雜。
過了一段時間,我會根據日期大小地刪除舊的採購訂單。在此之後,我打算收集任何不被任何東西引用的地址記錄(否則感覺就像我正在創建一個泄漏)。
雖然我同意需要一個cron作業來清理您的數據是一個非常糟糕的跡象,選項2是正確的方式來做到這一點。選項2是標準化的解決方案。正如cagcowboy所說,實際上並不需要一個cron工作。 – rmeador 2008-11-20 22:51:02
在我看來,這是過度規範化,會創造更多的頭痛,而不是價值。只要地址描述了添加到表中的實體,只要它們沒有被過度複製,選項1就沒有問題。 – JohnFx 2008-11-21 15:39:26