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:
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>
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>
In PostgreSQL wird ein ähnlicher Ansatz verwendet:
<code class="sql">CREATE TABLE union_table AS SELECT * FROM subordinates UNION ALL SELECT * FROM products;</code>
Die Fremdschlüsselbeschränkung lautet:
<code class="sql">ALTER TABLE images ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
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!