Polymorphe Assoziationen: Erstellen eines Fremdschlüssels für mehrere Tabellen
Beim Datenbankdesign ist es oft wünschenswert, Beziehungen zwischen Tabellen zu erstellen. Es können jedoch bestimmte Szenarien auftreten, in denen Sie eine Fremdschlüsseleinschränkung zwischen einer einzelnen Spalte und mehreren Zieltabellen einrichten müssen. Dieses Konzept ist als polymorphe Assoziationen bekannt.
In diesem speziellen Fall möchten Sie eine Tabelle namens „popular_areas“ mit zwei Spalten erstellen: „region_id“ und „popular_place_id“. Die Spalte „popular_place_id“ sollte als Fremdschlüssel fungieren und entweder auf die Tabellen „Länder“ oder „Staaten“ verweisen.
Datenbankeinschränkungen und polymorphe Zuordnungen
Leider Standard-SQL-Einschränkungen unterstützen keine polymorphen Assoziationen. Eine Fremdschlüsseleinschränkung erfordert einen direkten Verweis auf eine einzelne Zieltabelle. Frameworks wie Rails und Hibernate bieten möglicherweise Workarounds, erfordern jedoch die Deaktivierung von SQL-Einschränkungen. Dies führt zu Inkonsistenzen und Bedenken hinsichtlich der Datenintegrität.
Alternative Lösungen
Um diese Einschränkung zu beheben, gibt es mehrere alternative Ansätze:
Mehrfachvererbung :
Erstellen Sie separate Tabellen, z. B. „popular_states“ und „popular_countries“, die jeweils auf „Staaten“ und „Länder“ verweisen. Dadurch bleibt die referenzielle Integrität erhalten.
Gemeinsame Obertabelle:
Erstellen Sie eine Obertabelle mit dem Namen „Orte“, von der sowohl „Staaten“ als auch „Länder“ erben. Der Fremdschlüssel in „popular_areas“ würde dann auf „Orte“ verweisen.
Zweispaltiger Ansatz:
Verwenden Sie zwei Spalten in „popular_areas“: „state_id“ und „ Länder-ID.“ Nur eine dieser Spalten sollte ausgefüllt werden, um konsistente Referenzen sicherzustellen.
Fazit
Polymorphe Assoziationen stellen Herausforderungen beim Datenbankdesign dar. Wenn man jedoch die Einschränkungen versteht und alternative Lösungen erforscht, ist es möglich, Beziehungen zwischen Tabellen auf flexible und effiziente Weise herzustellen.
Das obige ist der detaillierte Inhalt vonWie kann ich polymorphe Assoziationen im Datenbankdesign implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!