Sugeriría tener al menos lo siguiente:
Usuarios, Temas, Mensajes
- Todos los mensajes tendrían un hilo
- clave externa:thread_id
- Todos los hilos tendrían al menos un mensaje y al menos un destinatario (además del remitente)
- clave externa:to_user_id, from_user_id, message_id
A partir de ahí, simplemente podría asignar un par de indicadores a su hilo (to_user_deleted, from_user_deleted) que se actualizarían en consecuencia.
Por supuesto, hay muchas más cosas que considerar, como qué tipo de cosas desea tener en cuenta. Por ejemplo:
- ¿Desea mostrar el mensaje actual en lugar del mensaje inicial?
- ¿Desea permitir que los usuarios marquen mensajes individuales como leídos o solo cadenas?
Debe tener todo esto en cuenta al diseñar su base de datos.