2017-09-12 4 views
0

Je suivant le schéma de base de données pour l'application de messagerie Je crée: -Étendre la base de données pour le groupe/messagerie collaborative

Nom de la table: - conversation_threads

+-----------------+-------+---------+ 
| conversation_id | label | members | 
+-----------------+-------+---------+ 
| 1    | TEST | 1,2  | 
+-----------------+-------+---------+ 
| 2    | XYZ | 4,1  | 
+-----------------+-------+---------+ 

Nom de la table: - messages

+------------+----------------+-----------+-----------------+---------------------+ 
| message_id | message  | sender_id | conversation_id | created_at   | 
+------------+----------------+-----------+-----------------+---------------------+ 
| 1   | Hello   | 1   | 1    | 2017-09-12 09:00:00 | 
+------------+----------------+-----------+-----------------+---------------------+ 
| 2   | Hi    | 2   | 1    | 2017-09-12 09:02:00 | 
+------------+----------------+-----------+-----------------+---------------------+ 
| 3   | Hey!   | 4   | 2    | 2017-09-12 08:16:00 | 
+------------+----------------+-----------+-----------------+---------------------+ 

Nom de la table: - message_users

+----------+-------------+---------+--------+ 
| mu_id | message_id | user_id | status | 
+----------+-------------+---------+--------+ 
| 1  | 1   | 1  | READ | 
+----------+-------------+---------+--------+ 
| 2  | 1   | 2  | UNREAD | 
+----------+-------------+---------+--------+ 
| 3  | 2   | 2  | READ | 
+----------+-------------+---------+--------+ 
| 4  | 2   | 1  | UNREAD | 
+----------+-------------+---------+--------+ 
| 5  | 3   | 4  | READ | 
+----------+-------------+---------+--------+ 
| 6  | 3   | 1  | UNREAD | 
+----------+-------------+---------+--------+ 

Ce schéma fonctionne assez bien avec la messagerie un-à-un. Mais maintenant je veux présenter plus de 2 utilisateurs dans une seule conversation afin que tous les 3 ou 4 personnes ou plus puissent collaborer et discuter de choses. Ce qui me pose un problème, c'est si j'ajoute un autre utilisateur dans le champ members dans les fils de conversation - il obtient l'accessibilité pour lire tous les messages présents dans ce fil de conversation particulier depuis le début - bien qu'il ait été ajouté tard dans la conversation .

Veuillez me fournir une solution sur la façon de résoudre ce problème particulier.

J'espère que ma question n'est pas trop large.

+0

Pas trop large, mais probablement de réponse à plusieurs reprises auparavant. Cela semble correct sauf pour les données CSV dans la table 'conversation_threads'. Débarrassez-vous de cela. –

+0

@TimBiegeleisen - Donc, si je supprime la colonne 'members' - dois-je introduire une autre table pour stocker' conversation_thread_members'? Et comment est-ce que je m'approche pour résoudre le problème de montrer à un membre de fil seulement les messages qui ont été communiqués après qu'il ait rejoint la conversation? – khalid

+0

Ah je vois! Donc, si j'ajoute un autre utilisateur - il ne recevra que les messages pour lesquels son identifiant est assigné dans la table 'message_users'. Donc, si j'ai besoin de diffuser un petit message spécial (surligné) comme "l'utilisateur A a rejoint la conversation" - je devrais simplement le stocker comme un message avec des informations supplémentaires qu'il s'agit d'un message "Surligner". Peut-être un champ de drapeau contenant son type. Donc, pour normal ce serait le message "TEXT", pour celui-ci, il serait "HIGHLIGHT" – khalid

Répondre

0

Si je vous comprends schéma relation que vous venez de mettre les membres comme vous l'avez fait

+-----------------+-------+---------+ 
| conversation_id | label | members | 
+-----------------+-------+---------+ 
| 1    | TEST | 1,2,3,4 | 
+-----------------+-------+---------+ 
+0

Stocker CSV comme ceci n'est généralement pas une bonne idée. –

+0

Je ne parlais pas de CSV Je parle de stocker des données dans mysql :(cela ressemble à une simple sortie d'un shell, et la colonne des membres semble être un type varchar –

+0

Oui - 'members' est une colonne de type VARCHAR . – khalid