Maison >base de données >tutoriel mysql >Une seule colonne peut-elle servir de plusieurs clés étrangères dans SQL ?
Dans la conception d'une base de données, il peut y avoir des situations où vous souhaitez établir des relations entre différentes tables en utilisant une seule colonne comme clés étrangères pour plusieurs tables cibles. Cependant, ce scénario spécifique, tel que présenté dans l'extrait de code SQL ci-dessous, n'est pas réalisable :
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 );
La raison en est que l'application de contraintes de clé étrangère qui nécessitent qu'une seule colonne corresponde aux clés primaires de plusieurs tables est impossible dans la théorie des bases de données relationnelles. Bien que vous puissiez créer des colonnes dans la table pdf_created qui référencent les colonnes correspondantes dans les tables de produits, de services, d'en-tête et d'articles, l'établissement de contraintes de clé étrangère pour chacune de ces références simultanément n'est pas autorisé.
Cependant, c'est possible pour utiliser les valeurs de colonne référencées pour les jointures sans définir de contraintes de clé étrangère explicites. Une clé étrangère est essentiellement une colonne qui contient la valeur de la clé primaire d'une table associée. Cela vous permet de joindre des enregistrements entre des tables en fonction de leurs valeurs de clé étrangère partagées. Dans le scénario donné, la colonne item_id de la table pdf_created pourrait faire référence aux clés primaires des tables product, service, header et item. Ce faisant, vous pouvez joindre la table pdf_created à l'une de ces tables cibles en utilisant la colonne item_id comme condition de jointure.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!