2016-04-27 7 views
1

Ich habe zwei Tabellen:Fremdschlüssel von 2 Spalten der gleichen Tabelle mit dem gleichen Primärschlüssel

Benutzer

id | username 
-------------- 
1 | James 
2 | John 
3 | Jack 
4 | Jim 
5 | Jane 
6 | Jessica 

Junioren

senior_id | junior_id 
----------------------- 
1   | 4 
1   | 6 
2   | 3 
4   | 5 

Sowohl die senior_id und junior_id beziehen Sie sich auf die users Tabelle id Spalte.

Wie kann ich es so, dass a) sichergestellt ist, dass beide senior_id und junior_id existieren in users und b) ein delete von users aus juniors alle Instanzen der gelöschten ID kaskadieren und entfernen, ob es ein senior_id oder junior_id ? I.e. Durch das Löschen von Jim im obigen Beispiel werden automatisch sowohl der erste als auch der letzte Datensatz von Junioren entfernt.

Ich habe versucht, dies mit zwei separaten Einschränkungen zu tun. Aber wenn ich eine Kaskade für beide Bedingungen aufstelle, bekomme ich einen 'kann Zyklen oder mehrere Kaskadenpfade verursachen' Fehler.

Und wenn ich es auf nur eine Bedingung setzen, scheitert ein Löschen (in einem Fall wie Jim), weil es nur auf eine der Spalten kaskadiert und damit gegen die Einschränkung verstößt.

muss ich in der Lage sein, diese Server auf SQL zu tun 2005.

Antwort

0

entfernen FK constraint.For FK Constraint check.Create Trigger auf Tabelle Junioren vor dem Einsetzen/update.if-ID nicht rollback.Again existiert dann jetzt Erstellen Sie einen anderen Trigger für die Tabelle Benutzer für DELETE.and in Trigger-Schreib-Skript zum Löschen aller record.since FK erfüllen Ihre Anforderung nicht, daher keinen Punkt in einer zusätzlichen Einschränkung zu halten.

Am wichtigsten finde ich, dass Ihr Tabellenentwurf schlecht ist. Tabellenentwurf sollte wie Employee-Manager-Beziehungstabelle sein, d. H. SeniorID in der Benutzertabelle selbst behalten.

so viele von Ihrem Problem werden verschwinden. Auch gibt es keine zusätzlichen Kosten oder Komplikationen für jede Abfrage auf diese Tabelle

id | username SeniorID 
-------------- 
1 | James 
2 | John 
3 | Jack  2 
4 | Jim   5 
5 | Jane 
6 | Jessica 
+0

Dank, und ich verstehe, was Sie über den Tisch Design sagen. Leider habe ich es mit einer Viele-zu-Viele-Beziehung zu tun, d. H. In diesem Fall kann ein Junior mehr als einen Senior haben. Also auch das in der users-Tabelle funktioniert hier nicht. – IamNaN

+0

oh! es wird nicht in vielen zu vielen Beziehung arbeiten.Dann Creating 2 Trigger ist die beste Option. – KumarHarsh

Verwandte Themen