少なくとも次のものを用意することをお勧めします:
ユーザー、スレッド、メッセージ
- すべてのメッセージにスレッドがあります
- 外部キー:thread_id
- すべてのスレッドには、少なくとも1つのメッセージと少なくとも1つの受信者(および送信者)が含まれます
- 外部キー:to_user_id、from_user_id、message_id
そこから、スレッドにいくつかのフラグ(to_user_deleted、from_user_deleted)を割り当てるだけで、それに応じて更新されます。
もちろん、どのようなことを説明したいかなど、考慮すべきことがたくさんあります。例:
- 開始メッセージではなく現在のメッセージを表示しますか?
- ユーザーが個々のメッセージを既読としてマークできるようにしますか、それともスレッドだけとしてマークしますか?
データベースを設計する際には、これらすべてを考慮する必要があります。