Maison > base de données > tutoriel mysql > Une seule colonne de base de données peut-elle référencer plusieurs clés étrangères ?

Une seule colonne de base de données peut-elle référencer plusieurs clés étrangères ?

Linda Hamilton
Libérer: 2024-12-25 10:17:19
original
998 Les gens l'ont consulté

Can a Single Database Column Reference Multiple Foreign Keys?

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 :

  1. Rejoindre la table : créer une table distincte table qui contient les clés primaires des tables associées. Cette table de jointure sert d'intermédiaire pour connecter les enregistrements sur plusieurs tables.
  2. Clé composite : définissez une clé primaire composée de plusieurs colonnes. Cela vous permet de créer des contraintes de clé étrangère qui font référence à plusieurs colonnes simultanément.

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
);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal