J'ai utilisé MySQL Workbench pour préparer une mise en page de base de données et l'ai exportée vers ma base de données en utilisant phpMyAdmin. Lorsque l'on regarde une table, je suis l'avertissement suivant:Clés PRIMARY et INDEX pour une colonne FOREIGN dans MySQL
primaire et les clés INDEX ne doivent pas tous deux être définis pour la colonne
gid
gid
est un indice étranger qui est la clé primaire d'une autre table , et qui fait également partie de la clé primaire de la table actuelle. Je l'ai donc comme partie de la clé primaire et Workbench a créé un index pour l'entrée de clé étrangère. Alors pourquoi cet avertissement apparaît-il, devrais-je l'ignorer, ou devrais-je repenser la mise en page de ma base de données?
Ceci est un exemple très simplifié de la structure utilisée, qui produit l'avertissement:
CREATE TABLE IF NOT EXISTS `test_groups` (
`gid` INT NOT NULL ,
`gname` VARCHAR(45) NULL ,
PRIMARY KEY (`gid`));
CREATE TABLE IF NOT EXISTS `test_users` (
`gid` INT NOT NULL ,
`uid` INT NOT NULL ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`gid`, `uid`) ,
INDEX `gid` (`gid` ASC) ,
CONSTRAINT `gid`
FOREIGN KEY (`gid`)
REFERENCES `test_groups` (`gid`)
ON DELETE CASCADE
ON UPDATE CASCADE);
modifier J'ai essayé de supprimer l'index supplémentaire pour gid
dans phpMyAdmin et il semble fonctionner. L'action en cascade se produit toujours lorsque vous modifiez quelque chose dans la table des groupes, donc je suppose que la relation étrangère est intacte même sans l'index.
Mais pourquoi MySQL Workbench me force-t-il à conserver cet index? Je ne peux pas l'enlever manuellement tant que la clé étrangère est là.
Ce bogue est incorrectement marqué comme une copie d'un autre bogue corrigé. [Ceci est le bogue actuel pertinent.] (Http://bugs.mysql.com/bug.php?id=53277) – phazei