Conception de base de données pour le stockage des Messages de discussion entre les personnes
Je suis en train de construire une messagerie/système de chat. qui peut stocker une conversation entre deux personnes dans un ordre chronologique. Aussi, si Un Utilisateur supprime la conversation l'Utilisateur B encore doivent avoir accès à la conversation jusqu'à ce qu'il souhaite supprimer.
- Boîte de réception de Tous les messages reçus par l'utilisateur à partir de différents utilisateurs seront affichés avec le dernier message de ce thread particulier.
- Écran de Conversation - l'ordre Chronologique de la conversation entre l'Utilisateur A et Utilisateur B
C'est la structure de base de la base de données je suis venu avec. Dois-je stocker les messages deux fois dans la base de données ?
- id
- to_id
- from_id
- message
- timestamp
- lire
je ne comprends pas pourquoi les gens sont de donner à une baisse de vote à ma question 🙁
OriginalL'auteur Harsha M V | 2011-11-12
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser une table de recherche pour les messages de magasin qui a les droits pour afficher ce message
De cette façon, si un utilisateur supprime leur message, ils sont en fait juste de la suppression de leur relation dans le message de ne pas le message lui-même. vous venez de supprimer de la messageUsers table. ou de définir un champ actif à 1 ou à 0.
j'ai mis à jour la réponse. Si vous ne stocker dans la table des messages que
user_id
est l'id de l'utilisateur qui a créé le message. par exemple, si le message->user_id = 1 et dans messageUsers vous supprimez l'utilisateur 1 a la capacité de lire ce message, l'utilisateur 2 va encore voir le message et qui l'a créé.C'est aussi en supposant que vous êtes la création d'une base de données relationnelle... j'espère que vous êtes.
OriginalL'auteur Tim Joyce
Au début, je pensais que quand une personne l'a supprimé, vous pourriez juste se tourner vers ou À Partir de la valeur null, mais qui serait vous faire perdre qui a envoyé le message ou à qui elle était adressée.
Vous devez juste ajouter un champ deleted_by qui contiendra l'id de la personne qui l'a supprimé ou sera nulle. Donc, lors de la sélection d'enregistrements à partir de la boîte de réception que vous avez quelque chose comme:
Select * from Messages où to_id = MyID et deleted_by <> MyID
lorsque vous supprimez le message que vous vérifiez si le deleted_by est nulle, si elle est mise à jour de l'deleted_by champ avec MyID, si elle n'est pas (ce qui signifie que l'autre partie l'a supprimé en tant que bien), vous supprimez l'enregistrement.
Si vous voulez avoir les mêmes fonctionnalités pour les threads au lieu de messages (c'est à dire gérer la conversation, et pas un seul message à la fois), vous devriez avoir une autre table (MessageThreads) dans laquelle vous avez la from_id, to_id champs, deleted_by avec un thread_id champ. dans la table des Messages vous substituer la from_id to_id et deleted_by avec le thread_id.
OriginalL'auteur John
Il y aura deux tables.
les nœuds
node_user
Dans les nœuds de table,
Dans node_user table,
Lorsque l'utilisateur envoyer un message à l'utilisateur B, tout d'abord enregistrer le message dans les nœuds de la table. Puis, ajouter deux enregistrements dans node_user table. Lorsque l'utilisateur A supprimer le message, supprimez uniquement le premier enregistrement dans node_user table.
Lorsque l'utilisateur B pour supprimer le message, vous pouvez supprimer des enregistrements à partir de deux nœuds et node_user table.
Filetée Message,
désolé. J'ai oublié de supprimer le message de la colonne dans node_user table. Je vais modifier. Vous n'avez pas besoin de stocker le message trois fois. Juste une fois dans le nœud de la table. Utilisation node_user table pour stocker de l'expéditeur et du destinataire. Il fonctionne également si vous ajoutez des champs CC et CCI fonctionnalités plus tard.
j'ai modifié à ma question... à faire clairement état de mes besoins. suppose que l'appelant une boîte de réception n'était pas approprié. Merci beaucoup
correction de la mauvaise table nom de "supprimer uniquement le premier enregistrement dans node_user table." pour supprimer la conversation à partir d'Un Utilisateur à l'Utilisateur B. l'Utilisateur B ont toujours accès à la conversation
oui. vous pouvez supprimer timestamp dans les nœuds de la table.
OriginalL'auteur Thein Hla Maw