Ich würde vorschlagen, mindestens Folgendes zu haben:
Benutzer, Threads, Nachrichten
- Alle Nachrichten hätten einen Thread
- Fremdschlüssel:thread_id
- Alle Threads hätten mindestens eine Nachricht und mindestens einen Empfänger (sowie einen Absender)
- Fremdschlüssel:to_user_id, from_user_id, message_id
Von dort aus könnten Sie Ihrem Thread einfach ein paar Flags zuweisen (to_user_deleted, from_user_deleted), die entsprechend aktualisiert würden.
Natürlich gibt es noch viel mehr Dinge zu beachten, z. B. welche Dinge Sie berücksichtigen möchten. Zum Beispiel:
- Möchten Sie statt der Startnachricht die aktuelle Nachricht anzeigen?
- Möchten Sie Benutzern erlauben, einzelne Nachrichten oder nur Threads als gelesen zu markieren?
All dies müssen Sie beim Entwerfen Ihrer Datenbank berücksichtigen.