Re: [SID] MySQL et FOREIGN KEY
Quand je cherche à créer mes tables sans faire d'index, j'obtiens ce
message d'erreur:
ERROR 1005 at line 19: Can't create table './Gcos/Cmd_gcos.frm' (errno:
150)
Quand je cherche à créer mes tables en ne faisant que un seul index (un
index sur une des colonnes en clé primaire):
CREATE TABLE Cmd_gcos (
Num_Commande INT(255) NOT NULL AUTO_INCREMENT,
Nom_Commande VARCHAR(100) NOT NULL,
Description TEXT NOT NULL,
Num_Type INT(255),
Num_Periode INT(255),
PRIMARY KEY (Num_Commande,Num_Type),
INDEX N_Type (Num_Type),
FOREIGN KEY (Num_Periode) REFERENCES Periodicite(Num_Periode),
FOREIGN KEY (Num_Type) REFERENCES Type(Num_Type)
) TYPE=InnoDB ;
Pareil même message d'erreur.
Si on googlelise un peu, on tombe sur une jolie doc:
http://melmoth.dyndns.org/mysql/
Je crains que les index ne soient obligatoires avec MySQL quand on veut
exploiter les foreign key en innoDB....
<troll>
peut-être pas avec PostGreSQL
</troll>
Laurent
Le jeu 19/02/2004 à 18:47, Jean-Michel OLTRA a écrit :
> Le jeudi 19 février 2004, Laurent Oliva a écrit...
> bonjour,
>
>
> > Ensuite, j'ai lu dans la doc qu'il fallait créer un index pour pouvoir
> > exploiter les FOREIGN KEY, j'ai donc modifié mon script en conséquence:
>
> Ah ? Dans le sgbd dont je me sers il est spécifié, pour les FK:
>
> If referenced columns are specified that are not the key in the
> referencing table, the referenced table must have a UNIQUE definition
> whose column names and sequence match those of the referenced columns.
>
> pour une syntaxe:
>
> <referential_constraint_definition> ::=
> FOREIGN KEY [<referential_constraint_name>] (<referencing_column>,...)
> REFERENCES <referenced_table> [(<referenced_column>,...)]
> [<delete_rule>]
>
> > PRIMARY KEY (Num_Periode)
> > PRIMARY KEY (Num_Type)
>
> > FOREIGN KEY (Num_Periode) REFERENCES Periodicite(Num_Periode),
> > FOREIGN KEY (Num_Type) REFERENCES Type(Num_Type)
>
> Dans ton cas:
> Les clé étrangères (referencing columns) ne sont pas des clés de ta
> table (referencing table), mais les 'referenced columns' sont clés
> primaires des 'referenced tables', donc 'unique'.
>
> Alors c'est à regarder pour InnoDB de plus près, j'ai franchement la
> flemme de le faire.
>
> Tu ne devrais pas avoir besoin d'indexer celles-ci, d'autant:
> * qu'un index est inutile si la table est peu importante (moins de 1000
> enregistrements je crois, ça va dépendre de ta base)
> * qu'il n'est pas utilisé si la requête ramène plus de 25-30% de données
> (ça dépend du sgbd, et de ta requête)
>
> --
> jm
>
Reply to: