我想允许用户像Twitter,Instagram等一样关注其他用户。我认为这应该包括以下表格结构:
拥有用户ID,密码,电子邮件,fname,lname
的用户使用userid1(INT),followstatus(TINYINT),usererid2(INT)的追随者
当user1决定关注user2时,会创建新行。如果user1决定不再关注user2,则可以关闭后续关注状态。如果user2跟随用户1,则会有一个单独的条目
我可以通过对此表的查询告诉user1他正在关注的人。并通过计数查询告诉用户有多少人关注他们。然后以这种关系为条件,将user2s操作(followee)的信息打印到user1(follower)。
这是最佳做法吗?或者还有更多......还有其他领域,需要桌子吗?
注意:用户有另一个人员表,不一定是用户,但我认为关注者状态应该在单独的表中。
答案 0 :(得分: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)
并在每个新关系上插入相应的记录。
这只是冰山一角。踏上这段旅程,你会发现许多有趣的问题需要解决:)
答案 1 :(得分:0)
我认为你走在正确的轨道上。包含用户的表是必须的。第二个表是跟随者与被跟随者的关系。这将让您确定谁跟随谁,允许任何2个用户双向关系,并使查询简单。此外,重要的是,您不会存储两次重要信息。使用单个删除查询,删除关系也很容易。