Usaría una tabla de búsqueda para los mensajes que almacenaría quién tiene los derechos para ver ese mensaje
table->message | table->messageUsers
id->0, message->'hi', user_id->1 user_id->1, message_id->0
user_id->2, message_id->0
De esa manera, si un usuario elimina su mensaje, en realidad solo está eliminando su relación con el mensaje, no el mensaje en sí. simplemente los elimina de la tabla messageUsers. o establezca un campo activo en 1 o 0.