2010-05-21 13 views
5

Ich habe zwei Tabellen - "Business" und "Business_Contacts".Fremdschlüssel auf Tabelle A -> B, UND Fremdschlüssel auf Tabelle B -> A. Wie wird das gemacht?

Die Tabelle business_contact hat eine Viele-zu-Eins-Beziehung mit der Business-Tabelle. Darüber hinaus hat jedes Unternehmen ein Feld für den primären Kontakt, von dem ich annehme, dass es eine Eins-zu-viele-Beziehung mit der Tabelle business_contacts ist.

Das Problem ist natürlich, dass dies eine Catch-22 für die Dateneinfügung erstellt. Da keines der Felder null sein kann, kann ich keinen business_contact einfügen, bis ich ein entsprechendes Geschäft habe, aber ich kann kein Geschäft einfügen, bis ich einen entsprechenden business_contact habe.

Wenn mir jemand helfen könnte, mich darüber klar zu werden, wie gegenseitige Eins-zu-Viele-Beziehungen behandelt werden sollen, wäre ich sehr dankbar.

(Projekt wird in MySQL getan, wenn es einen Unterschied macht)

Antwort

2

Sie könnten den „Primärkontakt“ aus dem Business-Tabelle entfernen und es in die business_contact Tabelle stattdessen bewegen:

business 
    - business_id 
    - name 
    - address 
    - blah 

business_contact 
    - business_contact_id 
    - business_id 
    - is_primary_contact (bit field) 

die primäre Kontakt für ein Geschäft Bestimmung so wird:

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

Hallo Ant, Danke für die Antwort - ich denke, das ist wahrscheinlich, was ich tun muss. Ich brauche einen eindeutigen Index für is_primary_Contact & business_id, um sicherzustellen, dass nur ein primärer Server die Aufgabe erledigt. – PlankTon

0

Sie nur einen Fremdschlüssel Referenzierung der Primärschlüssel Ihrer business Tabelle

eine gute Idee, wahrscheinlich Ihre primäre Kontakt haben, ist erstellen möchten direkt in Ihrem Business-Tabelle und machen Sie Ihren business_contacts Tisch halten nur "sekundäre Kontakte"

Pseudocode:

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

Können Sie "Primärkontakt" als Nullwert festlegen? Dann können Sie ein Geschäft einfügen, dann ein business_contact und dann können Sie das Feld "primary contact" einstellen.

Alternativ für MySQL Sie tun können (aber ich würde es nicht empfehlen.):

/*!40014 SET FOREIGN_KEY_CHECKS=0 */; 

... your statements ... 

/*!40014 SET FOREIGN_KEY_CHECKS=1 */; 
Verwandte Themen