FOREIGN KEY Einschränkung ‚c_name‘ Einführung auf dem Tisch ‚t_name‘ können Zyklen oder mehrere kaskadenWege verursachen

StackOverflow https://stackoverflow.com/questions/803836

Frage

Ich habe eine Datenbanktabelle namens Lesson:
Spalten: [LessonID, LessonNumber, Description] ... plus einige andere Spalten

Ich habe eine andere Tabelle namens Lesson_ScoreBasedSelection:
Spalten: [LessonID,NextLessonID_1,NextLessonID_2,NextLessonID_3]

Wenn eine Lektion abgeschlossen ist, seine LessonID in der Lesson_ScoreBasedSelection Tabelle nachgeschlagen, um die drei möglichen nächsten Lektionen zu erhalten, von denen jede mit einem bestimmten Bereich von Noten zugeordnet sind. Wenn die Gäste 0-33 sind, die LessonID in NextLessonID_1 gespeichert würde verwendet werden. Wenn die Partitur 34-66 ist gespeicherte LessonID in NextLessonID_2 verwendet werden würde, und so weiter.

Ich möchte mit der LessonID Spalte in der Stundentafel Referenzierung Fremdschlüssel alle Spalten in der Tabelle Lesson_ScoreBasedSelection beschränken, da jeder Wert in der Lesson_ScoreBasedSelection Tabelle muss einen Eintrag in der Spalte LessonID der Stundentafel. Ich möchte auch Kaskade Updates eingeschaltet, so dass, wenn ein LessonID Veränderungen in der Stundentafel, alle Verweise auf sie in der Lesson_ScoreBasedSelection Tabelle aktualisiert.

Dieses besondere Kaskade-Update scheint wie ein sehr einfaches, one-way-Update, aber wenn ich versuche, einen Fremdschlüssel zu jedem Feld in der Lesson_ScoreBasedSelection Tabelle anzuwenden Referenzierung das LessonID Feldes in der Stundentafel, erhalte ich die Fehlermeldung:

FOREIGN KEY Einschränkung 'c_name' auf dem Tisch 'Lesson_ScoreBasedSelection' Einführung kann Zyklen oder mehrere kaskadenWege verursachen.

Kann mir jemand erklären, warum ich diesen Fehler bin immer oder wie ich die Zwänge erreichen können und Cascading Aktualisierung I beschrieben?

War es hilfreich?

Lösung

, um die SQL Server-Einschränkung auf diesem gegeben, warum Sie dieses Problem nicht lösen, indem eine Tabelle mit SelectionID Erstellung (PK), LessonID, Next_LessonID, QualifyingScore wie die Spalten. Verwenden Sie eine Einschränkung, um sicherzustellen, LessonID und QualifyingScore einzigartig sind.

In der QualifyingScore Spalte, ich Tinyint verwenden würde, und machen es 0, 1 oder 2. Das, oder Sie können eine QualifyingMinScore und QualifyingMaxScore Spalte tun so, man könnte sagen,

SELECT * FROM NextLesson 
WHERE LessonID = @MyLesson 
AND QualifyingMinScore <= @MyScore 
AND @MyScore <= QualifyingMaxScore

Cheers,
Eric

Andere Tipps

Sie können nicht mehr als eine Kaskadierung RI-Link zu einer einzigen Tabelle haben in einer bestimmten verknüpften Tabelle. Microsoft erklärt dies:

  

Sie erhalten diese Fehlermeldung, da   in SQL Server kann eine Tabelle nicht angezeigt   mehr als einmal in einer Liste aller   die kaskadierende referenzielle Aktionen, die   entweder durch eine DELETE oder gestartet   UPDATE-Anweisung. Zum Beispiel kann die   Baum von kaskadierenden referenziellen Aktionen   muss nur einen Weg zu einem haben   insbesondere Tabelle auf der Kaskadierung   referenziellen Aktionen Baum.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top