Page 1 sur 1

clé étrangère ?

Posté : 07 oct. 2006, 20:49
par artotal
Bonjour,
je cherche à comprendre l'utilité d'une clé étrangère.
Cela évite de faire des jointures dans des cas spécifique ?
A partir d'une table, dans mysql peux t-on ajouter des clés étrangère ?
Merci

Posté : 07 oct. 2006, 20:52
par Cyrano
C'est précisément pour faire des jointures qu'on utilise des clés étrangères, regarde ceci

Posté : 08 oct. 2006, 01:55
par artotal
Très bien je vais bien le relire ce tuto...

edit :
dans une table déjà crée comment peut on inséré une clé étrangère, je n'est pas trouvé l'option dans mysql ?

Posté : 08 oct. 2006, 10:23
par Cyrano
Ha, ok, alors il faut ajouter une précision propre à MySQL parce que j'ai idée que c'est de ce SGBD qu'il est question.

Ajouter une clé étrangère peut comporter deux instructions selon le moteur de stockage utilisé :
- Si tu utilises des tables AUTRES que InnoDB, alors tu ajoutes simplement une colonne.
- Si tu utilises des tables InnoDB, tu peux, outre l'ajout d'une colonne, ajouter des restrictions quant à "l'intégrité référentielle". Ce que ça signifie, c'est que si tu as dans une table B une clé étrangère correspondant à la clé primaire d'une table B, tu ne pourra supprimer aucune ligne de la table A si des correspondances existent dans la table B. Sur un plan pratique si on reprend l'exemple du tuto, tu as trois personnes enregistrées dns la table personnes et des numéros dans la table téléphone : tu ne pourras supprimer de la table personnes que "Augustin Connu" qui n'a pas de numéro, mais si tu essayes de supprimer l'un des deux autres, le SGBD va te jeter en retournant une erreur. L'intérêt évident de ce système est que tu ne peux plus avoir de données orphelines dans ton schéma.

Mais l'intégrité ne sera pas assurée dans des tables utilisant un moteur autre que InnoDB, enfin pour l'instant puisque c'est principalement le seul moteur transactionnl en attendant la sortie du moteur développé actuellement chez MySQL avec le projet Falcon destiné à remplacer InnoDB (Pour mémoire, InnoDB appartient depuis l'an dernier à Oracle) Et si je dis que c'est propre à MySQL, c'est parce que ce fonctionnement n'est pas forcément le même avec tous les SGBD qui en général offrent tous le support de l'intégrité référentielle.

Pour ma part, j'utilise très rarement le moteur InnoDB et je préfére assurer l'intégrité référentielle moi-même par programmation lorsque je manipule des données. Mais des Gourous du SQL pourront avoir d'autres avis plus documentés pour expliquer un autre choix.

Posté : 08 oct. 2006, 15:59
par zeuf
Salut à tous !

Mais il faut rappeler que les tables InnoDB, tout comme BDB (Berkeley DB) et Gemini sont A.C.I.D. contrairement à MyISAM qui ne l'est pas (mais qui est "plus" rapide à consulter, d'où la préférence pour une table MyISAM lorsque les requêtes ne sont que SELECT, car qu'une commande SELECT foire est moins grave qu'une commande INSERT ou UPDATE, non ?!. Cependant on peut tout de même appliquer des verrous de table).

ACID ce sont les 4 propriétés d'une base de données qui supporte les transactions (dit simplement : avec une transaction, on a la garantie que toutes les instructions sont exécutées ou bien qu'aucune instruction ne l'est. Donc plus besoin de se soucier des pannes de courant).

A pour Atomicité : les instructions SQL sont exécutées comme une unité (Tout ou rien).

C pour Cohérence : chaque transaction transforme les données d'un état cohérent à un autre. Pas de données faussées.

I pour Isolation : tant qu'une transaction n'est pas terminée, ses effets ne sont pas visibles par les autres transactions.

D pour Durabilité : lorsqu'une transaction est terminée, les modifications sont permanentes. Même si la base de données plante, les informations de cette transaction restent disponibles et complètes.


Voili, voilou... Pour approndir le sujet, un petit saut sur Wiki wiki wiki http://fr.wikipedia.org/wiki/Propri%C3%A9t%C3%A9s_ACID

Peace ! Zeuf

Posté : 08 oct. 2006, 19:04
par artotal
[Mysql] - D'autre disent que MyISAM ne supporte pas les grosses charges, de toute façon innob c'est pour un serveur dédier, en mutualisé sa n'existe surement pas.
@Cyrano
L'integrité réferentiel ¿?
Tu est un extra terrestre Cyrano, il est très bon ton tuto sur les jointures
Merci ;-)

Posté : 08 oct. 2006, 19:31
par Cyrano
Pour ce qui concerne les moteurs, même en mutualisé, tu peux choisir ce que tu veux, MyISAM, InnoDB et quelques autres moins courants. Quant à la charge, dis-toi bien que les plus grosses bases de données MySQL au monde se mesurent en To (TeraOctets), là, on ne parle plus tout à fait d'une base de forum ou de boutique en ligne de quartier.

Posté : 10 oct. 2006, 17:07
par zeuf
Salut à tous !

Et puis selon la documentation MySQL 5 :
1.2.4. Quelles tailles peuvent atteindre les tables MySQL
MySQL version 3.22 a une limite de 4Go par table. Avec le nouveau format de table MyISAM, disponible avec MySQL version 3.23, la taille maximale des tables a été poussée à 8 millions de teraoctets (2 ^ 63 octets).

Notez, toutefois, que les systèmes d'exploitation ont leur propres limites.
Et enfin, toujours issu de la documentation MySQL 5
1.5. Quels standards respecte MySQL ?
...
Le serveur MySQL a été conçu pour travailler avec des bases de taille moyenne (de 10 à 100 millions de lignes, ou des tables de 100 Mo) sur des systèmes de petite taille. Nous continuons d'améliorer MySQL pour qu'il fonctionne avec des bases gigantesques (tera-octets), tout en conservant la possibilité de compiler une version réduite de MySQL pour qu'il fonctionne sur des appareils embarqués ou nomades. L'architecture compacte de MySQL rend possible le support de ces applications si différentes, sans aucun conflit dans les sources.
...

A Ciao !

Posté : 10 oct. 2006, 17:47
par artotal
c'est imprerssionant comme chiffre !!!

Posté : 18 oct. 2006, 22:01
par zeuf
Salut !

Et enfin pour conclure en beauté :
MySQL ...
Gère les très grandes bases de données. Nous utilisons le serveur MySQL avec des bases qui contiennent 50 millions de lignes et nous connaissons des utilisateurs qui utilisent le serveur MySQL avec plus de 60 000 tables et 5 000 000 000 (milliards) de lignes ... From : Manuel de référence MySQL 5.0
A +

Zeuf