Au cours des deux dernières semaines, je travaille sur une application cliente Web basée sur le Web et j'ai une question concernant le stockage des messages de discussion dans une table MySQL. J'ai créé une table appelée conversations et pour l'instant il se compose de 5 champs; P>
user1id, user2ID, messages (moyentext), statut, horodatage. p>
Lorsque je teste la demande de discussion, tout fonctionne parfaitement, mais le problème est à chaque fois qu'un utilisateur envoie quelque chose, je suis ajouté à cette valeur dans mon champ "Messages" comme une nouvelle ligne. Et quand il s'agit de récupérer le message, mon code SQL lit le tout et le montrer à l'utilisateur correspondant. Donc, la quantité de données augmente linéairement par la quantité de texte ajoutée dans le champ Messages. Ma question est de ne pas choisir la dernière ligne d'un champ de texte ou peut-être une autre solution qui réduira la quantité de données transférées. P>
3 Réponses :
Pourquoi ne pas avoir une structure de table comme ceci: p>
chatContent strong> p>
De cette façon, vos données sont beaucoup plus faciles à rechercher et à organiser. Par exemple, que si vous vouliez obtenir un certain message parlé à X fois? ou vous voulez obtenir tous les messages de discussion avec le statut X? P>
séparation des données dans 2 tables devrait être beaucoup plus agréable et NATURE. P>
Merci beaucoup. J'essayais d'utiliser un nombre minimum de tables et de domaines, c'est pourquoi je l'ai fait comme ça, mais il semble que ce n'était pas une bonne solution
Cela peut être utile de mettre à jour votre schéma pour vous sauver des maux de tête dans la piste.
En fait, vous pouvez obtenir les mêmes résultats si vous combinez les tables en une. La table combinée aura un message_ID qui est PK et AI et contiendra également un champ de message_sent_timestamp et, puisque vous avez un AI, vous pourrez savoir quand a été envoyé le premier message et cela est bien sûr le "DémarkDateTime". La même chose va à "EndedDateTime" - La dernière ligne de Message_ID contiendra cette date. La question que vous devez vous demander est "y a-t-il un important pour une table de discussion? Si oui, qu'est-ce qui est si important dans une discussion que j'en ai besoin pour être une table?"
envisagez de stocker un message par ligne dans la table: p>
ID, User1ID, User2ID, message, statut, horodatage p>
où l'identifiant est une colonne d'autocrampe. p>
Vous avez besoin d'un meilleur schéma de DB - plus relationnel. Cela vous donnera également d'autres améliorations également (chats protégés par mot de passe et chat multi-utilisateur pour nommer un couple)
Voici une ED pour votre DB. P>
p>
5/6/2016 Modifier Ajout de DDL avec des types de champs et des noms améliorés (espérons-le) P>
CREATE TABLE user ( user_id CHAR(32), user_login VARCHAR(255), user_password CHAR(64), user_email VARCHAR(400), PRIMARY KEY (user_id) ); CREATE TABLE message ( message_id CHAR(32), message_datetime DATETIME, message_text TEXT, message_chat_id CHAR(32), message_user_id CHAR(32), PRIMARY KEY (message_id) ); CREATE TABLE user_chat ( user_chat_chat_id CHAR(32), user_chat_user_id CHAR(32), PRIMARY KEY (user_chat_chat_id,user_chat_user_id) ); CREATE TABLE chat ( chat_id CHAR(32), chat_topic VARCHAR(32), chat_password CHAR(64), user_chat_user_id CHAR(32), PRIMARY KEY (chat_id) ); CREATE INDEX user_login_idx ON user (user_login); ALTER TABLE message ADD FOREIGN KEY message_chat_id_idxfk (message_chat_id) REFERENCES chat (chat_id); ALTER TABLE message ADD FOREIGN KEY message_user_id_idxfk (message_user_id) REFERENCES user (user_id); ALTER TABLE user_chat ADD FOREIGN KEY user_chat_user_id_idxfk (user_chat_user_id) REFERENCES user (user_id); ALTER TABLE chat ADD FOREIGN KEY chat_id_idxfk (chat_id,user_chat_user_id) REFERENCES user_chat (user_chat_chat_id,user_chat_user_id);
Il existe quelques façons différentes de faire la limitation des données transférées: 1. Limitez les données aux dernières minutes X max. OU 2, envoyez uniquement des données de message depuis la dernière dateTime que vous fournissez au script de rafraîchissement.
Merci d'avoir accepté ma réponse. Demandez plus de questions ici si vous avez besoin. :)
@Timg Peut-être que vous avez déjà un ensemble de requêtes pour ce schéma de chat? Ce sera très utile.
@Dmytromedvid - Fait. J'ai mis à jour légèrement le schéma avec ce que j'espère des améliorations. Le DDL devrait fonctionner correctement dans MySQL
Ajoutez-vous votre message à un champ existant dans la seule ligne d'une table ??? O_o