跟随者和追随者系统的逻辑是什么?

Kaa*_*lıç 5 mysql twitter database-design

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

Qua*_*noi 5

"Follows"(或"后跟")是表反映的两个用户实体之间的关系.

这意味着除非您计划将相同用户之间的多个跟随和取消关注视为单独的条目,否则您甚至不需要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
Run Code Online (Sandbox Code Playgroud)

您也可以添加其他属性.

如果要跟踪相同用户之间的跟随和取消关注,则需要将其提升为实体,添加代理主键:

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
Run Code Online (Sandbox Code Playgroud)


Tom*_*rdt 5

是的,这种设计足以用于简单的跟随系统,例如Twitter.当然,一些额外的数据(例如@Ina建议的时间戳)可能很有用,你并不需要id它.

我推荐的东西如下:

userID INT PRIMARY,
followID INT PRIMARY,
creationTime DATETIME
Run Code Online (Sandbox Code Playgroud)