par
Cyrano » 08 oct. 2006, 10:23
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.
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 [i]personnes[/i] et des numéros dans la table [i]téléphone[/i] : tu ne pourras supprimer de la table [i]personnes[/i] 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.