Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2014, 12:32
DandyCC
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Diseño para un sistema de mensajes privados

Hola. Necesito diseñar un sistema para almacenar los mensajes privados que se mandan usuarios en una web. Esta parte es fácil y no tiene dificultad, pero además el sistema debe poder almacenar "conversaciones" entre varios usuarios (al estilo de las conversaciones de Facebook). Además, debe haber algún sistema que marque los mensajes como leídos. Si un mensaje pertenece a una conversación entre 3 o más usuarios, el mensaje debe aparecer como no leído para cada miembro de la conversación.

Al principio pensé en diseñar las dos partes por separado, pero me di cuenta de que un mensaje privado entre dos usuarios no es más que una conversación entre dos usuarios. Por tanto, pensé en diseñarlo todo junto.

Se me ha ocurrido lo siguiente, pero estoy seguro de que no es óptimo porque hay una tabla con un único atributo.

Si alguien se anima a darme una solución alternativa y mejor, encantado.

- Una tabla para almacenar las conversaciones, pero solo se me ocurre que tenga un atributo

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tbl_conversaciones` (
  2.   `idconversacion` INT(11) NOT NULL AUTO_INCREMENT,
  3.   PRIMARY KEY (`idconversacion`)
  4. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

- Una tabla para almacenar los mensajes, que tenga un atributo que indique a que conversación pertenece.

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tbl_mensajes` (
  2.   `idmensaje` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `autor` INT(11) NOT NULL,
  4.   `fecha_envio` datetime NOT NULL,
  5.   `contenido` VARCHAR(400) COLLATE utf8_spanish_ci NOT NULL,
  6.   `idconversacion` INT(11) NOT NULL
  7.   PRIMARY KEY (`idmensaje`)
  8. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

- Una tabla para almacenar los miembros de cada conversación
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tbl_conversaciones_miembros` (
  2.   `idconversacion` INT(11) NOT NULL,
  3.   `miembro` INT(11) NOT NULL,
  4.   PRIMARY KEY (`idconversacion`,`miembro`),
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

- Y finalmente una tabla para almacenar los mensajes no leidos de cada usuario:
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tbl_mensajes_no_leidos` (
  2.   `idmensaje` INT(11) NOT NULL,
  3.   `idusuario` INT(11) NOT NULL,
  4.   PRIMARY KEY (`idmensaje`,`idusuario`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

Gracias!!