Je suggérerais d'avoir au moins les éléments suivants :
Utilisateurs, Discussions, Messages
- Tous les messages auraient un fil de discussion
- clé étrangère :thread_id
- Tous les fils de discussion auraient au moins un message et au moins un destinataire (ainsi qu'un expéditeur)
- clé étrangère :to_user_id, from_user_id, message_id
À partir de là, vous pouvez simplement attribuer quelques drapeaux à votre fil (to_user_deleted, from_user_deleted) qui seront mis à jour en conséquence.
Il y a beaucoup plus de choses à considérer bien sûr, comme le genre de choses dont vous voulez tenir compte. Par exemple :
- Voulez-vous afficher le message actuel plutôt que le message de départ ?
- Voulez-vous autoriser les utilisateurs à marquer des messages individuels comme lus, ou uniquement des fils de discussion ?
Vous devez tenir compte de tous ces éléments lors de la conception de votre base de données.