Database 承包商与公司单边关系的数据库设计

Database 承包商与公司单边关系的数据库设计,database,database-design,Database,Database Design,公司和承包商可以有联系,这些联系可以是公司和承包商,这种关系是单方面的(不需要对方接受) 我想做这样的事情: contact: contact_id company: company_id, ... company_contact: company_id, contact_id contractor: contractor_id, ... contractor_contact: contractor_id, contact_id 联系人: 合同工 公司ID 接触性挛缩症 联系人公司ID 类

公司和承包商可以有联系,这些联系可以是公司和承包商,这种关系是单方面的(不需要对方接受)

我想做这样的事情:

contact: contact_id

company: company_id, ...
company_contact: company_id, contact_id

contractor: contractor_id, ...
contractor_contact: contractor_id, contact_id
联系人:

合同工 公司ID 接触性挛缩症 联系人公司ID 类型 1. 无效的 15 无效的 3. 无效的 22 12 无效的 1. 无效的 44 无效的 22 2.
如果您的模型不要求以不同方式处理公司和承包商,请使用涵盖这两者的通用表。否则,您可以像这样执行上面的前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。这将允许您的承包商参考任一表格,并消除公司联系人和承包商联系人。类似地,您可以将contact_company和contact_contractor压缩为一个表。

基本表是什么样子的?您是否有承包商表、公司表和联系人表?或者您的联系人只是公司/承包商与公司/承包商之间的链接表?只要外键关系可以为空,就应该能够使用一个链接表。如果你不能取消它,那么你需要四个。