Liaison de tables avec des clés primaires et étrangères composites
Dans le domaine de la conception de bases de données SQL, vous pouvez rencontrer des situations où la clé primaire d'une table comprend plusieurs colonnes, formant une clé composite. Établir des relations entre de telles tables à l'aide de clés étrangères peut être une tâche difficile à parcourir.
Considérez le scénario donné impliquant deux tables, « tutoriel » et « groupe ». La table 'tutorial' comporte une clé primaire composite composée de 'beggingTime', 'day' et 'tutorId', tandis que la table 'group' possède une clé primaire à incrémentation automatique 'groupId'. La question se pose : comment relier ces tables de manière transparente ?
La documentation MySQL propose une solution : il est possible de créer un mappage de clé étrangère dans 'group' faisant référence à la clé primaire composite dans 'tutorial'. Cependant, cela implique d'ajouter des colonnes supplémentaires à la table « groupe », une pour chaque clé primaire correspondante dans le « tutoriel ».
Par exemple, ajouter ces colonnes et déclarer la clé étrangère dans la table « groupe » établirait la relation :
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`);
Il convient de noter que cette approche n'est peut-être pas optimale du point de vue de la performance. Les moteurs de base de données SQL sont optimisés pour les clés primaires constituées de colonnes uniques. Par conséquent, envisagez de reconcevoir la table « didacticiel » pour utiliser une clé primaire de substitution plutôt qu'une clé primaire composite. Cette stratégie améliorera les performances car elle s'aligne mieux sur la façon dont SQL est structuré.
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!