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

时间:2018-09-27 21:15:24

标签: database database-design model

我有3个实体(客户,转销商,控制站),每个实体都可以有多行包含另一个实体(联系人)。我已经制作了一个带有鱼尾纹表示法的实体关系图,以建立该连接,而且我还必须创建三个其他实体(Controlstation_Contact,Reseller_Contacts,Clients_Contacts),如您在图中所看到的。这是最好的方法还是我可以做得更好?我认为,在Contacts实体中使用客户,经销商和控制站的主键作为外键不是一个好主意。感谢您的任何建议

enter image description here

1 个答案:

答案 0 :(得分:1)

不是,基本上,这是您要保持参照完整性所要做的:即使每个联系人之间可能永远也没有其他联系,在每个具有联系的实体和Contacts本身之间创建许多:许多关系。实体。从技术上讲,Contacts与每个联结表之间的关系是一对多:除非向Contacts_Id添加唯一约束,否则该图不太准确。

您可能会想通过创建带有Owner_IdOwner_TypeContacts_Id字段的单个中介实体来减少表的数量,其中Owner_Type表示ClientsResellersControlstations中的哪一个适用。不要屈服!数据库无法保证Owner_Id引用了多个表中的一个值,因此您可能会遇到一些糟糕的数据完整性难题。

基于您的大小写,这看起来像SQL Server吗?如果RDBMS并非一成不变,则PostgreSQL具有表继承功能,这使您可以将父表后面的三个具有联系的实体联合。然后,您可以在联系人表中具有指向父级的外键,或者在最坏的情况下只有一个联结表来支持多对多关系。它不是标准的RDBMS功能,因此不是Postgres。