Heim > Datenbank > MySQL-Tutorial > Kann ein Fremdschlüssel auf mehrere Tabellen in SQL verweisen?

Kann ein Fremdschlüssel auf mehrere Tabellen in SQL verweisen?

Mary-Kate Olsen
Freigeben: 2024-10-24 01:51:29
Original
1050 Leute haben es durchsucht

Can a Foreign Key Reference Multiple Tables in SQL?

Polymorphe Fremdschlüsseleinschränkungen: Ein vielseitiger Ansatz

Die herkömmliche Fremdschlüsseleinschränkung stellt eine direkte Verbindung zwischen zwei angegebenen Tabellen her. Was aber, wenn Sie eine polymorphe Beziehung benötigen, bei der eine Spalte auf eine von mehreren möglichen übergeordneten Tabellen verweist?

Ist ein Fremdschlüssel für mehrere Tabellen möglich?

Leider Die Antwort ist negativ. Eine Fremdschlüsseleinschränkung kann nur auf eine einzelne übergeordnete Tabelle verweisen. Diese Einschränkung ergibt sich aus der Notwendigkeit der Datenintegrität und -konsistenz in Datenbanksystemen.

Praktische Überlegungen

Trotz der inhärenten Einschränkung gibt es praktische Ansätze, die das Verhalten von a nachahmen Fremdschlüssel für mehrere Tabellen:

  1. Union-Tabelle: Erstellen Sie eine einzelne Union-Tabelle, die Spalten aus allen möglichen übergeordneten Tabellen enthält. Die Fremdschlüsselspalte in der untergeordneten Tabelle verweist auf die Union-Tabelle. Beim Einfügen oder Aktualisieren von Daten bestimmt die Vereinigungstabelle, in welche tatsächliche übergeordnete Tabelle eingefügt oder aktualisiert werden soll.
  2. Typspalte: Führen Sie eine Typspalte in der untergeordneten Tabelle ein, um zwischen möglichen übergeordneten Tabellentypen zu unterscheiden . Die Fremdschlüsselspalte verweist dann auf die übergeordnete Tabelle, die dem in der Typspalte angegebenen Typ entspricht.

Beispiele in MySQL und PostgreSQL

In MySQL Folgendes Die Anweisung erstellt eine Union-Tabelle:

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die Fremdschlüsseleinschränkung in der untergeordneten Tabelle wäre dann:

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
Nach dem Login kopieren
Nach dem Login kopieren

In PostgreSQL wird ein ähnlicher Ansatz verwendet:

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die Fremdschlüsselbeschränkung lautet:

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
Nach dem Login kopieren
Nach dem Login kopieren

Schlussfolgerung

Während ein direkter Fremdschlüssel für mehrere Tabellen nicht möglich ist, ermöglichen alternative Strategien eine Polymorphie Fremdschlüsselbeziehung in SQL-Datenbanksystemen. Diese Strategien bewahren die Datenintegrität und bieten gleichzeitig die Flexibilität, mehrere übergeordnete Tabellen zu berücksichtigen.

Das obige ist der detaillierte Inhalt vonKann ein Fremdschlüssel auf mehrere Tabellen in SQL verweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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