网站“关注”功能如何实现?


比如知乎、segmentfault等网站的关注功能,点击关注按钮后,有关这个问题的后续答案会通知给你,当你下次打开页面的时候,会有数字提示你关注的内人有更新,这个功能是如何实现的呢?

网站设计 网站开发 网站架构

lgclan 10 years, 4 months ago

问题表 里面设一个关注人的字段,里面可以用json_encode或者serialize保存关注人的用户ID。有人回答了该问题,程序就读取关注人字段,根据每一个用户ID插入一条消息通知记录到 消息表 ,这样就能通过查询 消息表 提醒关注用户问题有更新。不过这样做的话,如果关注的人很多,一旦问题有更新,那么要插入 消息表 的记录就很多,不知道还有什么更好的实现方法。

流萤与月光 answered 10 years, 4 months ago

这个是数据库方面的设计,比如问题表(question)中的字段有:id(编号), title(问题名称), content(问题内容), tips(关键词), follower(关注者)等等。follower字段中的数据存储,可以是各种的格式,只要把每个用户的userid隔开就行,比如这样存储: 1,3,5,8,12 ,表示userid为1, 3, 5, 8, 12的用户有在关注这个问题,若用户取消关注时,再把这个userid去掉;好像这样存储不是很好删哈,那换成这样存储呢: [1, 2, 3, 4] ,把数据当做一个数组进行存储。

还有回答列表(answer),这个列表中的外键是问题表中的id。

还有用户表(user),每个用户有一个 notice 的字段,这个字段可以是个int类型的,默认是0,当有一个通知时就+1。

当问题的描述发生了更新,或者有人回答了这个问题,那么查询问题表(question)的follower字段中所有的用户id,查出后,再按照用户id更新用户表(user)中的notice字段。下次当用户登录时,就查询这个 notice 字段是否为0,若为0表示没有通知,否则就显示通知的个数。

当然,实际中的数据库设计肯定更加的复杂,我这儿只是简单的说下原理而已。

阿道夫·希特勒 answered 10 years, 4 months ago

首先,可以了解下关系型数据库。

Itsuko answered 10 years, 4 months ago

问题表,用户表,问题用户关系表 关联一下就是了

可怕的仙贝 answered 10 years, 4 months ago

这个问题太大,但有一点可以告诉你,你看到的信息都是冗余后的非一致性信息。换句话说,这些信息是源信息的副本。

混乱中XX answered 10 years, 4 months ago

Your Answer