Salve, Patrick, c’est encore moi !
Remarques relatives aux actions de compensation (ON DELETE / UPDATE) Looping 3.0 permet la déclaration au stade MCD des actions de compensation ON DELETE / UPDATE : belle initiative ! Mais quelques remarques.
Soit le diagramme suivant :
A titre d’exemple, l’excellent ouvrage
Modélisation Conceptuelle de Données - Une démarche pragmatique utilise les mots-clés "Merise", "MCD", "UML", "MLD", "champ", "CODASYL".
Or pour cet ouvrage "champ" est à remplacer par "rubrique" et "CODASYL" est à supprimer : au stade SQL on interviendra directement sur la table UTILISER :
DELETE FROM UTILISER
WHERE LivreId =
(SELECT LivreId
FROM LIVRE
WHERE Titre = 'Modélisation Conceptuelle de Données - Une démarche pragmatique'
AND MotCleId =
(SELECT MotCleId
FROM MOT_CLE
WHERE MotCleLibelle = 'CODASYL'))
;
UPDATE UTILISER
SET MotCleId =
(SELECT MotCleId
FROM MOT_CLE
WHERE MotCleLibelle = 'rubrique')
WHERE LivreId =
(SELECT LivreId
FROM LIVRE
WHERE Titre = 'Modélisation Conceptuelle de Données - Une démarche pragmatique'
AND MotCleId =
(SELECT MotCleId
FROM MOT_CLE
WHERE MotCleLibelle = 'champ'))
;
So far, so good. Supposons maintenant qu’on veuille supprimer l’ouvrage
Vingt ans dans un mur, la vie d’une brique, lequel utilise aussi des mots-clés. Allons-y tranquillement :
DELETE FROM LIVRE
WHERE Titre ='Vingt ans dans un mur, la vie d''une brique'
;
Las ! Le SGBD refusera la suppression parce que la table UTILISER contient des références à l’ouvrage en cause (table LIVRE).
Pour arriver à nos fins :
Soit on procède en deux temps, en commençant par supprimer ces références puis en supprimant enfin l’ouvrage ;
Soit on définit une action de compensation ON DELETE CASCADE pour l’association UTILISER, auquel cas, sans se préoccuper des références dont il est l’objet, on peut tout de suite supprimer l’ouvrage, le déclenchement de la suppression de ses références sera automatiquement assuré par le SGBD.
Mais ! Symétrie oblige, la suppression d’un mot-clé déclenche aussi la suppression automatique de ses références dans la table UTILISER. Si (par inadvertance...) je supprime le mot-clé "MCD", c’est quand même fâcheux pour les ouvrages traitant de la modélisation des données...
Autrement dit, à mon sens, les actions de compensation ON DELETE / UPDATE devraient être présentées non pas dans la fenêtre « Association », mais à un niveau plus fin, c’est-à-dire au niveau des pattes d’association (ainsi je cocherai la case « ON DELETE CASCADE » pour la patte connectant LIVRE et UTILISER, et m’abstiendrai pour l’autre patte).
Je passe au MCD de la page 254 de ton ouvrage. Si l’on peut envisager que la suppression d’un adhérent « cascade » automatiquement sur ses adhésions, il est difficilement concevable que la suppression d’une activité cascade elle aussi sur les adhésions (tête des adhérents !) Là encore, les pattes de l’association ADHESION devraient pouvoir être dotées d’actions de compensation différentes...
La réflexion portait sur les associations.
Sous-types et actions de compensation (disons ON DELETE) Manifestement, les actions de compensation sont ignorées dans le cas des sous-types. Il faut donc procéder en deux temps pour supprimer un personnel qui est un administratif (cf. page 221 de ton ouvrage), c’est bien dommage, alors que justement la suppression d’un personnel dans la table PERSONNEL ne peut que cascader (sinon il faudra qu’on m’explique) dans la table ADMINISTRATIF (ou ENSEIGNANT, toutes choses égales).
3 |
0 |