Heim >Datenbank >MySQL-Tutorial >Kann MySQL bedingte Fremdschlüsseleinschränkungen für polymorphe Assoziationen erzwingen?
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:
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!