Heim > Datenbank > MySQL-Tutorial > Kann eine einzelne Datenbankspalte auf mehrere Fremdschlüssel verweisen?

Kann eine einzelne Datenbankspalte auf mehrere Fremdschlüssel verweisen?

Linda Hamilton
Freigeben: 2024-12-25 10:17:19
Original
998 Leute haben es durchsucht

Can a Single Database Column Reference Multiple Foreign Keys?

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:

  1. Tabelle verbinden: Erstellen eine separate Tabelle, die die Primärschlüssel der zugehörigen Tabellen enthält. Diese Join-Tabelle dient als Vermittler zum Verbinden von Datensätzen über mehrere Tabellen hinweg.
  2. Zusammengesetzter Schlüssel: Definieren Sie einen Primärschlüssel, der aus mehreren Spalten besteht. Dadurch können Sie Fremdschlüsseleinschränkungen erstellen, die auf mehrere Spalten gleichzeitig verweisen.

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage