我意识到这些类型问题的答案通常是“视情况而定”,但我仍然想知道普遍的共识可能是什么。
我正在处理多个实体,例如
等等等等...
其中都有联系信息,如电子邮件、电话和地址。
我正在考虑存储联系信息的两种设计方法是
方法 1) 在联系表和公司、慈善机构、审计员和存货员之间创建角色表。
优点,数据库中只有一个地址、电话和电子邮件表,并且每个实体类型的所有电话号码、地址和电子邮件都存储在一个地方
缺点是它创建了很多关联表
方法 2) 为每个公司、慈善机构、审计师和存货员创建一个单独的联系表
这样做的优点是更容易实现和维护
缺点是联系人详细信息存储在数据库中的多个位置。
如果有人有任何其他想法,将不胜感激。
非常感谢
最佳答案
当你说“这取决于”时,你是对的。这取决于您的数据将用于 OLTP,您将查看规范化设计,以及您希望使用与其他数据组件内联的联系信息对数据进行非规范化的报告系统。
在规范化数据库中,规范化的级别也可以争论。有些人会说像在第一个场景中那样拥有详细的联系信息。我喜欢走“路中间”我会把所有的联系信息放在一张 table 上,包括地址、电话和电子邮件。
Contact
ID, Address, Address2, City, State, Zip, Phone, Email
然后创建一个单独的表的关系
CompanyContact
ID, CompanyID, ContactID
这也可以集成到公司表中,只需添加
ContactID
到 Company 表并避免单独的关系和连接。你也可以用
ContactTypes
实现一个表.ContactType
ID, ContactType
1, Company
2, Charity
3, Auditor
....
然后你可以在
CompanyContact
中指定它表并消除对关系的需要。尽管它适合您的每种类型 1 个联系人的场景,但它并没有留下增长空间。
关于database-design - 数据库设计 - 多个实体的类似联系信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636061/