Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 20/12/2010, 11h13   #1
Invité régulier
 
Inscription : juin 2007
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 53
Points : 9
Points : 9
Par défaut MYSQL On Delete Cascade sur association n,n

Bonjour,

J'ai réalisé un MCD qui est correct mais je n'arrive pas à utiliser On Delete Cascade sur association n,n.

J'ai le MCD suivant :

A -0,n--- association1 ---1,1- B
E -0,n--- association2 ---1,1- D
C -0,n--- association3 ---0,n- B
C -0,n--- association4 ---0,n- D

J'en déduis le MLD suivant :

A (NumA clé primaire)
B (NumB clé primaire et NumA clé étrangère)
C (NumC clé primaire)
D (NumD clé primaire et NumE clé étrangère)
E (NumE clé primaire)

2 tables pour les associations n,n

association3 (NumB, NumC)
association4 (NumE, NumB)

J'ai deux fois le même problème :

Si j'efface un enregistrement de A alors les enregistrements de B disposant de la clé NumA sont effacés mais les enregistrements de association3 contenant NumB ne sont pas effacés car il faut un index.

Si j'efface un enregistrement de E alors les enregistrements de D disposant de la clé NumE sont effacés mais les enregistrements de association4 contenant NumD ne sont pas effacés car il faut un index.

Si je crée un index (inutile à mes yeux) sur association3 par exemple alors je ne peux pas prendre en compte mes deux cas de suppression.

Quelqu'un peut-il m'éclairer ?

Merci
AdoOs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 12h06   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
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 : 10 980
Points : 18 225
Points : 18 225
Envoyer un message via MSN à CinePhil
Déjà il y a un problème ici :
Citation:
C -0,n--- association4 ---0,n- D

association4 (NumE, NumB)
Est_ce dû à l'abstraction du message avec des A, B... au lieu des vrais noms ?

Citation:
Si j'efface un enregistrement de A alors les enregistrements de B disposant de la clé NumA sont effacés mais les enregistrements de association3 contenant NumB ne sont pas effacés car il faut un index.
De quel index parles-tu ?
Toute clé étrangère doit avoir un index et je crois que MySQL les crée maintenant automatiquement.

Citation:
Si j'efface un enregistrement de E alors les enregistrements de D disposant de la clé NumE sont effacés mais les enregistrements de association4 contenant NumD ne sont pas effacés car il faut un index.
Apparemment, il y avait bien une erreur dans la formulation de ta table association4 !

Citation:
Si je crée un index (inutile à mes yeux) sur association3 par exemple alors je ne peux pas prendre en compte mes deux cas de suppression.
Là encore, de quel index parles-tu ?

Je vais reprendre ta structure avec une notation plus facile à lire. Les clés primaires sont soulignées et les clés étrangères sont en italique.
Citation:
J'ai le MCD suivant :

A -0,n--- association1 ---1,1- B
E -0,n--- association2 ---1,1- D
C -0,n--- association3 ---0,n- B
C -0,n--- association4 ---0,n- D
A (NumA...)
B (NumB, NumA...)
C (NumC...)
D (NumD...)
association3 (NumC, NumB)
association4 (NumC, NumD)

En plus de la clé primaire composée du couple d'identifiant des tables entrant en jeu dans l'association et qui indexe automatiquement la première colonne de ce couple (ici, dans les deux cas, NumC est indexé en tant que première colonne de la clé primaire), il faut poser un index sur la seconde colonne (NumB dans association3 et NumD dans association4).

Et avec ON DELETE CASCADE sur les clés étrangères, la suppression d'un A doit entraîner la suppression d'un B et donc d'une association3.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 17h22   #3
Invité régulier
 
Inscription : juin 2007
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 53
Points : 9
Points : 9
Merci pour ta réponse.

Je vais tester pour voir si j'arrive à appliquer ta solution.
AdoOs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 18h21   #4
Invité régulier
 
Inscription : juin 2007
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 53
Points : 9
Points : 9
Tout marche très bien.

Comme tu l'avais soulevé, j'avais un problème de compréhension de la notion index.

Merci beaucoup pour ton explication très claire.
AdoOs 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 09h23.


 
 
 
 
Partenaires

Hébergement Web