Foreign key et référence

Résolu/Fermé
cascad Messages postés 2 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 8 juin 2009 - 8 juin 2009 à 11:36
cascad Messages postés 2 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 8 juin 2009 - 8 juin 2009 à 18:42
Bonjour,
En regardant des exemples de création de tables MySQL, je vois que la contrainte FOREIGN KEY n'est pas toujours liée à une contrainte PRIMARY KEY d'une autre table, je vois qu'elle peut également être définie pour référencer les colonnes d'une contrainte UNIQUE d'une autre table.
Par exemple dans la table ARBRE ci-dessous, je pourrais apparemment écrire "FOREIGN KEY (ARBRE_CATEGORIE_ID) REFERENCES ARBRE_CATEGORIE (Arbre_Categorie_Name) ON DELETE CASCADE ON UPDATE CASCADE" au lieu de "FOREIGN KEY (ARBRE_CATEGORIE_ID) REFERENCES ARBRE_CATEGORIE (ARBRE_CATEGORIE_ID) ON DELETE CASCADE ON UPDATE CASCADE".
create table ARBRE
(
ARBRE_ID integer not null auto_increment,
Arbre_Name varchar(100) binary not null,
Arbre_Description TEXT(500),
primary key (ARBRE_ID),
unique (ARBRE_ID,Arbre_Name),
INDEX (ARBRE_CATEGORIE_ID),
FOREIGN KEY (ARBRE_CATEGORIE_ID) REFERENCES ARBRE_CATEGORIE (ARBRE_CATEGORIE_ID) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;

create table ARBRE_CATEGORIE
(
ARBRE_CATEGORIE_ID integer not null auto_increment,
Arbre_Categorie_Name varchar(100) binary not null,
Arbre_Categorie_Description TEXT(500),
primary key (ARBRE_CATEGORIE_ID),
unique (ARBRE_CATEGORIE_ID,Arbre_Categorie_Name),
) ENGINE = InnoDB;

Donc ma question est : Y-a-t-il un avantage (une optimisation) à écrire la contrainte "FOREIGN KEY" d'une manière plutôt que l'autre ?

2 réponses

dam75 Messages postés 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
8 juin 2009 à 18:27
Bonjour,

Il vaut mieux pour les perfs utiliser un FOREIGN KEY sur le champ ID en INT plutot que sur un varchar(100) ... même si c'est correct d'un point de vue syntaxique. De plus, quid si tu veux modifier le nom ? l'ID sert aussi à ça, à savoir qu'une fois créé il est immuable.
2
cascad Messages postés 2 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 8 juin 2009
8 juin 2009 à 18:42
MERCI dam75. TOUT EST CLAIR !
GOOD DAY
0