数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践相关的知识,希望对你有一定的参考价值。
我有3个实体(客户端,经销商,控制站),每个实体可以有多行另一个实体(联系人)。我已经制作了一个带有乌鸦符号的实体关系图来建立连接,我必须创建另外三个实体(Controlstation_Contact,Reseller_Contacts,Clients_Contacts),如图所示。这是最好的方法吗?还是我可以做得更好?我认为使用Contacts实体中的客户端,经销商和Controlstation的主键作为外键不是一个好主意。谢谢你的建议
不,这基本上是为了保持参照完整性所必须做的事情:创建许多:每个具有联系人的实体和Contacts
本身之间的许多关系,即使一个联系人可能永远不会涉及多个其他实体。从技术上讲,Contacts
和每个联结表之间的关系是一个:很多,除非你为Contacts_Id
添加一个独特的约束,所以图表不太准确。
您可能会想通过使用Owner_Id
,Owner_Type
和Contacts_Id
字段创建单个中间实体来减少表的数量,其中Owner_Type
指示Clients
,Resellers
和Controlstations
中的哪一个适用。不要放弃!数据库无法保证Owner_Id
引用多个其他表中的值,因此您可能会遇到一些错误的数据完整性问题。
基于你的外壳,这看起来像SQL Server?如果RDBMS没有设置,PostgreSQL具有表继承,允许您联合父表后面的三个具有联系人的实体。然后你可以在联系人表中拥有一个外键,或者在最坏的情况下只有一个联结表来支持很多:很多关系。它不是标准的RDBMS功能,但是Postgres或者没有。
以上是关于数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
八StarUML的Entity-Relationship Diagram(实体关系图)示例