2012-04-23 93 views
5

我对一些项目感兴趣,并且正在考虑追随者和跟随系统像twitter.I有成员表在数据库。我怎么能做追随者系统。什么是逻辑?我工作关于这样的事情:我创建了新的表名称在下面,我有3行。这些行是id,user_id,follower_id。对我来说足够了吗?我不知道如何做这个系统?你可以帮我吗?追随者和追随者系统的逻辑是什么?

+1

这似乎是一个完全可以接受的设计。您可以通过在'user_id'中搜索该用户并通过在'follower_id'中搜索该用户来查找用户关注的用户,从而找到用户的关注者。您可能希望包含一些额外的元数据,例如时间戳,以便知道关系上次更新的时间。您也可能希望跟踪关系何时开始或结束,具体取决于您的用例。 – Ina 2012-04-23 19:18:38

+0

_“我创建了新的表,名称是下面,我有3行”_ - 你的意思是“3 **列**”? – 2012-04-23 21:01:52

回答

5

是,设计是足够简单的下列系统如Twitter的。当然,一些额外的数据(例如@Ina建议的时间戳)可能会很有用,并且您并不需要其中的id

我建议是这样的:

userID INT PRIMARY, 
followID INT PRIMARY, 
creationTime DATETIME 
0

假设您只有一个实体People,您需要创建一个从PeoplePeople的多对多关系。在您的关联表中,您将有两列,分别为PeopleIDFollowing

要找到用户的关注者,请在Following列中搜索该用户的ID。 要列出用户关注的是谁,请在PeopleID列中进行搜索。

5

“跟随”(或“随后是”)是您的表反映的两个用户实体之间的关系。

这意味着,除非您计划将多个跟随和取消跟进作为单独的条目处理相同的用户,否则您甚至不需要id

充分利用user_idfollower_id参考userFOREIGN 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 

您也可加入其他属性也是如此。

如果你想跟踪遵循和相同的用户之间unfollows那么你需要推广到实体此,增加了代理主键:

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 
0

假设你已经有了,用户登录一个网站,你会想要一个表添加到您的数据库中有两列,无论是“朋友1”和“朋友2“(假设友谊是双向关系)或”领导者“和”追随者“(针对订阅的单向关系)。然后,您需要一个简短的PHP脚本,它将friend1和friend2作为输入(例如,作为POST或GET变量),并将该对输入到数据库中。最后,在你的网站上添加一个按钮,或者对该PHP脚本进行AJAX调用,或者是目标是该PHP脚本的HTML表单的一部分。