Clés étrangères multi-référencement dans une colonne de base de données
Dans la conception de bases de données, les contraintes de clé étrangère jouent un rôle crucial dans le maintien de l'intégrité référentielle et la garantie précision des données. En règle générale, une colonne de clé étrangère fait référence à une colonne de clé primaire dans une autre table, établissant ainsi une relation un-à-plusieurs ou plusieurs-à-plusieurs entre les enregistrements. Cependant, la question se pose : peut-on définir une seule colonne qui fait office de clé étrangère pour plusieurs tables ?
Une colonne peut-elle référencer plusieurs clés étrangères ?
La réponse est non. Selon les principes des bases de données, il n’est pas permis qu’une seule colonne fasse référence simultanément à plusieurs clés étrangères. Cette restriction est appliquée par tous les principaux systèmes de gestion de bases de données relationnelles (SGBDR).
Explication
L'objectif principal d'une clé étrangère est d'établir un lien direct entre les enregistrements dans différents tableaux. Chaque valeur de clé étrangère doit identifier de manière unique une ligne dans la table référencée. Tenter de référencer plusieurs clés étrangères dans une seule colonne violerait ce principe fondamental.
Alternatives aux clés étrangères multi-référencement
Si vous devez établir des relations entre les enregistrements dans plusieurs tables, il existe des approches alternatives à considérer :
Exemple d'utilisation d'une clé composite
Considérez l'exemple fourni dans la question :
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 );
Dans ce schéma, la colonne item_id de la table pdf_created peut référencer à la fois la colonne id de la table product et le colonne id dans la table de service. Ceci est réalisé en définissant une clé primaire composite sur la table pdf_created en utilisant à la fois les colonnes id et item_type.
Conclusion
Bien qu'il ne soit pas directement possible d'avoir une seule colonne référencez plusieurs clés étrangères dans une base de données relationnelle, des approches alternatives telles que des tables de jointure ou des clés composites peuvent être utilisées pour établir les relations nécessaires entre les enregistrements.
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!