我有3个实体(客户,转销商,控制站),每个实体都可以有多行包含另一个实体(联系人)。我已经制作了一个带有鱼尾纹表示法的实体关系图,以建立该连接,而且我还必须创建三个其他实体(Controlstation_Contact,Reseller_Contacts,Clients_Contacts),如您在图中所看到的。这是最好的方法还是我可以做得更好?我认为,在Contacts实体中使用客户,经销商和控制站的主键作为外键不是一个好主意。感谢您的任何建议
答案 0 :(得分:1)
不是,基本上,这是您要保持参照完整性所要做的:即使每个联系人之间可能永远也没有其他联系,在每个具有联系的实体和Contacts
本身之间创建许多:许多关系。实体。从技术上讲,Contacts
与每个联结表之间的关系是一对多:除非向Contacts_Id
添加唯一约束,否则该图不太准确。
您可能会想通过创建带有Owner_Id
,Owner_Type
和Contacts_Id
字段的单个中介实体来减少表的数量,其中Owner_Type
表示Clients
,Resellers
和Controlstations
中的哪一个适用。不要屈服!数据库无法保证Owner_Id
引用了多个表中的一个值,因此您可能会遇到一些糟糕的数据完整性难题。
基于您的大小写,这看起来像SQL Server吗?如果RDBMS并非一成不变,则PostgreSQL具有表继承功能,这使您可以将父表后面的三个具有联系的实体联合。然后,您可以在联系人表中具有指向父级的外键,或者在最坏的情况下只有一个联结表来支持多对多关系。它不是标准的RDBMS功能,因此不是Postgres。