Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich eine Fremdschlüsseleinschränkung, die auf eine Nicht-Primärschlüsselspalte verweist?

Wie erstelle ich eine Fremdschlüsseleinschränkung, die auf eine Nicht-Primärschlüsselspalte verweist?

Barbara Streisand
Freigeben: 2025-01-15 09:32:46
Original
537 Leute haben es durchsucht

How to Create a Foreign Key Constraint Referencing a Non-Primary Key Column?

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>
Nach dem Login kopieren

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:

„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.“

Im gegebenen Schema ermöglicht die Anwendung einer eindeutigen Einschränkung auf AnotherID in Tabelle1 die Erstellung einer Fremdschlüsseleinschränkung.

<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
Nach dem Login kopieren
Es ist jedoch wichtig zu beachten, dass die Verwendung dieses alternativen Primärschlüsselkandidaten häufig der geeignetere Ansatz ist.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage