Foreign-Key
將常用重複欄位移動到新表中
我仍處於新系統的設計階段,我注意到有幾個地方不同類型的對象共享相似的欄位。
在這種情況下,我們的客戶、辦公室、倉庫等具有地址欄位,例如
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
。