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
CREATE 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 original
CREATE 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 original
CREATE 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 original
CREATE 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!!