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