Mehrfachreferenzierung von Fremdschlüsseln innerhalb einer Datenbankspalte
Beim Datenbankdesign spielen Fremdschlüsseleinschränkungen eine entscheidende Rolle bei der Aufrechterhaltung und Gewährleistung der referenziellen Integrität Datengenauigkeit. Normalerweise verweist eine Fremdschlüsselspalte auf eine Primärschlüsselspalte in einer anderen Tabelle und stellt so eine Eins-zu-viele- oder Viele-zu-viele-Beziehung zwischen Datensätzen her. Es stellt sich jedoch die Frage: Können wir eine einzelne Spalte definieren, die als Fremdschlüssel für mehrere Tabellen fungiert?
Kann eine Spalte mehrere Fremdschlüssel referenzieren?
Die Antwort ist nein. Nach Datenbankprinzipien ist es nicht zulässig, dass eine einzelne Spalte gleichzeitig auf mehrere Fremdschlüssel verweist. Diese Einschränkung wird von allen wichtigen relationalen Datenbankverwaltungssystemen (RDBMS) erzwungen.
Erklärung
Der Hauptzweck eines Fremdschlüssels besteht darin, eine direkte Verbindung zwischen Datensätzen in herzustellen verschiedene Tische. Jeder Fremdschlüsselwert sollte eine Zeile in der referenzierten Tabelle eindeutig identifizieren. Der Versuch, mehrere Fremdschlüssel in einer einzelnen Spalte zu referenzieren, würde gegen dieses Grundprinzip verstoßen.
Alternativen zur Mehrfachreferenzierung von Fremdschlüsseln
Wenn Sie Beziehungen zwischen Datensätzen herstellen müssen Bei mehreren Tabellen sind alternative Ansätze zu berücksichtigen:
Beispiel für die Verwendung eines zusammengesetzten Schlüssels
Betrachten Sie das in der Frage bereitgestellte Beispiel:
CREATE TABLE pdf_created ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `pdf_id` INT(10) NOT NULL, `item_type` INT(3) UNSIGNED NOT NULL, `item_id` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id`, `item_type`, `item_id`) ); CREATE TABLE `header` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `title` VARCHAR(255) ); CREATE TABLE `service` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `desc` VARCHAR(65535) NOT NULL ); CREATE TABLE `product` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `desc` VARCHAR(65535) NOT NULL );
In diesem Schema kann die Spalte „item_id“ in der Tabelle „pdf_created“ sowohl auf die Spalte „id“ in der Tabelle „product“ als auch auf die Spalte „id“ verweisen in der Servicetabelle. Dies wird durch die Definition eines zusammengesetzten Primärschlüssels in der Tabelle „pdf_created“ unter Verwendung der Spalten „id“ und „item_type“ erreicht.
Fazit
Es ist zwar nicht direkt möglich, eine einzelne Spalte zu haben Wenn Sie mehrere Fremdschlüssel in einer relationalen Datenbank referenzieren, können alternative Ansätze wie Join-Tabellen oder zusammengesetzte Schlüssel verwendet werden, um die erforderlichen Beziehungen zwischen Datensätzen herzustellen.
Das obige ist der detaillierte Inhalt vonKann eine einzelne Datenbankspalte auf mehrere Fremdschlüssel verweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!