数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践相关的知识,希望对你有一定的参考价值。

我有3个实体(客户端,经销商,控制站),每个实体可以有多行另一个实体(联系人)。我已经制作了一个带有乌鸦符号的实体关系图来建立连接,我必须创建另外三个实体(Controlstation_Contact,Reseller_Contacts,Clients_Contacts),如图所示。这是最好的方法吗?还是我可以做得更好?我认为使用Contacts实体中的客户端,经销商和Controlstation的主键作为外键不是一个好主意。谢谢你的建议

enter image description here

答案

不,这基本上是为了保持参照完整性所必须做的事情:创建许多:每个具有联系人的实体和Contacts本身之间的许多关系,即使一个联系人可能永远不会涉及多个其他实体。从技术上讲,Contacts和每个联结表之间的关系是一个:很多,除非你为Contacts_Id添加一个独特的约束,所以图表不太准确。

您可能会想通过使用Owner_IdOwner_TypeContacts_Id字段创建单个中间实体来减少表的数量,其中Owner_Type指示ClientsResellersControlstations中的哪一个适用。不要放弃!数据库无法保证Owner_Id引用多个其他表中的值,因此您可能会遇到一些错误的数据完整性问题。

基于你的外壳,这看起来像SQL Server?如果RDBMS没有设置,PostgreSQL具有表继承,允许您联合父表后面的三个具有联系人的实体。然后你可以在联系人表中拥有一个外键,或者在最坏的情况下只有一个联结表来支持很多:很多关系。它不是标准的RDBMS功能,但是Postgres或者没有。

以上是关于数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

软考-后篇

八StarUML的Entity-Relationship Diagram(实体关系图)示例

如何用Visio画数据库实体关系图

DBMS-数据库设计与E-R模型:E-R模型约束E-R图E-R扩展特性E-R图转换为关系模式UML建模

数据库的设计

E-R模型中实体和属性的概念?