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

问题描述 投票:0回答:1

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

enter image description here

database database-design model
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.