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!