2010-11-30 20 views
0

Die Tabellen in Frage sind:Foreign Key Constraint Problem

Anfrage

  • id
  • accepted_quote_id

supplier_enquiry

  • ID
  • enquiry_id

Zitat

  • ID
  • enquiry_id
  • supplier_enquiry_id

Die Einschränkungen sind wie folgt:

  • CONSTRAINT supplier_enquiry_ibfk_1 FOREIGN KEY (enquiry_id) REFERENCES enquiry (id) ON DELETE CASCADE

  • CONSTRAINT quote_ibfk_1 FOREIGN KEY (supplier_enquiry_id) REFERENCES supplier_enquiry (id) ON DELETE CASCADE

  • CONSTRAINT enquiry_ibfk_9 FOREIGN SCHLÜSSEL (accepted_quote_id) REFERENZEN quote (id)

So ist die Art, wie ich dies zu Arbeit erwarten ist:

  1. Wenn Sie eine ‚Anfrage‘ löscht das Kind ‚supplier_enquiry‘ Aufzeichnungen
  2. löschen Wenn Sie eine ‚supplier_enquiry‘ löschen es löscht das Kind ‚Zitat‘ Aufzeichnungen
  3. Sie cannnot ein ‚Zitat‘, wenn eine ‚Anfrage‘ Verweise löschen, dass Zitat des ID

die Problem, das ich habe, ist beim Löschen eines 'Anfrage' Datensatzes. Da die untergeordneten Datensätze zuerst gelöscht werden müssen, d. H. "Lieferantenanfrage" und "Angebot", kann "Anfrage" nicht gelöscht werden, wenn "akzeptierte_Quote_ID" auf ein "Angebot" verweist.

Irgendeine Idee, wie ich dieses Problem überwinden kann?

Antwort

1

Sie entfernen den Zirkelverweis, indem Sie die beiden anderen Tabellen von der Abfrage abhängig machen.So

:

quote.enquiry_id Referenzen enquiry.id

Und:

supplier_enquiry.enquiry_id Referenzen enquiry.id

EDIT: Das unklar sein könnte. Ich schlage vor, eine neue Einschränkung für die Quote-Tabelle zu machen, die enquiry_id auf enquiry.id verweist und dann enquiry_ibfk_9

entfernt
0

Aktualisieren Sie vor dem Löschen den Verweis auf NULL.

Verwandte Themen