Foreign-Key

將常用重複欄位移動到新表中

  • July 19, 2014

我仍處於新系統的設計階段,我注意到有幾個地方不同類型的對象共享相似的欄位。

在這種情況下,我們的客戶、辦公室、倉庫等具有地址欄位,例如Address1, Address2, ... Postcode. 因此,我強烈考慮創建一個Addresses包含所有這些欄位和一個 ID 的新表,並使用包含地址的所有不同類型的外鍵連結到該表。同樣的事情也可以用於電話/傳真號碼組。

為了說明這一點,以下是抽象形式的目前情況……

Customers        Offices
- CustomerID     - OfficeID
- FirstName      - OfficeName
- Surname        - Telephone
- Address1       - Address1
- Address2       - Address2
- Address3       - Address3
- Address4       - Address4
- Postcode       - Postcode

……改變之後……

Customers        Offices         Addresses
- CustomerID     - OfficeID      - AddressID
- FirstName      - OfficeName    - Address1
- Surname        - Telephone     - Address3
- AddressID      - AddressID     - Address3
                                - Address4
                                - Postcode

這裡的目標並不是真正的規範化(我不打算在這裡消除重複的地址,即使它可能是可能的),而是幫助保持相似的數據子類型一致。這也意味著在模型程式碼中,我可以用一個類來處理所有地址,無論它們屬於什麼。我希望加入這些表的成本不會那麼高,特別是因為我並不總是需要所有案例的地址。

請您的意見/經驗!

是的,移動它。Customers額外的連接成本將是最小的(如果有正確的索引!)並且您將獲得所有其他不使用地址的查詢的性能改進,因為您將在和中每頁獲得更多行Offices

未來,任何主數據管理 (MDM) 或數據清理都將更容易,將值集中在一個位置。

需要注意的關鍵點是列語義的常見定義(Address4例如,對於每個可能的地址來說,城市是不是?)。例如,這對於報告或按地區匯總銷售額可能很重要。對於您可能選擇在 上創建的任何自然鍵,可能難以定義唯一性Addresses

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