Maison > base de données > tutoriel mysql > Comment implémenter une clé étrangère composite dans MySQL ?

Comment implémenter une clé étrangère composite dans MySQL ?

Susan Sarandon
Libérer: 2024-12-23 15:52:10
original
463 Les gens l'ont consulté

How to Implement a Composite Foreign Key in MySQL?

Clé étrangère composite en SQL

La conception de bases de données implique souvent la création de relations entre les tables. Lorsque la clé primaire d’une table est composée de plusieurs colonnes, il devient difficile de la lier à une clé étrangère d’une autre table. Cette question explore comment établir une relation entre deux tables avec une clé primaire composite et une clé étrangère.

Énoncé du problème

Considérez les deux tables suivantes :

CREATE TABLE IF NOT EXISTS `tutorial` (
  `beggingTime` time NOT NULL,
  `day` varchar(8) NOT NULL,
  `tutorId` int(3) NOT NULL,
  `maxMembers` int(2) NOT NULL,
  `minMembers` int(1) NOT NULL,
  PRIMARY KEY (`beggingTime`,`day`,`tutorId`),
  KEY `tutorId` (`tutorId`)
);

CREATE TABLE IF NOT EXISTS `group` (
  `groupId` tinyint(3) NOT NULL AUTO_INCREMENT,
  `status` varchar(20) NOT NULL,
  `groupName` varchar(50) NOT NULL,
  PRIMARY KEY (`groupId`)
);
Copier après la connexion

L'objectif est de créer un champ dans la table de groupe qui renvoie à la clé primaire composite dans la table du tutoriel. La question se pose : comment relier efficacement ces tables ?

Solution

Selon la documentation MySQL, il est possible de mettre en place un mappage de clé étrangère vers des clés composites. Cela nécessite de créer plusieurs colonnes dans la table de clé étrangère :

ALTER TABLE `group` ADD COLUMN `beggingTime` time NOT NULL;
ALTER TABLE `group` ADD COLUMN `day` varchar(8) NOT NULL;
ALTER TABLE `group` ADD COLUMN `tutorId` int(3) NOT NULL;

ALTER TABLE `group` ADD FOREIGN KEY (`beggingTime`,`day`,`tutorId`) 
    REFERENCES tutorial(`beggingTime`,`day`,`tutorId`);
Copier après la connexion

Cette approche crée des colonnes supplémentaires dans la table de groupe qui correspondent aux composants de la clé primaire composite dans la table du didacticiel.

Recommandation

Bien que la création d'une clé étrangère composite soit possible, ce n'est pas toujours le meilleur choix de conception. Comme d'autres réponses l'ont suggéré, il est recommandé de reconsidérer la conception de la table et d'utiliser une clé primaire à une seule colonne pour la table du didacticiel. Cela améliorera les performances de la base de données et simplifiera la gestion des relations.

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