2010-09-03 71 views
2

我意識到這些類型的問題的答案通常「取決於」,但我仍然想知道一般共識可能是什麼。數據庫設計 - 多個實體的類似聯繫信息

我處理的多個實體如

  1. 公司
  2. 慈善
  3. 審計
  4. Stocktaker

等等...

所有有聯繫諸如電子郵件,電話等信息ephone和地址。

的兩種設計方法我想存儲聯繫人信息是

方法1)建立聯繫表和公司,慈善機構,審計師和stocktaker之間的角色表。

  • dbo.Company - > dbo.CompanyAddress < - dbo.Address
  • dbo.Company - > dbo.Companytelephone < - dbo.telephone
  • dbo.Company - > dbo.Companyaddress < - DBO .email

  • dbo.Auditor-> dbo.AuditorAddress < - dbo.Address

  • dbo.Auditor-> dbo.Auditortelephone < - d bo.telephone
  • dbo.Auditor-> dbo.Auditoraddress < - dbo.email

優勢,但僅需要一個地址,電話和電子郵件表,數據庫和所有的電話號碼,地址和電子郵件的每個實體類型被存儲在一個地方 缺點是它產生大量關聯表

方法2)創建每個公司,慈善機構,審計和stocktaker一個單獨的接觸表

  • dbo.Company - > dbo.CompanyContactAddress
  • dbo.Company - > dbo.CompanyContacttelephone
  • dbo.Company - > dbo.CompanyContactaddress

  • dbo.Auditor - > dbo.AuditorContactAddress

  • DBO .Auditor - > dbo.AuditorContacttelephone
  • dbo.Auditor - > dbo.AuditorContactaddress

的這個優點是容易我實施和維護 缺點是聯繫人詳細信息存儲在整個數據庫的多個位置。

如果任何人有任何其他的想法,將不勝感激。

非常感謝

回答

1

當你說「它取決於」時,你是正確的。這取決於你的數據將用於OLTP你會看到一個規範化的設計,並且一個報告系統,你會希望數據去規範化,聯繫信息與其他數據組件一起。

在標準化數據庫中,標準化的級別也可以進行辯論。有些人會說你的聯繫信息是粒狀的,就像你在第一種情況下一樣。我喜歡走「中間路線」,我會把所有聯繫信息放在一張表中,其中包括地址,電話和電子郵件。

Contact 
ID, Address, Address2, City, State, Zip, Phone, Email 

然後創建一個單獨的表

CompanyContact 
ID, CompanyID, ContactID 

這也可以被集成到該公司表的關係,只需添加一個ContactID本公司表,避免了單獨的關係和加入。

你也可以實現一個表ContactTypes

ContactType 
ID, ContactType 
1, Company 
2, Charity 
3, Auditor 
.... 

然後,您可以指定在CompanyContact表中刪除需要的關係。雖然它適合每種類型1個聯繫人的情況,但不會留下增長空間。

+0

乾杯達斯汀。我喜歡路中間的想法。我想我會使用這個想法,但我需要遷出地址,因爲潛在的各種實體可能有數十個地址。歡呼的建議。 – Pixelated 2010-09-03 13:40:57

0

我喜歡你的方法2更好,但它似乎仍然太多的工作。爲什麼不只有一個存儲所有地址,電話號碼,發信人的電話號碼,地址等......表格,然後引用公司,審計員等等......?這可能是我如何做到的。

+0

我確實考慮過這種方法,但假設我有10個不同的實體,所有鏈接到接觸電話表,例如這將創建10個接觸電話表中的FK列,每次有9個空值。 – Pixelated 2010-09-03 13:32:03

+0

@FairFunk:我不確定我能得到它......爲什麼會有一個ContactTelephone中的密鑰返回給實體?不應該從另一個方向,從實體到ContactTelephone?那麼,如果你真的想要一個反向鏈接,你可以有實體ID,然後另一個字段告訴你看哪個實體表,所以你只有2個FK列在ContactTelephone而不是10個。 – FrustratedWithFormsDesigner 2010-09-03 13:47:49

0

您可以爲所有人使用單個表格並使用如下所示的數據類型。 alt text

+0

這是什麼數據庫?並非所有數據庫都支持UDT。 – FrustratedWithFormsDesigner 2010-09-03 13:25:16

+0

沒有涉及的UDT,但這一個是SQLite db – Don 2010-09-03 16:00:51