微博系统中的“关注”和”被关注“需要分两个表吗?

我研究了一下,记事狗微博开源系统,发现他分为两个表。

一个是粉丝表,一个是关注表。

比如粉丝表 a关注了b,关注了c。数据是这样的

uid touid
a b
a c

关注表的数据,也是一模一样。

我搞不懂为啥分成两个表,而且两个表的数据结构都差不多,这样不会造成数据冗余吗?要说速度上的快,每个表都是2条数据,不少不多。看不懂哪里提高了速度。

阅读 7.2k
6 个回答

@vayn ,一张表足矣。关注和被关注都是同一种相对关系,只是对象不同而已,一张表上就能表示。

uid touid
a b
a c
b c
c a

获取c的关注 SELECT touid FROM follow WHERE uid = 'c'
获取c的粉丝 SELECT uid FROM follow WHERE touid = 'c'

另外,随便吐槽几句,切勿当真。一、优化早死的快;二、记事狗的程序也没写到那种让人膜拜的程度,不看也罢。

你的想法是对的,没必要分两个表

是的。

一个Follower。一个Following

分两张表是为了当数据量大了之后,需要进行分表

分成两个表的话,数据应该是一模一样的,因为关注这个东西算是二元非对称关系,这样就造成数据冗余了。速度上面如果两个字段都建上索引不会太差。

新手上路,请多包涵

不需要吧,可以用一个字段标示

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进