Messagerie interne, MDP correct ?
Bonjour :),
Tout d'abord je tenais à vous remercier pour les précédentes réponses que vous m'avez apporté sur cette même section. Grâce à votre aide sur mon MCD précédent, le développement s'est déroulé à peu près sans encombre et sans mauvaise surprise, ce qui m'a fait gagné un temps précieux !
Toutefois, j'aimerais avoir votre avis sur un système de messagerie interne.
Voici les pré-requis :
- Je dispose de deux types d'utilisateurs qui hérite d'une classe de base (au niveau de la base de donnée, cela se modélise par trois tables : une table "User" qui contient un champ "discriminant" qui, en fonction du type d'utilisateur, va faire une jointure pour récupérer les autres données associées au type d'utilisateur). Appelons les A et B.
- Seul l'utilisateur de type A peut créer un fil de discussion vers un utilisateur B. A aucun moment l'utilisateur B ne peut créer une discussion avec A.
- Une discussion contient plusieurs messages.
- Les discussions peuvent avoir un statut tel que "lu", "non lu", "favoris" ou "supprimé", seulement ces statuts peuvent être différent chez les deux utilisateurs. De ce fait, si l'utilisateur A marque la discussion en favori, elle ne doit pas l'être chez l'utilisateur B pour la même discussion.
Ceci étant dit, je suis arrivé au schéma de table suivant :
Discussion : id (clé primaire), sujet
UtilisateurDiscussion : utilisateur_id (clé primaire et clé étrangère), discussion_id (clé primaire et clé étrangère), dateDernierMessageLu, status
Message : : id (clé primaire), utilisateur_id (index, clé étrangère), thread_id (index, clé étrangère), contenu, dateDeCreation.
Concrètement, lorsqu'une discussion est créée, je créé une nouvelle discussion ainsi qu'un premier message (qui est forcément créé par un utilisateur de type A, mais après tout cela ne pose pas de soucis car les deux types d'utilisateurs partagent une table en commun), et je remplis également la table de jointure UtilisateurDiscussion (qui permet justement d'avoir la fonctionnalité d'indépendance au niveau du statut).
Je voudrais savoir si cela est la meilleure manière de faire. En l'état, c'est très pratique. Si je souhaite par exemple afficher toutes les discussions auxquelles participent un utilisateur A ou B, je récupère la ligne correspondante dans la table UtilisateurDiscussion et je fais une jointure sur la table Discussion.
Merci de vos avis :jap:.
Je n'ai pas vu ta modification...
Citation:
Envoyé par Bakura
Non non ! Quand A ouvre la discussion avec le premier message, la discussion est marquée comme lue pour l'utilisateur A mais pas pour l'utilisateur B .../...
==>
Implication 1ère suggestion :
Discussion (id_discussion, #id_utilisateurA, #id_utilisateurB, favoriA (O/N), favoriB (O/N), LueA (O/N), LueB (O/N), supprimée (O/N), sujet, ...).
Implication 2nd suggestion :
DiscussionUtilisateur (#id_discussion, #id_utilisateur, favori (O/N), Lue (O/N) ...).
Citation:
Envoyé par Bakura
Je ne peux pas mettre "supprimée (O/N)" dans Discussion, car cela voudrait dire que l'utilisateur A pourrait supprimer la discussion ce qui aurait pour effet de la supprimé chez B également, ce dont je ne veux pas. B doit pouvoir voir la discussion MÊME SI l'utilisateur A l'a "supprimé" (en fait, elle n'est pas vraiment supprimée, juste "marquée" comme supprimée).
==> non. C'est le processus qui permettra de "voir" la discussion "supprimée" à A et/ou B.
Citation:
Envoyé par Bakura
Je ne peux pas mettre non plus lu (O/N) au niveau du message, puisque je ne travaille pas au niveau du "message" mais de la discussion (c'est une discussion tout entière qui est lue ou pas lue).
==> vu dans le premier point.