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