Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Fremdschlüsseleinschränkung erstellen, die auf eine Nicht-Primärschlüsselspalte verweist?
Verwenden Sie Fremdschlüssel, um die referenzielle Integrität von Nicht-Primärschlüsselspalten aufrechtzuerhalten
In Datenbanksystemen werden Fremdschlüssel verwendet, um Beziehungen zwischen Tabellen herzustellen und referenzielle Integrität durchzusetzen. Typischerweise verweisen Fremdschlüssel auf Primärschlüssel in anderen Tabellen, um konsistente Daten in abhängigen Tabellen sicherzustellen. In einigen Fällen kann es jedoch erforderlich sein, Fremdschlüssel zu erstellen, die auf Nicht-Primärschlüsselspalten verweisen.
Betrachten wir das in der Frage beschriebene Szenario, in dem eine Tabelle (Tabelle2) die referenzielle Integrität mit einer anderen Tabelle (Tabelle1) aufrechterhalten muss, die in Tabelle1 referenzierte Spalte jedoch kein Primärschlüssel ist. Der bereitgestellte Beispiel-SQL-Code veranschaulicht die Tabellen- und Fremdschlüsseldefinitionen, die Sie erstellen möchten:
<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 Problem besteht darin, dass die AnotherID-Spalte in Tabelle1 kein Primärschlüssel ist. In den meisten Datenbanksystemen können Fremdschlüssel nur auf Primärschlüssel oder Spalten mit eindeutigen Einschränkungen verweisen.
Um dieses Problem zu beheben, müssen Sie sicherstellen, dass für die referenzierte Spalte (AnotherID in Tabelle1) eine eindeutige Einschränkung definiert ist. Eindeutige Einschränkungen werden zeilenweise erzwungen und stellen so sicher, dass der Wert in der Spalte in allen Zeilen der Tabelle eindeutig ist.
Durch das Hinzufügen einer eindeutigen Einschränkung für AnotherID in Tabelle1 wird es zu einem Kandidaten für eine Fremdschlüsselreferenz. Der folgende modifizierte SQL-Code demonstriert diese Korrektur:
<code class="language-sql">ALTER TABLE table1 ADD UNIQUE (AnotherID)</code>
Sie können jetzt erfolgreich eine Fremdschlüsseleinschränkung in Tabelle2 definieren und so die referenzielle Integrität zwischen den beiden Tabellen erzwingen.
<code class="language-sql">ALTER TABLE table2 ADD CONSTRAINT FK_Table2_Table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)</code>
Wie jedoch aus der Antwort auf die ursprüngliche Frage hervorgeht, wird generell empfohlen, den Primärschlüssel als Kandidatenschlüssel zu verwenden. Primärschlüssel werden automatisch als eindeutig definiert, erfordern keine zusätzlichen Einschränkungen und vereinfachen die Definition von Fremdschlüsseln.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Fremdschlüsseleinschränkung erstellen, die auf eine Nicht-Primärschlüsselspalte verweist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!