Heim > Datenbank > MySQL-Tutorial > Wie kann ich polymorphe Assoziationen in MySQL implementieren, um bedingte Fremdschlüssel zu verarbeiten?

Wie kann ich polymorphe Assoziationen in MySQL implementieren, um bedingte Fremdschlüssel zu verarbeiten?

DDD
Freigeben: 2025-01-16 11:41:17
Original
232 Leute haben es durchsucht

How Can I Implement Polymorphic Associations in MySQL to Handle Conditional Foreign Keys?

Bedingte Fremdschlüssel in MySQL

Beim Datenbankdesign ist es oft notwendig, Fremdschlüsseleinschränkungen durchzusetzen, um die Datenkonsistenz sicherzustellen. In Szenarien mit Polymorphismus können Fremdschlüssel jedoch auf Zeilen in mehreren zugehörigen Tabellen verweisen, und herkömmliche Fremdschlüsseleinschränkungen reichen nicht aus.

Im bereitgestellten Beispiel enthält die Kommentartabelle ein Feld „foreign_id“, das basierend auf dem Modellfeld auf verschiedene Tabellen (Blogposts, Bilder usw.) verweisen kann. Hierzu ist eine bedingte Fremdschlüsseleinschränkung erforderlich.

MySQL selbst unterstützt keine bedingten Fremdschlüsseleinschränkungen. Das Deklarieren eines Fremdschlüssels, der basierend auf einer Bedingung auf eine andere Tabelle verweist, würde gegen die Entwurfsprinzipien relationaler Datenbanken verstoßen.

Ein effizienterer Ansatz, der als „polymorphe Assoziation“ bezeichnet wird, beinhaltet die Erstellung einer „Supertabelle“, die als einziger Referenzpunkt für alle zugehörigen Tabellen dient. In diesem Fall kann die folgende Struktur implementiert werden:

<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)
);</code>
Nach dem Login kopieren

Jeder Inhaltstyp (Blogbeitrag, Benutzerbild usw.) wird zu einem Untertyp der kommentierbaren Obertabelle:

<code class="language-sql">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

Das Einfügen von Daten in eine bestimmte Inhaltstabelle erfordert zunächst das Einfügen einer neuen Zeile in die kommentierbare Tabelle, um die Pseudo-Primärschlüssel-ID zu erhalten. Diese ID kann dann für eine bestimmte Inhaltstabelle verwendet werden.

Dieser Ansatz ermöglicht referenzielle Integrität und behält gleichzeitig die für polymorphe Assoziationen erforderliche Flexibilität bei.

Das obige ist der detaillierte Inhalt vonWie kann ich polymorphe Assoziationen in MySQL implementieren, um bedingte Fremdschlüssel zu verarbeiten?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage