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

Re: [SID] MySQL et FOREIGN KEY



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
 (^>        nicolas@rueff.homelinux.org · GPG 0xDD44DAB4
 /v\           Jabber rueff@jabber.org · ICQ 97700474
<__/  « We are Penguin. Resistance is futile. You will be assimilated. »
     

Attachment: pgpqSNn6T8f9o.pgp
Description: PGP signature


Reply to: