Il est courant d'avoir deux tables avec des ID auto-incrémentés comme principales clés. Cependant, créer une troisième table relationnelle pour établir une relation entre ces deux tables conduit souvent à des erreurs. En effet, soit une seule colonne incrémentée automatiquement est autorisée, soit la suppression de l'incrémentation automatique des tables initiales empêche la création de clés étrangères en raison de problèmes de correspondance de type.
Il est important de dissiper certains malentendus fondamentaux :
Les tables relationnelles doivent avoir des lignes uniques, ce qui ne peut pas être garanti en utilisant des ID auto-incrémentés comme clés primaires. Pour créer une table relationnelle, nous devons identifier une véritable clé primaire composée d'attributs de données qui identifient de manière unique chaque ligne.
Étape 1 : Définir une vraie clé primaire
Identifiez les attributs de données qui, ensemble, distinguent de manière unique les lignes de chaque tableau. Déclarez une contrainte unique sur ces champs pour éviter les lignes en double.
Étape 2 : Éliminez le champ ID
Une fois les lignes uniques assurées, le champ ID superflu (et son index de support) devient inutile et peut être supprimé.
Étape 3 : Créer l'associatif Table
La troisième table, qui joint les deux tables primaires, doit avoir une clé primaire composite composée des clés primaires des deux tables parentes. Cela garantit des lignes uniques dans la table associative.
Supposons que nous ayons deux tables : user et sport. Pour établir une relation entre eux, nous créons une troisième table user_sport :
CREATE TABLE user ( user_name CHAR(16) NOT NULL PRIMARY KEY, name_first CHAR(30) NOT NULL, name_last CHAR(30) NOT NULL, birth_date DATE NOT NULL ); CREATE TABLE sport ( sport_code CHAR(4) NOT NULL PRIMARY KEY, name CHAR(30) NOT NULL ); CREATE TABLE user_sport ( user_name CHAR(16) NOT NULL, sport_code CHAR(4) NOT NULL, start_date DATE NOT NULL, PRIMARY KEY (user_name, sport_code), FOREIGN KEY (user_name) REFERENCES user (user_name), FOREIGN KEY (sport_code) REFERENCES sport (sport_code) );
Dans cet exemple :
En suivant ces principes, nous pouvons créer des tables relationnelles avec des lignes uniques, garantir l'intégrité des données et éviter les problèmes causés par l'utilisation d'ID auto-incrémentés comme clés primaires.
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!