[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: