我意识到这些类型问题的答案往往“取决于”,但我仍然想知道普遍的共识可能是什么。
我正在处理多个实体,例如
所有这些都有联系信息,如电子邮件,电话和地址。
我想要存储联系信息的两种设计方法是
方法1)在联系表与公司,慈善机构,审计员和盘点工作者之间创建角色表。
dbo.Company - > dbo.Companyaddress< - dbo.email
dbo.Auditor-> dbo.AuditorAddress< - dbo.Address
优点是,数据库中只需要一个地址,电话和电子邮件表,每个实体类型的所有电话号码,地址和电子邮件都存储在一个地方 缺点是它创建了许多关联表
方法2)为每家公司,慈善机构,审计员和清单
创建一个单独的联系表dbo.Company - > dbo.CompanyContactaddress
dbo.Auditor - > dbo.AuditorContactAddress
这样做的优点更容易实现和维护 缺点是联系人详细信息存储在整个数据库的多个位置。
如果有人有任何其他想法,将不胜感激。
非常感谢
答案 0 :(得分: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个联系人的情况,但它没有留下增长空间。
答案 1 :(得分:0)
我更喜欢你的方法2,但它仍然看起来太多了。为什么不只是有一个PhoneNumber,Address等...存储所有地址,电话号码,whatevers的表格,然后从公司,审计员等参考......?我可能就是这样做的。
答案 2 :(得分:0)
您可以为所有人使用单个表,并使用如下所示的数据类型。