承包商和公司之间单方面关系的数据库设计



公司和承包商可以有联系人,这些联系人可以是公司和承包商,而且这种关系是单方面的(无需另一方接受(。

我想做这样的事情:

联系人:

ULL
ContractorId CompanyId ContactContractorId
1 NULL 15
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压缩为一个表。

最新更新