Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Es gibt keine Primär- oder Kandidatenschlüssel in der referenzierten Tabelle, die mit der referenzierenden Spaltenliste im Fremdschlüssel übereinstimmen

Fremdschlüssel funktionieren, indem sie eine Spalte mit einem eindeutigen Schlüssel in einer anderen Tabelle verbinden, und dieser eindeutige Schlüssel muss als eine Art eindeutiger Index definiert werden, sei es der Primärschlüssel oder ein anderer eindeutiger Index.

Im Moment haben Sie nur einen zusammengesetzten Index aus ISBN, Title das ist Ihr Primärschlüssel.

Es stehen Ihnen eine Reihe von Optionen offen, je nachdem, was BookTitle genau enthält und in welcher Beziehung die darin enthaltenen Daten stehen.

Ich würde vermuten, dass die ISBN für jede Zeile in BookTitle eindeutig ist. NACH der Annahme, dass dies der Fall ist, ändern Sie Ihren Primärschlüssel so, dass er nur auf ISBN lautet, und ändern Sie BookCopy so, dass Sie anstelle von Title ISBN haben, und verbinden Sie sich damit.

Wenn Sie Ihren Primärschlüssel als ISBN, Title behalten müssen dann müssen Sie entweder die ISBN in BookCopy sowie den Titel und den Fremdschlüssel in beiden Spalten speichern, ODER Sie müssen einen eindeutigen Index für BookTitle(Title) als eindeutigen Index erstellen.

Generell müssen Sie sicherstellen, dass die Spalte oder Spalten in Ihren REFERENCES enthalten sind -Klausel genau einem eindeutigen Index in der übergeordneten Tabelle entsprechen:In Ihrem Fall schlägt dies fehl, weil Sie keinen einzigen eindeutigen Index für Title haben allein.