表A上的外键 - >表B上的B,AND外键 - > A.这是怎么做到的?

时间:2010-05-21 10:29:35

标签: mysql schema database

我有两张桌子 - 'business'和'business_contacts'。

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

问题当然是,这会为数据插入创建一个catch-22。由于这两个字段都不能为空,因此在有相应的业务之前我无法插入business_contact,但在有相应的business_contact之前我无法插入业务。

如果有人能帮助我理解如何处理相互的一对多关系我会非常感激。

(项目在MySQL中完成,如果它有任何区别)

3 个答案:

答案 0 :(得分:2)

您可以从商家信息表中删除“主要联系人”,然后将其移至business_contact表:

 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

答案 1 :(得分:0)

您只想创建引用business

主键的外键

一个好主意可能是将您的主要联系人直接放在您的商家信息表中,并使您的business_contacts表只保留“次要联系人”

伪代码:

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 );

答案 2 :(得分:0)

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

您也可以选择MySQL(但我不推荐它。):

/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

... your statements ...

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;