私は1対1のメッセージとチャットルームの両方を人のグループに許可する非常に簡単なチャットアプリを構築しています。私は、すべてのチャットメッセージを保存するために1つのメッセージテーブルを用意し、各メッセージも送信者IDと受信者IDを保持する予定です。チャットルームで送信されたメッセージの場合は、チャットルームのIDも保持します。以下の表である:私は、ユーザー321だ、と私は、ユーザ123と私の会話を取得したい場合は、MySQL DBにチャットメッセージを保存する、スキームデザイン
Message Table
ID Message Sender Receiver Chatroom Timestamp
1 Hello, David 123 321 1495330074
2 Hi, Linda 321 123 1495930032
3 Hi everyone! 456 999 1495930132
4 What up? 321 123 1495930192
...
、私はこのデザインの1つの問題がありSELECT * FROM Message WHERE Sender=123 or Receiver=123 or Sender=321 or Receiver=321 and Chatroom IS NULL
に必要 - ユーザーを彼がもう見たくないメッセージを削除することはできません。それを解決するために
、私は以下のように、私は、ユーザーが受信または送信されたものをメッセージ保存するために別のテーブルを持つことができると思う:
User Message Table
ID UserID MessageID
1 123 1
2 321 1
3 321 4
...
それは少し冗長に見えますが、このようダビデは、メッセージを削除することができますリンダとの彼の会話では、リンダはまだ完全な会話の歴史を見ることができます。
テーブルのデザインが改善されていますか?そして、すべてのチャットメッセージを1つの巨大なテーブルに投げるのはこの良い習慣ですか?クエリを高速化するためにインデックスを追加する必要がありますか?
を取得し、メッセージ から削除します。このフォーラムで「チャット」を検索して他の人が何をしているかを確認してください。 –