数据库设计 - 多个实体的类似联系信息
我意识到这些类型的问题的答案通常“取决于”,但我仍然想知道一般共识可能是什么。数据库设计 - 多个实体的类似联系信息
我处理的多个实体如
- 公司
- 慈善
- 审计
- 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
的这个优点是容易我实施和维护 缺点是联系人详细信息存储在整个数据库的多个位置。
如果任何人有任何其他的想法,将不胜感激。
非常感谢
当你说“它取决于”时,你是正确的。这取决于你的数据将用于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个联系人的情况,但不会留下增长空间。
我喜欢你的方法2更好,但它似乎仍然太多的工作。为什么不只有一个存储所有地址,电话号码,发信人的电话号码,地址等......表格,然后引用公司,审计员等等......?这可能是我如何做到的。
我确实考虑过这种方法,但假设我有10个不同的实体,所有链接到接触电话表,例如这将创建10个接触电话表中的FK列,每次有9个空值。 – Pixelated 2010-09-03 13:32:03
@FairFunk:我不确定我能得到它......为什么会有一个ContactTelephone中的密钥返回给实体?不应该从另一个方向,从实体到ContactTelephone?那么,如果你真的想要一个反向链接,你可以有实体ID,然后另一个字段告诉你看哪个实体表,所以你只有2个FK列在ContactTelephone而不是10个。 – FrustratedWithFormsDesigner 2010-09-03 13:47:49
您可以为所有人使用单个表格并使用如下所示的数据类型。
这是什么数据库?并非所有数据库都支持UDT。 – FrustratedWithFormsDesigner 2010-09-03 13:25:16
没有涉及的UDT,但这一个是SQLite db – Don 2010-09-03 16:00:51
干杯达斯汀。我喜欢路中间的想法。我想我会使用这个想法,但我需要迁出地址,因为潜在的各种实体可能有数十个地址。欢呼的建议。 – Pixelated 2010-09-03 13:40:57