2

Twitter や Instagram などのように、ユーザーが他のユーザーをフォローできるようにしたいと考えています。これには、次のようなテーブル構造を含める必要があると考えています。

ユーザー ID、パスワード、電子メール、fname、lname を持つユーザー

userid1(INT)、followstatus(TINYINT)、usererid2(INT)のフォロワー

user1 が user2 をフォローすることを決定すると、新しい行が作成されます。user1 が user2 をフォローしないことにした場合、後でフォロー状態をオフにすることができます。user2 が user1 をフォローしている場合、別のエントリがあります。

このテーブルへのクエリを使用して、user1 が誰をフォローしているかを知ることができます。また、count クエリを使用して、何人の人がフォローしているかをユーザーに伝えます。次に、この関係を条件として、user2 のアクション (followee) に関する情報を user1 (follower) に出力します。

それはベストプラクティスですか?それとも、それ以上のものがありますか? 必要なフィールドやテーブルは他にありますか?

注:ユーザーには別のテーブルがありますが、必ずしもユーザーではありませんが、フォロワーのステータスは別のテーブルにある必要があると思います。

4

2 に答える 2

4

よさそうですね。ただし、1 つ注意してください。プロジェクトが実際に軌道に乗れば、すぐに 1 台のマシンから抜け出し、シャード化する必要があります。これは、ユーザー テーブルと関係テーブルをより小さなテーブルに分割することを意味します。これは大きなトピックであり、ここでは範囲外です。

それらを壊すと、特定の種類のクエリが困難または不可能になります。

たとえば、「誰が私をフォローしているか」を簡単に照会できるようになりました。

select * from followers where user2 = me;

または「誰をフォローしますか?」

select * from followers where user1 = me;

フォロワー テーブルを壊すと、これらのクエリの 1 つが不可能になります (データが複数のテーブル/データベース/サーバーにまたがる可能性があるため)。これを克服するには、次の 2 つのテーブルを作成することをお勧めします。

i_follow (user1 int, user2 int)
follow_me (user1 int, user2 int)

新しいリレーションごとに対応するレコードを挿入します。

これは氷山の一角にすぎません。この旅に出ると、解決すべき興味深い問題がたくさん見つかります:)

于 2012-04-12T15:01:57.447 に答える
0

あなたは正しい軌道に乗っていると思います。ユーザーを含むテーブルは必須です。2 番目のテーブルは、フォロワーとフォロワーを関連付けるものです。これにより、誰が誰をフォローしているかを確立し、任意の 2 人のユーザーに対して双方向の関係を許可し、クエリを簡単にすることができます。また、重要なことに、重要な情報を 2 回保存することはありません。リレーションシップの削除も、単一の削除クエリで簡単です。

于 2012-04-12T14:59:31.580 に答える