Heim >Datenbank >MySQL-Tutorial >Kann MySQL bedingte Fremdschlüsseleinschränkungen für polymorphe Assoziationen erzwingen?

Kann MySQL bedingte Fremdschlüsseleinschränkungen für polymorphe Assoziationen erzwingen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-16 11:46:58992Durchsuche

Can MySQL Enforce Conditional Foreign Key Constraints for Polymorphic Associations?

MySQL-bedingte Fremdschlüsseleinschränkungen: Herausforderungen und Lösungen

Beim Datenbankdesign ist die Datenintegrität von entscheidender Bedeutung. Fremdschlüsseleinschränkungen werden verwendet, um Beziehungen zwischen Tabellen aufrechtzuerhalten. In einigen Fällen kann es jedoch erforderlich sein, Einschränkungen basierend auf bestimmten Spaltenwerten bedingt durchzusetzen. Entwerfen Sie beispielsweise eine „Kommentar“-Tabelle, um Kommentare für verschiedene Entitäten wie Blogbeiträge und Benutzerbilder zu speichern.

Unterstützt MySQL bedingte Fremdschlüsseleinschränkungen?

Nicht unterstützt. Die Fremdschlüsseleinschränkungen von MySQL müssen explizit auf eine einzelne Tabelle verweisen, um sicherzustellen, dass jede Zeile in der referenzierenden Tabelle eine passende Zeile in der referenzierten Tabelle hat. Bedingte Einschränkungen verstoßen gegen die Prinzipien des relationalen Datenbankdesigns.

Lösung: Polymorphe Assoziation und „Super Table“

Es wird empfohlen, die Technologie der „polymorphen Assoziation“ zu verwenden, um dieses Problem zu lösen. Bei dieser Technik wird eine „Hypertabelle“ erstellt, die die gemeinsamen Attribute aller Entitäten speichert, die über Fremdschlüsselverweise verfügen. Erstellen Sie in diesem Beispiel eine Tabelle „Kommentierbare Entitäten“:

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

Ihre Entitäten (wie „Blog-Beitrag“ und „Benutzerbild“) sind dann Untertypen dieser Hypertabelle:

<code class="language-sql">CREATE TABLE BlogPosts (
  blogpost_id INT PRIMARY KEY, -- 注意,此 ID 不是自动生成的
  ...
  FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)
);

CREATE TABLE UserPictures (
  userpicture_id INT PRIMARY KEY, -- 注意,此 ID 不是自动生成的
  ...
  FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)
);</code>

Implementierungsdetails:

  • Fügen Sie eine neue Zeile in die Tabelle „Kommentierbare Entitäten“ ein, um eine eindeutige „ID“ zu generieren, bevor Sie die neue Entität in die Untertyptabelle einfügen.
  • Verwenden Sie die generierte „id“ als „Fremdschlüssel“ beim Einfügen in die Subtyptabelle.

Dieser Ansatz stellt die referenzielle Integrität sicher und behält gleichzeitig die Flexibilität bei, eine Vielzahl von Entitätstypen zu berücksichtigen und Kommentare in einer einzigen „Kommentar“-Tabelle zu speichern.

Das obige ist der detaillierte Inhalt vonKann MySQL bedingte Fremdschlüsseleinschränkungen für polymorphe Assoziationen erzwingen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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