with tutorial sistema hacer descargar create con como application php mysql chat web

sistema - php chat tutorial



Almacenamiento de mensajes de chat dentro de una tabla MySql (3)

Durante las últimas semanas he estado trabajando en una aplicación cliente de chat basada en web y tengo una pregunta sobre el almacenamiento de mensajes de chat dentro de una tabla MySql. Creé una tabla llamada conversaciones y por ahora consta de 5 campos;

user1ID, user2ID, mensajes (texto medio), estado, marca de tiempo.

Cuando pruebo la aplicación de chat todo funciona perfectamente bien, pero el problema es que cada vez que un usuario envía algo, añado ese valor en mi campo ''mensajes'' como una nueva línea. Y cuando se trata de recuperar el mensaje, mi código sql lo lee todo y lo muestra al usuario correspondiente. Por lo tanto, la cantidad de datos aumenta linealmente por la cantidad de texto agregado al campo de mensajes. Mi pregunta es, ¿hay alguna forma de SELECCIONAR solo la última línea de un campo de texto o tal vez otra solución que reducirá la cantidad de datos transferidos?


¿Por qué no tener una estructura de tabla como esta?

chats

  • chatID
  • ID de usuario1
  • ID de usuario2
  • startedDateTime
  • EndedDateTime

chatContent

  • chatContentID
  • chatID
  • mensaje
  • fecha y hora
  • estado

De esta manera, sus datos son mucho más fáciles de buscar y organizar. Por ejemplo, ¿qué pasaría si quisieras que un determinado mensaje se dijera en X veces? o quieres obtener todos los mensajes de chat con estado X?

Separar los datos en 2 tablas debe ser mucho más agradable y ordenado.


Considere almacenar un mensaje por fila en la tabla:

id, user1id, user2id, mensaje, estado, marca de tiempo

donde id es una columna de autoincrement.


Necesita un mejor esquema db - más relacional. Hacerlo también le dará otras mejoras (chats protegidos con contraseña y chat multiusuario para nombrar un par)

Aquí hay una versión de un ERD para su db.

5/6/2016 edit Agregar DDL con (afortunadamente) nombres y tipos de campos mejorados

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);