Comme l'indique le sujet de mon mail, je suis en SID donc ma version de
MySQL est la 4.0.17-2.

Lorsque je fais un mysqldump, je vois bien le type de table � savoir les
MyISAM, il me faut donc cr�er une table de type InnoDB.

J'ai donc modifi� mon script de cr�ation de la base:

CREATE TABLE Cmd_gcos (
Num_Commande INT(255) NOT NULL AUTO_INCREMENT,
Nom_Commande VARCHAR(100) NOT NULL,
Description TEXT NOT NULL,
Nom_Type VARCHAR(30),
Nom_Periode VARCHAR(30),
PRIMARY KEY (Num_Commande),
CONSTRAINT Periode FOREIGN KEY (Nom_Periode) REFERENCES Periodicite
(Nom_Periode),
CONSTRAINT Type FOREIGN KEY (Nom_Type) REFERENCES Type (Nom_Type)
) TYPE=InnoDB ;

Ensuite j'ai fait un DESC de la table et le flag FOREIGN KEY n'apparait
toujours pas.

Il me reste � v�rifier si les Foreign key sont bien prises en compte en
essayant pas exemple de rentrer des donn�es incoh�rentes dans les
tables.

Je vous tiens au courant =-)

Merci

Laurent Oliva


Le mer 18/02/2004 � 19:07, Nicolas Rueff a �crit :
> Dans MySQL, seules les tables de type InnoDB acceptent les FK, me
> semble-t-il. En tout cas le type par d�faut (MyISAM) ne les prend pas en
> compte:
> 
> � En MySQL version 3.23.44 et plus r�centes, les tables InnoDB 
> supportent les v�rifications d'int�grit� r�f�rentielles. Pour les
> autres types de tables, le serveur mySQL accepte la syntaxe FOREIGN KEY
> dans la commande CREATE TABLE  , mais ne la prend pas en compte. �
> 
> Toujours issu de la doc de MySQL:
> 
> � Voici des avantages aux contraintes de cl�s �trang�res :
>     * En supposant que les relations soient proprement con�ues, les cl�s
> �trang�res rendent plus difficile pour un programmeur d'ins�rer des
> valeurs incoh�rentes dans la base.
>     * L'utilisation des modifications et effacement en cascade simplifie
> le code du client.
>     * Les r�gles de cl�s �trang�res proprement con�ues aident � la
> documentation des relations entre les tables.
> 
> Inconv�nients :
>     * Les erreurs, qui sont faciles � faire durant la conception des
> relations, peuvent causer des probl�mes graves : par exemple, des r�gles
> de contrainte circulaires, ou des combinaisons erron�es d'effacement.
>     * Une application correctement �crite s'assure d'elle-m�me de
> l'int�grit� r�f�rentielle des donn�es avant d'ex�cuter une requ�te. De
> ce fait, les v�rifications suppl�mentaires de la base sont inutiles et
> r�duisent les performances de l'application.
>     * Il n'est pas rare pour un administrateur de bases de donn�es de
> faire une topologie complexe des relations entre tables qui rendent tr�s
> complexe, voire impossible de restaurer des tables. �
> 
> Point de vue d'un gars ayant bricol� pas mal de donn�es
> (bioinformatique, suivi de prod, base de produits clients, donn�es
> issues de mesures ...) en 4 ans de mysql: mysql est fait pour bourrer,
> et bourre plus si on s'abstient de lui mettre des b�tons dans les roues
> styles"cl�s �trang�res". Si ton appli est bien cod�e, pas besoin d'en
> utiliser, mais si tu en as vraiment besoin, tourne-toi plut�t vers
> postgres.
> 

Répondre à