我正在扩展CRM应用程序的模型。
在现有模型中,我们有这些表:
我们想要创建一个名为:
的新表那可以是:
定义此表的最佳方法是什么?
Relation
中创建3个可空的FK,其中一个不需要为空(在代码中)Relation
中将2个可空的FK设为p和c,其中一个或两个必须不为空(在代码中)Relation
和这些表格(p,c,cp)之间制作3个新的n:m表格谢谢, 埃弗特-扬
答案 0 :(得分:1)
因此,关系或多或少是一种联系,可以是私人关系(与人的联系),也可以是公司或公司中的特定人。
因此,关系应该有两个可选(即可为空)字段:对于一个人和一个公司。
您对Person,Company和CompanyPerson有外键约束,因此每当填充id_person时,它必须在表Person中;每当id_company被填满时,它必须在表公司;每当两者都填满时,他们必须在表CompanyPerson中。
此外,您还要添加一个检查约束,以确保为每个Relation记录填充两个字段中的至少一个。
答案 1 :(得分:0)
实现的另一个想法可以是人们称之为polymorphic association
的内容。您的Relation
表应包含2个字段,NOT NULL
如下:
Relation
- entity varchar(10) NOT NULL
- entity_id integer NOT NULL
当它是某人时,entity
字段应包含字符串Person
,而entity_id
应包含Person
表的外键。
当它是公司时,entity
字段应包含字符串Company
,entity_id
应包含Company
表的外键。
然后,您可以在应用程序代码上对其进行抽象。