公司和承包商可以有联系人,这些联系人可以是公司和承包商,而且这种关系是单方面的(无需另一方接受(。
我想做这样的事情:
联系人:
ContractorId | CompanyId | ContactContractorId | |
---|---|---|---|
1 | NULL | 15 | ULL|
NULL | 22 | ||
NULL | 44 | NULL | 22 |
如果您的模型不需要以不同的方式处理公司和承包商,请使用涵盖这两者的通用表。否则,你可以这样做上面的前3列:
contact: contact_id
company: company_id, ...
company_contact: company_id, contact_id
contractor: contractor_id, ...
contractor_contact: contractor_id, contact_id
最后两列:
contact_company: contact_id, company_id
contact_contractor: contract_id, contractor_id
这将实现引用完整性。
如果您不关心外键,请在公司表和承包商表中使用唯一密钥。例如序列或uuid。这将允许您的承包商参考任一表格,并消除company_contact和contractor_contact。类似地,您可以将contact_company和contact_contrator压缩为一个表。