Bezug auf Nicht-Primärschlüssel in Fremdschlüsseleinschränkungen
Die Aufrechterhaltung der referenziellen Integrität beim Verknüpfen von Tabellen über Fremdschlüssel ist eine häufige Anforderung. Diese Situation tritt jedoch auf, wenn die Tabelle, auf die der Fremdschlüssel verweist, keinen Primärschlüssel hat, der der referenzierten Spalte entspricht.
Problembeschreibung:
Betrachten Sie das folgende Datenbankschema:
<code class="language-sql">CREATE TABLE table1 ( ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, AnotherID INT NOT NULL, SomeData VARCHAR(100) NOT NULL ); CREATE TABLE table2 ( ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, AnotherID INT NOT NULL, MoreData VARCHAR(30) NOT NULL, CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID) );</code>
Das Ziel besteht hier darin, eine Fremdschlüsseleinschränkung zwischen table2.AnotherID und table1.AnotherID durchzusetzen. Allerdings ist ID der Primärschlüssel von Tabelle1 und AnotherID nicht.
Lösung:
Um eine Fremdschlüsseleinschränkung zu erstellen, die auf einen Nicht-Primärschlüssel verweist, muss auf die referenzierte Spalte eine eindeutige Einschränkung angewendet werden. Laut Microsoft Books Online:
Im gegebenen Schema ermöglicht die Anwendung einer eindeutigen Einschränkung auf AnotherID in Tabelle1 die Erstellung einer Fremdschlüsseleinschränkung.„Eine FOREIGN KEY-Einschränkung muss nicht nur mit einer PRIMARY KEY-Einschränkung in einer anderen Tabelle verknüpft sein; sie kann auch als Spalte definiert werden, die auf eine UNIQUE-Einschränkung in einer anderen Tabelle verweist.“
<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Fremdschlüsseleinschränkung, die auf eine Nicht-Primärschlüsselspalte verweist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!