Ainsi parla Laurent Oliva le 049�me jour de l'an 2004:

> Bonsoir,
> 
> Je suis en train de cr�er une base sous MySQL, et je cherche �
> utiliser les cl�s �trang�res.
> 
> Voici mon script SQL pour cr�er ma base:
> 
> create database Gcos;
>  
> use Gcos;
> [SNIP]
> Je vois bien ma cl� primaire mais pas ma cl� �trang�re dans la colonne
> Key, est-ce normal ?
> 
> A mon avis oui car m�me quand je fais un dump avec mysqldump, il ne me
> reg�n�re pas les ordres de cr�ation de la foreign key.

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.


-- 
      Nicolas Rueff � Montb�liard � France � http://rueff.homelinux.org
 (^>        [EMAIL PROTECTED] � GPG 0xDD44DAB4
 /v\           Jabber [EMAIL PROTECTED] � ICQ 97700474
<__/  � We are Penguin. Resistance is futile. You will be assimilated. �
     

Attachment: pgpJGqvBaPVOI.pgp
Description: PGP signature

Répondre à