/ / Klucz obcy na tabeli A -> B, A zagraniczny klucz na tabeli B -> A. Jak to się robi? - mysql, schemat, baza danych

Klucz obcy na tabeli A -> B, A zagraniczny klucz na tabeli B -> A. Jak to się robi? - mysql, schemat, baza danych

Mam dwie tabele - "business" i "business_contacts".

Tabela business_contact ma wiele do jednegozwiązek ze stołem biznesowym. Ponadto każda firma ma pole "główny kontakt" - które, jak przypuszczam, jest relacją jeden do wielu z tabelą business_contacts.

Problem polega oczywiście na tym, że tworzy sięcatch-22 do wstawienia danych. Ponieważ żadne z pól nie może mieć wartości null, nie mogę wstawić business_contact, dopóki nie będę mieć odpowiedniej firmy, ale nie mogę wstawić firmy, dopóki nie otrzymam korespondencji business_contact.

Jeśli ktokolwiek mógłby mi pomóc zorientować się, jak należy traktować wzajemne relacje jeden-do-wielu, będę najbardziej wdzięczny.

(Projekt jest wykonywany w MySQL, jeśli robi jakąkolwiek różnicę)

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz usunąć "główny kontakt" z tabeli biznesowej i przenieść go do tabeli business_contact:

 business
- business_id
- name
- address
- blah

business_contact
- business_contact_id
- business_id
- is_primary_contact (bit field)

Ustalenie głównego kontaktu dla firmy staje się zatem:

SELECT * FROM business_contact
WHERE business_id = <somevalue> AND is_primary_contact = 1

0 dla odpowiedzi nr 2

chcesz tylko utworzyć klucz obcy odnoszący się do klucza podstawowego swojego business stół

dobrym pomysłem jest prawdopodobnie posiadanie głównego kontaktu bezpośrednio w tabeli biznesowej i zrobienie tabeli business_contacts po prostu przytrzymaj "drugorzędne kontakty"

pseudo kod:

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

0 dla odpowiedzi № 3

Czy możesz uczynić "podstawowym kontaktem" zerowalnym? Następnie możesz wstawić firmę, a następnie business_contact, a następnie możesz ustawić pole "główny kontakt".

Alternatywnie dla MySQL możesz to zrobić (ale nie poleciłbym tego.):

/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

... your statements ...

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;