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 originalCREATE TABLE IF NOT EXISTS `tbl_conversaciones` (
`idconversacion` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`idconversacion`)
) 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 originalCREATE TABLE IF NOT EXISTS `tbl_mensajes` (
`idmensaje` INT(11) NOT NULL AUTO_INCREMENT,
`autor` INT(11) NOT NULL,
`fecha_envio` datetime NOT NULL,
`contenido` VARCHAR(400) COLLATE utf8_spanish_ci NOT NULL,
`idconversacion` INT(11) NOT NULL
PRIMARY KEY (`idmensaje`)
) 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 originalCREATE TABLE IF NOT EXISTS `tbl_conversaciones_miembros` (
`idconversacion` INT(11) NOT NULL,
`miembro` INT(11) NOT NULL,
PRIMARY KEY (`idconversacion`,`miembro`),
) 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 originalCREATE TABLE IF NOT EXISTS `tbl_mensajes_no_leidos` (
`idmensaje` INT(11) NOT NULL,
`idusuario` INT(11) NOT NULL,
PRIMARY KEY (`idmensaje`,`idusuario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Gracias!!