Saya sarankan memiliki setidaknya yang berikut ini:
Pengguna, Utas, Pesan
- Semua pesan akan memiliki utas
- kunci asing:thread_id
- Semua utas akan memiliki setidaknya satu pesan dan setidaknya satu penerima (serta pengirim)
- kunci asing:to_user_id, from_user_id, message_id
Dari sana Anda cukup menetapkan beberapa flag ke utas Anda (to_user_deleted, from_user_deleted) yang akan diperbarui sesuai dengan itu.
Tentu saja ada lebih banyak hal yang perlu dipertimbangkan, seperti hal-hal apa yang ingin Anda pertanggungjawabkan. Misalnya:
- Apakah Anda ingin menampilkan pesan saat ini sebagai lawan dari pesan awal?
- Apakah Anda ingin mengizinkan pengguna menandai pesan individual sebagai telah dibaca, atau hanya utas?
Anda perlu mempertimbangkan semua ini saat mendesain database Anda.