Heim > Datenbank > MySQL-Tutorial > Wie kann ich referenzielle Integrität mit polymorphen Assoziationen in MySQL erzwingen?

Wie kann ich referenzielle Integrität mit polymorphen Assoziationen in MySQL erzwingen?

Barbara Streisand
Freigeben: 2025-01-16 11:42:58
Original
367 Leute haben es durchsucht

How Can I Enforce Referential Integrity with Polymorphic Associations in MySQL?

Aufrechterhaltung der referenziellen Integrität in MySQL mit polymorphen Assoziationen

Die Fremdschlüsseleinschränkungen von MySQL sind für die Integrität relationaler Datenbanken von entscheidender Bedeutung. Die Verwaltung der referenziellen Integrität mit polymorphen Assoziationen – bei denen ein einzelner Fremdschlüssel auf mehrere Tabellen verweist – stellt jedoch besondere Herausforderungen dar.

Polymorphe Beziehungen und Datenintegrität

Stellen Sie sich eine Comments-Tabelle vor, die Kommentare zu verschiedenen Anwendungsteilen (z. B. Blogbeiträgen, Bildern) enthält, die durch die Spalte model identifiziert werden. Direktes Durchsetzen einer Fremdschlüsseleinschränkung wie dieser:

<code class="language-sql">FOREIGN KEY (`foreign_id`) REFERENCES blogposts(`id`)</code>
Nach dem Login kopieren

ist unzureichend, da es nur gegen blogposts validiert und den Wert der model-Spalte ignoriert. MySQL verfügt nicht über native Unterstützung für bedingte Fremdschlüsseleinschränkungen basierend auf Spaltenwerten.

Strategien für den Umgang mit polymorphen Assoziationen

Um die Datenintegrität in polymorphen Beziehungen aufrechtzuerhalten, ziehen Sie diese Alternativen in Betracht:

1. Der Supertable-Ansatz:

Erstellen Sie eine Commentable Supertabelle, von der alle Inhaltstypen erben. Jede Inhaltstyptabelle verweist dann über einen Fremdschlüssel auf Commentable:

<code class="language-sql">CREATE TABLE Commentable ( id SERIAL PRIMARY KEY );

CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, foreign_id INT NOT NULL, FOREIGN KEY (foreign_id) REFERENCES Commentable(id) );

CREATE TABLE BlogPosts ( blogpost_id INT PRIMARY KEY, FOREIGN KEY (blogpost_id) REFERENCES Commentable(id) );

CREATE TABLE UserPictures ( userpicture_id INT PRIMARY KEY, FOREIGN KEY (userpicture_id) REFERENCES Commentable(id) );</code>
Nach dem Login kopieren

2. Zusammengesetzte Primärschlüsselstrategie:

Verwenden Sie einen zusammengesetzten Primärschlüssel, der sowohl foreign_id als auch model umfasst:

<code class="language-sql">CREATE TABLE Comments ( id INT, foreign_id INT, model TEXT, PRIMARY KEY (id, model) );</code>
Nach dem Login kopieren

Dies stellt die Eindeutigkeit jeder foreign_id- und model-Kombination sicher, erhöht jedoch die Komplexität der Abfrage. Eine sorgfältige Prüfung des Abfragedesigns ist erforderlich.

Das obige ist der detaillierte Inhalt vonWie kann ich referenzielle Integrität mit polymorphen Assoziationen in MySQL erzwingen?. 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