【问题标题】:What is the logic of Following and Followers Systems?追随者系统的逻辑是什么?
【发布时间】:2018-08-28 11:42:27
【问题描述】:

我正在做一些项目,我正在考虑像 twitter 这样的追随者和追随系统。我在数据库上有成员表。我怎么能做追随者系统。逻辑是什么?我做过类似的事情:我创建名称如下的新表,我有 3 行。这些行是 id、user_id、follower_id。这对我来说足够了吗?我不知道如何做这个系统?你能帮帮我吗?

【问题讨论】:

  • 这似乎是一个完全可以接受的设计。您可以通过在“user_id”中搜索该用户来找到该用户的关注者,并通过在“follower_id”中搜索该用户来查找该用户关注的人。您可能希望包含一些额外的元数据,例如时间戳,以便您知道上次更新关系的时间。您可能还希望跟踪关系何时开始或结束,具体取决于您的用例。
  • “我创建了名称如下的新表,并且我有 3 行” - 你的意思是“3 ”?

标签: mysql database-design twitter


【解决方案1】:

是的,这种设计对于 Twitter 等简单的关注系统来说已经足够了。当然,一些额外的数据(例如@Ina 建议的时间戳)可能很有用,您并不严格需要其中的id

我会推荐类似的东西:

userID INT PRIMARY,
followID INT PRIMARY,
creationTime DATETIME

【讨论】:

    【解决方案2】:

    “关注”(或“被关注”)是您的表格反映的两个用户实体之间的关系。

    这意味着除非您打算将同一用户之间的多次关注和取消关注视为单独的条目,否则您甚至不需要id

    使用FOREIGN KEYuser_idfollower_id 引用user 设为复合主键并在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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        要查找用户的关注者,请在 Following 列中搜索该用户的 ID。 要列出用户正在关注的人,请在 PeopleID 列中搜索。

        【讨论】:

          猜你喜欢
          • 2021-06-13
          • 1970-01-01
          • 2019-07-03
          • 2017-12-08
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 2020-09-10
          相关资源
          最近更新 更多