2

我想让用户像 Twitter、Instagram 等一样关注其他用户。我认为这应该包括如下表结构:

具有用户 ID、密码、电子邮件、fname、lname 的用户

具有 userid1(INT)、followstatus(TINYINT)、usererid2 (INT) 的追随者

当 user1 决定关注 user2 时,将创建新行。如果 user1 决定不再关注 user2,则可以关闭以后的关注状态。如果 user2 跟随 user 1,将有一个单独的条目

我可以通过对该表的查询告诉 user1 他正在关注谁。并通过计数查询告诉用户有多少人关注他们。然后以这种关系为条件,将有关 user2s 操作(followee)的信息打印到 user1(follower)。

这是最佳做法吗?或者还有更多……是否需要其他字段、表格?

注意:用户有另一个人表,不一定是用户,但我认为关注者状态应该在单独的表中。

4

2 回答 2

4

这看起来不错。不过需要注意的是:如果您的项目真正起飞,您很快就会脱离单台机器并且必须进行分片。这意味着将您的用户表和关系表分解成更小的表。这是一个很大的话题,超出了这里的范围。

一旦你打破了它们,某种类型的查询就会变得困难或不可能。

例如,现在查询“谁关注我”很简单。

select * from followers where user2 = me;

或“我该跟随谁?”

select * from followers where user1 = me;

一旦您破坏了关注者表,这些查询之一将是不可能的(因为数据可能跨越多个表/数据库/服务器)。为了克服这个问题,您可能需要创建两个表:

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

并在每个新关系上插入相应的记录。

这只是冰山一角。踏上这段旅程,你会发现许多有趣的问题需要解决:)

于 2012-04-12T15:01:57.447 回答
0

我认为你在正确的轨道上。包含用户的表是必须的。第二个表是将追随者与被追随者相关联。这将让您确定谁关注谁,允许任何 2 个用户的双向关系,并使查询变得简单。此外,重要的是,您不会将任何重要信息存储两次。使用单个删除查询也可以轻松删除关系。

于 2012-04-12T14:59:31.580 回答