Heim >Datenbank >MySQL-Tutorial >Kann eine einzelne Spalte in SQL als mehrere Fremdschlüssel dienen?

Kann eine einzelne Spalte in SQL als mehrere Fremdschlüssel dienen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-24 09:21:26205Durchsuche

Can a Single Column Serve as Multiple Foreign Keys in SQL?

Eine Spalte als mehrere Fremdschlüssel referenzieren

Beim Datenbankdesign kann es Situationen geben, in denen Sie Beziehungen zwischen verschiedenen Tabellen herstellen möchten, indem Sie eine einzelne Spalte als Fremdschlüssel verwenden mehrere Zieltabellen. Dieses spezielle Szenario, wie im folgenden SQL-Codeausschnitt dargestellt, ist jedoch nicht realisierbar:

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,
    `quantity` INT(3) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `FK_pdf_id` (`pdf_id`),
    CONSTRAINT `FK_pdf_id` FOREIGN KEY (`pdf_id`) REFERENCES `pdf` (`id`),
    KEY `FK_item_type` (`item_type`),
    CONSTRAINT `FK_item_type` FOREIGN KEY (`item_type`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    KEY `FK_item_id` (`item_id`),
    CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `header` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);

Der Grund dafür ist die Durchsetzung von Fremdschlüsseleinschränkungen, die erfordern, dass eine einzelne Spalte mit Primärschlüsseln in mehreren Tabellen übereinstimmt ist in der relationalen Datenbanktheorie unmöglich. Sie können zwar Spalten in der Tabelle „pdf_created“ erstellen, die auf entsprechende Spalten in den Produkt-, Service-, Kopfzeilen- und Artikeltabellen verweisen, das gleichzeitige Festlegen von Fremdschlüsseleinschränkungen für jede dieser Referenzen ist jedoch nicht zulässig.

Es ist jedoch möglich um die referenzierten Spaltenwerte für Verknüpfungen zu verwenden, ohne explizite Fremdschlüsseleinschränkungen zu definieren. Ein Fremdschlüssel ist im Wesentlichen eine Spalte, die den Wert des Primärschlüssels einer zugehörigen Tabelle enthält. Dadurch können Sie Datensätze zwischen Tabellen basierend auf ihren gemeinsamen Fremdschlüsselwerten verknüpfen. Im gegebenen Szenario könnte die Spalte „item_id“ in der Tabelle „pdf_created“ auf die Primärschlüssel in den Produkt-, Service-, Header- und Artikeltabellen verweisen. Auf diese Weise können Sie die Tabelle „pdf_created“ mit jeder dieser Zieltabellen verknüpfen, indem Sie die Spalte „item_id“ als Verknüpfungsbedingung verwenden.

Das obige ist der detaillierte Inhalt vonKann eine einzelne Spalte in SQL als mehrere Fremdschlüssel dienen?. 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