5

ユーザー向けに PM システムを作成することを計画しています。全体的には簡単に思えますが、PM システムを作成するチュートリアルを見てきたように、問題が 1 つあります。

私がそれを機能させるように計画した方法では、user_from、user_to、そしてメッセージのような行があります-user_fromが送信者になり、送信メッセージでメッセージが表示され、user_toが受信者になり、メッセージが表示されます彼の受信トレイ。しかし、ユーザーが送信済みフォルダーからメッセージを削除したいが、他のユーザーが受信トレイからメッセージを削除したくない場合はどうなりますか??

これを行う簡単な方法はありますか?

また、Gmail や Facebook のようにメッセージを会話に含めることもできますが、それはコーディングが難しいかもしれません (チュートリアルを歓迎します)?

4

8 に答える 8

5

ソフト削除と呼ばれるものを使用します。つまり、レコードが「削除」されると、データベースから実際に削除されることはなく、削除するフラグが設定されます。これにより、必要なときにデータにアクセスしながら、ユーザーインターフェイスからレコードを削除できます。したがって、この状況では、user_to_deleteとuser_from_deleteという2つの列をさらに作成できます。これらのいずれかがtrueに設定されている場合、それぞれのユーザーの受信ボックス/送信ボックスにメッセージを表示しないことがわかります。幸運を。

于 2011-06-13T21:43:45.180 に答える
4

次のデータベース設計をお勧めします。

MESSAGES
+----------+------------------+---------------------------+
|    id    |    subject_id    |    body                   |
+----------+------------------+---------------------------+

SUBJECTS
+----------+-------------+--------------+-----------------+
|    id    |    title    |    author    |    receivers    |
+----------+-------------+--------------+-----------------+

INBOX
+----------+---------------+--------------+---------------+
|    id    |    user_id    |    msg_id    |    read       |
+----------+---------------+--------------+---------------+

OUTBOX
+----------+---------------+------------------------------+
|    id    |    user_id    |    subject_id                |
+----------+---------------+------------------------------+

メッセージを送信するときは、受信ボックス テーブルにすべての受信者用の新しい行を作成し、送信者用に送信ボックス テーブルに新しい行を作成します。メッセージ テーブルに、件名の ID とメッセージ本文を含む 1 つの行を挿入します。サブジェクト テーブルに、タイトル、作成者、およびすべての受信者を含む 1 つの行を挿入します (送信者が新しいサブジェクトを開始した場合、または完全な会話または 1 つのメッセージを転送した場合、それ以外の場合は、既存のサブジェクト ID を使用してメッセージ テーブルにメッセージを追加します)。受信者の 1 人が受信ボックスからメッセージを削除しても、情報は保持されます (この場合、受信ボックス テーブルの行を削除します)。

送信ボックスの場合、「読み取り」フラグは必要ありません。サブジェクト ID のみが使用されることに注意してください。

于 2011-06-13T22:21:47.947 に答える
4

この問題はいくつかの方法で修正できますが、おそらくいくつかのフラグ (from_deleted、to_deleted) をテーブルに追加します。

  • メッセージを削除する代わりに、適切なフラグを 1 に更新します。
  • メッセージを一覧表示するときは、フラグが立てられたメッセージを除外します。
  • フラグを立てた後、両方のフィールドにフラグが立てられた場合、実際に行を削除できるようにスクリプトを設定できます。
于 2011-06-13T21:46:19.767 に答える
2

はい、簡単な方法があります!それぞれsender_deletedとの 2 つの列がありreceiver_deletedます。それらのいずれかがメッセージを「削除」する場合、列を値 1 で更新します。たとえば。メッセージを表示するときは、値が 1 以外であることを確認するメッセージを選択します。

于 2011-06-13T21:45:15.303 に答える
2

もう 1 つの方法は、所有者または受信者がメッセージの削除 (非表示) を要求したかどうかを判断する 2 つの列を追加することです。

owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1          1           2         Sent             Hi         1           0
于 2011-06-13T21:46:07.640 に答える
1

2行を作成し、列を追加するだけです。例:

owner_id | user_from | user_to | mailbox_folder | Message
1          1           2         Sent             Hi
2          1           2         Inbox            Hi

その他の列:一意の行ID、タイムスタンプ、件名など...

メールボックスはowner_id列から構築され、各ユーザーは選択したとおりに移動/削除するための独自のコピーを持っています。

会話を追加するには、列または別のテーブルを追加します。新しいメッセージの場合は、新しい会話IDを取得します。それ以外の場合は、同じIDを使用します。タイムスタンプでクエリします。

于 2011-06-13T21:42:58.473 に答える
1

user_from_deleted および user_to_deleted 行を追加して、削除されていない場合にのみメッセージを表示できます。

会話にメッセージを表示するには、parent_id を追加して、同じ parent_id を持つすべてのメッセージを表示します。

于 2011-06-13T21:44:12.413 に答える
1

PM システムは、1 つのテーブルよりも少し複雑です。複数の人に PM を送信した場合はどうなりますか? この場合、複数のテーブルが必要になります。ユーザー、メッセージなどに 1 つ...主キーと外部キーを使用してそれらをリンクします。

リレーショナル データベースを検索してみてください。これで始められるはずです: http://www.databasejournal.com/sqletc/article.php/1469521/Introduction-to-Relational-Databases.htm

于 2011-06-13T21:44:20.960 に答える