Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/03/2008, 23h21   #1
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 034
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Par défaut Contrainte de clés étrangères

Bonjour,
Je vous expose mon cas afin de vous demander conseil sur l'utilisation des contraintes de clés étrangères ON DELETE et ON UPDATE.

Je fais une BBD qui répertorie de la documentation de cinéma.
J'ai donc dans ma BDD des Films, des Artistes, des Festivals, des Documents et les tables de jointure et d'autres tables annexes qui vont avec.

Mon problème est le suivant :
Je peux trouver séparément de la documentation sur un même film, mais une fois selon son titre original (par exemple un article américain sur le tournage d'un film) et plus tard selon son titre français (par exemple un résumé lors de sa sortie en France), sans forcément savoir qu'il s'agit du même film.
Je peux donc créer deux lignes dans la table Films, l'une avec seulement le titre original, l'autre avec seulement le titre français. A chacun de ces films (qui sont en fait le même, vous suivez toujours ?) sera référencée la documentation trouvée ainsi que des liens par exemple vers les artistes qui ont participé au film. Je peux ainsi avoir pour le film en version originale seulement le nom du réalisateur et pour le film avec son titre français un générique plus complet. Les clés étrangères dans la table FilmsArtistes vont me permettre de faire le rapprochement à chaque fois. Jusque là tout va bien.

Plus tard, je découvre que ces deux films n'en sont qu'un. Je veux donc supprimer une des deux fiches et associer à celle qui reste tous les liens qu'elle possédait avec d'autres tables (Documents, Artistes, Festivals éventuellement).

Vaut-il mieux que j'utilise les contraintes de clés étrangères pour détecter les liens, automatiser le transfert et surveiller la suppression ou bien gérer tout ça dans mon programme d'accès à la base ? Dans ce dernier cas, l'idée que j'ai est d'afficher la seconde fiche avec tous ses liens et un bouton pour valider le tranfert et la suppression de la seconde fiche. Qu'en pensez-vous ?
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 08h49   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 408
Points : 6 408
Bonjour,

A priori, rien ne permet au SGBD de trouver la fiche identique à celle que tu souhaites supprimer. C'est donc à l'application de créer le nouveau lien.
Les contraintes de clef étrangères ne permettent pas de détecter des liens. C'est bien à l'application de permettre la mise en relation de deux fiches.

ced
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 10h04   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 034
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Ah bon ! Peut-être me suis-je mal exprimé ? Ou alors j'ai mal compris comment marchent les contraintes ?

Si je mets une contrainte ON DELETE RESTRICT et que j'essaie de supprimer un film qui a des artistes et/ou des documents et/ou des festivals, MySQL devrait bien empêcher cette suppression et me retourner une erreur, non ?
Dans ce cas l'idée serait d'exploiter l'erreur dans mon programme.

Sinon l'autre solution est de ne pas mettre de contrainte et de vérifier, par programme et avant toute suppression, que des lignes filles n'existent pas dans d'autres tables. Ce cas me semble plus lourd et plus compliqué que le premier puisqu'il demande de multiples interrogations de la BDD alors que le premier cas est un peu plus automatique.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 14h09   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 408
Points : 6 408
Tout à fait. On a dû mal se comprendre .
MySQL va bien bloquer les suppressions, avec le mot clef RESTRICT, des lignes parent qui ont des lignes enfant associées. Et cette erreur est bien évidemment récupérable au niveau du programme.
Ce que je voulais dire, c'est que MySQL ne peut pas réaffecter tout seul un enfant à un parent, sauf éventuellement à mettre une valeur par défaut.

ced
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 22h26   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 034
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
OK merci. Je vais faire comme ça alors, ça me semble plus logique.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h04.


 
 
 
 
Partenaires

Hébergement Web