Bonjour Crackerz,
Si l’utilisateur U1 supprime un message M1 qu’il a créé, et que celui-ci doit rester disponible pour les utilisateurs U2, ...Um, vous pouvez modéliser ainsi la partie qui concerne l’émission des messages :
[UTILISATEUR]--0,N--------(R1)-------- 1,1--[EMISSION]--(1,1)--------(R2)--------(0,1)--[MESSAGE]
A la création de M1, on effectue un insert dans la table EMISSION (dérivée de l’entité-type EMISSION) et un insert dans la table MESSAGE (dérivée de l’entité-type MESSAGE).
Quand U1 voudra supprimer M1, en fait l’opération ne portera que sur la table EMISSION : M1 ne sera plus présent dans EMISSION mais le sera dans MESSAGE, donc inaccessible pour U1 mais accessible pour U2.
Du côté réception on a quelque chose de semblable :
MLD :
Code SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| CREATE TABLE UTILISATEUR
(
UtilisateurId INT NOT NULL,
CONSTRAINT UTILISATEUR_PK PRIMARY KEY (UtilisateurId)
) ;
CREATE TABLE MESSAGE
(
MessageId INT NOT NULL,
CONSTRAINT MESSAGE_PK PRIMARY KEY (MessageId)
) ;
CREATE TABLE EMISSION
(
MessageId INT NOT NULL,
UtilisateurId INT NOT NULL,
CONSTRAINT EMISSION_PK PRIMARY KEY (MessageId),
CONSTRAINT EMISSION_UTILISATEUR_FK FOREIGN KEY (UtilisateurId)
REFERENCES UTILISATEUR (UtilisateurId)
ON DELETE CASCADE,
CONSTRAINT EMISSION_MESSAGE_FK FOREIGN KEY (MessageId)
REFERENCES MESSAGE (MessageId)
) ;
CREATE TABLE RECEPTION
(
MessageId INT NOT NULL,
CONSTRAINT RECEPTION_PK PRIMARY KEY (MessageId),
CONSTRAINT RECEPTION_MESSAGE_FK FOREIGN KEY (MessageId)
REFERENCES MESSAGE (MessageId)
) ;
CREATE TABLE UTIL_RECEPT
(
MessageId INT NOT NULL,
UtilisateurId INT NOT NULL,
CONSTRAINT UTIL_RECEPT_PK PRIMARY KEY (MessageId, UtilisateurId),
CONSTRAINT UTIL_RECEPT_UTILISATEUR_FK FOREIGN KEY (UtilisateurId)
REFERENCES UTILISATEUR (UtilisateurId)
ON DELETE CASCADE,
CONSTRAINT UTIL_RECEPT_RECEPTION_FK FOREIGN KEY (MessageId)
REFERENCES RECEPTION (MessageId)
) ; |
Quand un message a été supprimé des deux côtés, en fait ce sont les liens avec les utilisateurs qui sont rompus, mais il est toujours présent. A vous de voir dans quelles conditions il peut être supprimé (garbage collector, trigger su delete...)
Partager