Suggerirei di avere almeno quanto segue:
Utenti, thread, messaggi
- Tutti i messaggi avrebbero un thread
- chiave esterna:thread_id
- Tutti i thread dovrebbero avere almeno un messaggio e almeno un destinatario (oltre al mittente)
- chiave esterna:to_user_id, from_user_id, message_id
Da lì puoi semplicemente assegnare un paio di flag al tuo thread (to_user_deleted, from_user_deleted) che verrebbero aggiornati di conseguenza.
Ci sono molte altre cose da considerare ovviamente, come il tipo di cose di cui vuoi tenere conto. Ad esempio:
- Vuoi visualizzare il messaggio corrente anziché il messaggio iniziale?
- Vuoi consentire agli utenti di contrassegnare singoli messaggi come letti o solo thread?
Devi tenerne conto durante la progettazione del tuo database.