Mysql 表A上的外键-->;B、 和表B上的外键-->;这是怎么做到的?

Mysql 表A上的外键-->;B、 和表B上的外键-->;这是怎么做到的?,mysql,schema,database,Mysql,Schema,Database,我有两张桌子——“商务”和“商务联系人” 业务联系人表与业务表具有多对一关系。此外,每个企业都有一个“主要联系人”字段,我假设它与business_contacts表是一对多关系 当然,问题是这会为数据插入创建一个catch-22。因为这两个字段都不能为空,所以在我有相应的业务联系人之前,我不能插入业务联系人,但在我有相应的业务联系人之前,我不能插入业务联系人 如果有人能帮我弄清楚一对多的人际关系应该如何处理,我将不胜感激 (项目在MySQL中完成,如果有任何不同)您只想创建一个外键,引用您的业

我有两张桌子——“商务”和“商务联系人”

业务联系人表与业务表具有多对一关系。此外,每个企业都有一个“主要联系人”字段,我假设它与business_contacts表是一对多关系

当然,问题是这会为数据插入创建一个catch-22。因为这两个字段都不能为空,所以在我有相应的业务联系人之前,我不能插入业务联系人,但在我有相应的业务联系人之前,我不能插入业务联系人

如果有人能帮我弄清楚一对多的人际关系应该如何处理,我将不胜感激


(项目在MySQL中完成,如果有任何不同)

您只想创建一个外键,引用您的
业务
表的主键

一个好主意可能是将您的主要联系人直接放在业务表中,并使您的业务联系人表只包含“次要联系人”

伪代码:

table business ( id PRIMARY KEY, col1, col2, col3, zip, street, country );
table business_contacts ( contact_id PRIMARY KEY, business_id FOREIGN KEY REFERENCES business.id,
   zip, street, country );

你能使“主要联系人”为空吗? 然后,您可以插入业务,然后插入业务联系人,然后您可以设置“主要联系人”字段

对于MySQL,您也可以这样做(但我不推荐):

您可以从业务表中删除“主要联系人”,并将其移动到业务联系人表中:

 business
  - business_id
  - name
  - address
  - blah

 business_contact
  - business_contact_id
  - business_id
  - is_primary_contact (bit field)
因此,确定业务的主要联系人成为:

SELECT * FROM business_contact
WHERE business_id = <somevalue> AND is_primary_contact = 1
从业务联系人中选择*
其中,business\u id=和is\u primary\u contact=1

Hi Ant,谢谢您的回复-我想这可能是我必须要做的。我需要为is_primary_Contact&business_id设置一个唯一索引,以确保只有一个primary,但它应该可以完成工作。
SELECT * FROM business_contact
WHERE business_id = <somevalue> AND is_primary_contact = 1