あるプロジェクトで目覚めているのですが、フォロワーとツイッターのようなフォローシステムについて考えています。データベースにメンバーテーブルがあります。フォロワーシステムを作成するにはどうすればよいですか。ロジックは何ですか。次のような作業を行いました。新しいテーブルを作成しました。名前は次のとおりで、3つの行があります。これらの行はid、user_id、follower_idです。それで十分ですか?このシステムをどのように実行できるかわかりませんか?手伝って頂けますか?
4 に答える
「フォロー」(または「フォロー」)は、テーブルが反映する2つのユーザーエンティティ間の関係です。
これは、同じユーザー間で複数のフォローとフォロー解除を別々のエントリとして扱うことを計画していない限り、を必要としないことを意味しますid
。
とをuser_id
でfollower_id
参照user
し、FOREIGN KEY
それらを両方とも複合主キーにし、インデックスを作成しますfollower_id
(ユーザーのリストをすばやく取得するには):
CREATE TABLE
follows
(
user_id INT NOT NULL REFERENCES user (id),
follower_id INT NOT NULL REFERENCES user (id),
PRIMARY KEY
(user_id, follower_id)
KEY follower_id (follower_id)
)
ENGINE=InnoDB -- if you want the foreign keys to work
他の属性を追加することもできます。
同じユーザー間のフォローとフォロー解除を追跡する場合は、これをエンティティに昇格させ、代理の主キーを追加する必要があります。
CREATE TABLE
follows
(
id INT NOT NULL PRIMARY KEY,
user_id INT NOT NULL REFERENCES user (id),
follower_id INT NOT NULL REFERENCES user (id),
-- These are additional attributes
follows_from DATETIME NOT NULL,
follows_till DATETIME,
--
KEY follower_id (follower_id),
KEY user_id (user_id)
)
ENGINE=InnoDB -- if you want the foreign keys to work
はい、そのデザインは、Twitterのような単純なフォローシステムには十分です。もちろん、いくつかの追加データ(@Inaによって提案されたタイムスタンプなど)が役立つ可能性があり、厳密にはそのid
中には必要ありません。
私は次のようなものをお勧めします:
userID INT PRIMARY,
followID INT PRIMARY,
creationTime DATETIME
ユーザーがログインするサイトが既にあると仮定すると、'friend1' と 'friend2' (友情が双方向の関係であると仮定) または 'leader' と 'follower' のいずれかの 2 つの列を持つテーブルをデータベースに追加する必要があります。 (サブスクリプションの一方向の関係の場合)。次に、friend1 と friend2 を入力として (たとえば、POST または GET 変数として) 受け取り、そのペアをデータベースに入力する短い PHP スクリプトが必要になります。最後に、その PHP スクリプトに対して AJAX 呼び出しを行うボタン、またはその PHP スクリプトをターゲットとする HTML フォームの一部であるボタンを Web サイトに追加します。
のエンティティが 1 つあると仮定すると、からへPeople
の多対多の関係を作成する必要があります。関連テーブルには、 と の 2 つの列があります。 People
People
PeopleID
Following
ユーザーのフォロワーを見つけるには、列でそのユーザーの ID を検索しFollowing
ます。ユーザーがフォローしているユーザーを一覧表示するには、列を検索しPeopleID
ます。