0

私が作成しようとしているのは、単にユーザーをフォローするのではなく、ユーザーが共有するコンテンツのセクションをフォローするフォロワー/フォロー システムです。人々ではなく、Twitter の「リスト」またはグループをフォローしているかのようです。ただし、これを使用すると、ユーザーが共有しているすべてのものをフォロー/フォロー解除したり、必要なリストをフォロー/フォロー解除したりできます.

例 #1:「すべてフォロー」ボタンをクリックして、ユーザー #1 のリストをフォローしますが、政治に関するリストはフォローしません。今では、1 つのリストを除いて、彼らが共有しているものすべてをフォローしています。私は彼らの信奉者です。

例 #2:「すべてフォロー」ボタンをクリックする代わりに、ユーザー #2 のリストの1 つだけをフォローします。すべてのリストではなく、1 つのリストのみを表示する必要があります。

単純なフォロー/フォロー システムの構造は、user_id => follower_idスキーマを含むテーブルかもしれませんが、それは、フォローしているユーザーによって作成された新しいリストを考慮していません。

質問: これに最適なデータベース スキーマはどれですか?

4

1 に答える 1

2

list_id => follower_id単純化してスケーリングを支援するために、マッピングであるヘルパー テーブルを使用したマッピングと考えます。user_id => follower_id

ヘルパー テーブルが知らせる唯一のことは、ユーザーが新しいリストを作成した場合、作成list_id => follower_idする必要があるマッピングを教えてくれるということです。基本的にフォロワーの設定として機能します。(例: X ユーザーの新しいリストを自動的にフォローする)

フォロワーにフィードを表示するときは、マップを持つテーブルにのみアクセスしますlist_id => follower_iduser_id => follower_idマッピングを調べる必要さえありません。これは、新しいリストが作成されたときにのみ機能します。

ここでの最大の問題は、フォロワーが初めて「全員をフォロー」/「ユーザーをフォロー」と言った場合を処理しなければならないことです。この場合list_id => follower_id、そのユーザーに対して既に存在するリストに基づいて、すべてのマッピングをバックフィルします。(これは、Twitter がフォロー モデルを処理する方法に似ていると思います。誰かをフォローし始めると、X 件のツイートがバックフィルされ、フォローを解除すると、最新のツイートの X 件が削除されます)

次に、ユーザーがリストを除外したい場合は、その特定のリストからそのフォロワーへのマッピングを削除するだけです。user_id => follower_idユーザーが作成した新しいリストをフォロワーに表示する必要があると想定しているため、この場合は のマッピングを残すことができます。

于 2012-05-09T22:16:51.633 に答える