Bonjour Bakura,
En préambule, bravo pour tes contributions !... je ne suis pas un fan des jeux vidéo, mais bon, tes articles ont dû te prendre pas mal de temps.
Concernant le sujet du fil, vite fait, il me semble que l'association doit être faite au niveau "Message", et non au niveau "Discussion" ; via le message, de toutes manières, tu peux "remonter" à la discussion sans problème.
Donc :
UtilisateurDiscussion UtilisateurMessage : utilisateur_id (clé primaire et clé étrangère), discussion_id message_id (clé primaire et clé étrangère), status, dateDernierMessageLu, dateStatut (vide, si non lu).
Juste une remarque, sur le fond, un champ calculé ne devrait jamais être stocké. Donc :
Envoyé par
Bakura
UtilisateurDiscussion : utilisateur_id (clé primaire et clé étrangère), discussion_id (clé primaire et clé étrangère), dateDernierMessageLu, status
==> dateDernierMessageLu est un champ "calculé" retrouvable en temps réel : le stockage de l'information n'est donc pas nécessaire. Mais le problème ne se pose pas si tu es d'accord sur l'association UtilisateurMessage plutôt que sur celle UtilisateurDiscussion.
J'ajouterais :
Discussion : id (clé primaire), sujet, #id_user_creation
Ce qui donnerait :
Utilisateur ---(0,n)---[a créé les discussions]---(1,1) Discussion ;
Discussion ---(1,n)---[contient les messages]---(1,1) Message ;
Utilisateur ---(0,n)---[participe aux messages]---(1,n) Message ;
donc :Utilisateur ---(0,n)---[participe aux messages]---(1,1) UtilisateurMessage ;
Message ---(1,n)---[concerne les utilisateurs]---(1,1) Utilisateur.
Partager