Внешний ключ в таблице A -> B, И внешний ключ в таблице B -> A. Как это сделать? - PullRequest
5 голосов
/ 21 мая 2010

У меня есть две таблицы - «бизнес» и «бизнес_контакты».

Таблица business_contact имеет отношение «многие к одному» с таблицей business. Кроме того, у каждого бизнеса есть поле «первичный контакт», которое, как я предполагаю, является отношением «один ко многим» с таблицей business_contacts.

Проблема, конечно, в том, что это создает ловушку для вставки данных. Поскольку ни одно из полей не может быть пустым, я не могу вставить business_contact, пока у меня нет соответствующего бизнеса, но я не могу вставить бизнес, пока у меня нет соответствующего business_contact.

Если бы кто-нибудь мог помочь мне разобраться, как должны решаться взаимные отношения один-ко-многим, я был бы очень признателен.

(Проект выполняется в MySQL, если он имеет какое-либо значение)

Ответы [ 3 ]

2 голосов
/ 21 мая 2010

Вы можете удалить «основной контакт» из вашей бизнес-таблицы и переместить его в таблицу 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
0 голосов
/ 21 мая 2010

Можете ли вы сделать «первичный контакт» обнуляемым? Затем вы можете вставить бизнес, затем business_contact и затем установить поле «основной контакт».

В качестве альтернативы для MySQL вы можете сделать (но я бы не рекомендовал это.):

/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

... your statements ...

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
0 голосов
/ 21 мая 2010

вы хотите создать только внешний ключ, ссылающийся на первичный ключ вашей 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...