1

のようなテーブルがありますfriends(friendship_id, fid1, fid2, ENUM('pending', 'accepted', 'ignored')。ユーザーが誰かの友達リクエストを無視したときに、「あなたは無視されました!」というメッセージが表示されないようにしたいのですが、そのデータもログに記録したいと考えています。これにアプローチする方法について何か提案はありますか?

4

4 に答える 4

4

明らかに、最初にすべきことは、You've been ignored!メッセージを表示するコードを実装しないことです。これで問題のほとんどが解決します。

しかし、少し注意が必要です。さらに微妙な問題があります。送信者の観点からは、ユーザーが [無視] をクリックしていないかのように、システムがあらゆる点で動作する必要があります。つまり、送信者が 2 番目の要求を発行し、通常はシステムが「このユーザーに要求を送信済みです」と言う場合、受信者が最初の要求を無視した後でも、このメッセージを表示し続ける必要があります。非公開のはずのイベントに応答してメッセージを変更し、情報が漏洩しないように注意する必要があります。


コメントへの対応:

そもそも「あなたはすでにこのユーザーにリクエストを送信しています」というメッセージさえ送信しないのが最善だと思いますか?

これはこの質問の範囲外であり、それ自体が長い議論になると思うので、ここでは触れます。答えは、アプリケーションの実装方法によって異なります。簡単に言えば、アプリケーションはユーザーを助け、直感的であるべきです。そのため、メッセージがユーザーを助ける場合は、それを追加してください。

別の方法として、応答がない場合、1 週間後に要求が自動的に期限切れになるようにすることもできます。現在のリクエストの有効期限が切れたら、ユーザーが新しいリクエストを作成できるようにします。リクエストを無視するということは、そのユーザーからの 1 つのリクエストだけを無視することを意味するのか、それともすべてのリクエストを無視することを意味するのかを検討することをお勧めします。

私の現在のスキーマで誰が誰を無視しているのかをどのように区別するかについては、あまり考えていません。

フレンド申請は有向関係です。送信者と受信者がいます。一方、友情は通常(常にではありませんが)方向性のない関係と見なされます。友情のリクエストには通常、「ねえ、私を覚えていますか? 昨夜バーで会いました!」というメッセージが関連付けられています。一方、確立された友情には、通常、それに関連するメッセージはありません。したがって、これらのさまざまなタイプのリレーションシップをデータベース内のさまざまなテーブルに格納することは理にかなっています。

于 2010-07-16T20:29:10.783 に答える
1

私は最近、私が書いているアプリケーションでこれを実装しました。データベースには実際に 2 つの行がありました。私の列は sourceUserId と destUserId でした。誰か (人 A) が別の人 (人 B) に要求を送信すると、A の UserId を sourceUserId として、B の UserId を destUserId として含む行が自動的に挿入されます。再度送信すると、行が既に存在することがわかります。B に A を承認させるには、B の UserId を sourceUserId として挿入し、A の UserId を destUserId として挿入します。

私のアプリケーションには通知テーブルもあったため、誰かが他のユーザーを追加するたびに (つまり、A の UserId=sourceUserId と B の UserId=destUserId の行が正常に挿入される)、通知が宛先に送信されます。

2 人が友達かどうかを確認するには、単純に逆数行が存在するかどうかを確認します。

于 2010-07-16T20:35:12.097 に答える
1

誰が誰を無視したかをどのように区別していますか? 一方の友人が他方を無視すると、それはENUM「無視」に変更され、無視された友人も無視する友人になると思います。あなたも彼らを無視しているように見えるので、誰があなたを無視したかを知ることができます.

ignore(ignorer, ignoree)のように、列が単なるフレンド ID である中間テーブルを配置することをお勧めします。そうすれば、更新などのメッセージが 1 人の友人に送信されるたびに、アプリは最初に、送信先の友人が送信元の友人を無視しているかどうかを確認します。

于 2010-07-16T20:31:56.663 に答える
0

例: ユーザー A がユーザー B に友達リクエストを送信し、ユーザー B がこのリクエストを無視した: ユーザー A は、自分のリクエストが無視されたことを知りません。ユーザー A にとって、この要求ステータスは「保留中」と見なされます。

同じ 2 人のユーザーの場合: ユーザー B がユーザー A の要求を無視したとしても、ユーザー B がユーザー A と友達になろうとすることができないとは限りません。そのようなアクションは、ユーザー A の要求の以前の「無視」をクリアする必要があります (起こりました)。

したがって、テーブル スキーマは問題ありません。考えられるすべてのシナリオの言語とロジックについて考える必要があります。

于 2010-07-16T21:46:51.453 に答える