Frage:
Wie kann die referenzielle Integrität aufrechterhalten werden, indem ein Fremdschlüssel erstellt wird, der auf eine Nicht-Primärschlüsselspalte in einer anderen Tabelle verweist?
Antwort:
Während es im Allgemeinen empfohlen wird, beim Erstellen eines Fremdschlüssels auf einen Primärschlüssel zu verweisen, ist es unter bestimmten Bedingungen möglich, einen Fremdschlüssel zu erstellen, der auf einen Nicht-Primärschlüssel verweist.
Lösung:
Um einen Fremdschlüssel zu erstellen, der auf einen Nicht-Primärschlüssel verweist, muss eine eindeutige Einschränkung auf die Zielspalte in der referenzierten Tabelle angewendet werden. Das bedeutet, dass die Werte in der Spalte eindeutig sein müssen, um die Datenintegrität sicherzustellen.
Beispiel:
Beachten Sie die folgende Tabellenstruktur:
<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>
In diesem Beispiel ist die AnotherID-Spalte in Tabelle1 kein Primärschlüssel. Es gibt jedoch eine eindeutige Einschränkung, die es uns ermöglicht, mithilfe der AnotherID-Spalte eine Fremdschlüsselbeziehung zwischen Tabelle2 und Tabelle1 zu erstellen.
Alternative:
Wenn Sie keine eindeutige Einschränkung für eine Nicht-Primärschlüsselspalte erstellen können, sollten Sie stattdessen den Primärschlüssel der referenzierten Tabelle als Fremdschlüssel verwenden. Diese Methode gewährleistet eine stärkere Datenbankintegrität und wird allgemein empfohlen.
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Fremdschlüssel für eine Nicht-Primärschlüsselspalte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!