2011-06-08 25 views
12

La comunicación entre los usuarios de Facebook parece estar almacenada en una "conversación" larga. Entonces, los correos electrónicos enviados y los mensajes de chat privados intercambiados parecen ser parte de una larga conversación en curso.Diseño de la base de datos: chat privado, chat de grupo y correos electrónicos

Creo que esta implementación funciona bien para los usuarios (al menos lo hace para mí). Asumo el diseño de tabla para esta parte podría ser implementado de esta manera:

TABLE: message 
- message_id 
- timestamp 
- from_user_id 
- to_user_id 
- message 

Lo que si quería apoyar chat de grupo? Haría algo como esto:

TABLE: message 
- message_id 
- timestamp 
- from_user_id 
- message 

TABLE: message_recipient 

- message_recipient_id 
- message_id 
- to_user_id 

Creo que va a funcionar. Sin embargo, me pregunto si tendría sentido para el usuario si mostrara cada una de las cosas que el usuario ha enviado a alguien en una larga conversación. Probablemente no. Imagine una conversación con la persona A se mezcla con la conversación en grupo con A, B, C, D mezclado con conversación con la persona E y así sucesivamente ....

Cualquier sugerencia sobre lo que sería un concepto útil para poner en práctica?

Respuesta

7

Creo que un mensaje debe ser una entidad, independientemente de la plataforma o el emisor/receptor, con id, message, timestamp campos, y una tabla de mensajes relación - como usted sugiere - con id, message_id, from_id, to_id. Luego, si muestra una conversación de usuario único a usuario, puede mostrar cada mensaje entre ellos. Para grupos de chat, usted debe tener una tabla con id, title, timestamp que sostiene el grupo de chat registro principal, y otra tabla que contiene los usuarios que forman parte de ese grupo de chat, con id, group_chat_id, user_id campos.

Solo mi opinión y cómo lo implementaría.

Editar: Quizás tendría sentido tener from_id en la propia entidad del mensaje, ya que un mensaje debe tener un ID de remitente singular.

1

También podría agrupar mensajes por temas. Agrega una tabla de temas. Agrega una tabla de destinatarios, vinculada a un tema. Los mensajes también estarán relacionados con un tema.

Puede limitar programáticamente los temas entre dos usuarios mirando qué tema tienen esos dos usuarios en sus destinatarios. También podría separar sus mensajes dándoles un atributo de tipo. Por ejemplo, escriba 0 será un mensaje de la bandeja de entrada, tipo 1 será un mensaje de chat y así sucesivamente.

Si quisiera tener un número arbitrario de destinatarios en un tema, evitaría el combo from_id/to_id.

Cuestiones relacionadas