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 № 1Moż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 */;