求助微博关注用户表的设计

WBOY
풀어 주다: 2016-06-23 14:23:51
원래의
1165명이 탐색했습니다.

本帖最后由 anydy2008 于 2013-10-11 10:43:13 编辑



查询需求如下:
1.查询关注了哪些用户。
2.查询被哪些用户关注了。
3.查询和某个用户共同的关注列表。
4.查询是否互相关注。

用一个表,以 user_id   follow_user_id   add_time列的形式可以实现上述功能。
可是关注量比较大,需要按用户 id来分表。不知道怎样设计表结构好。

求助友友们,请多多给建议。 谢谢

回复讨论(解决方案)

以 用户id 来分区

用户ID吧,每个表之间都用用户id

以 用户id 来分区

版主 我是想用用用户id来分表,可是分表后上面的功能就不好实现了。比如我要查 哪些用户关注了我,分表后;我不确定要查哪个表。只有将所有分表都查一次才可以知道。

单独保存一个关注表
或者把关注你的用户也存到用户表里可行不?

正因为分表后不确定要查哪个表,所以不能分表而是分区
分区后的表对你而言依然是一个整表(虽然被分成了多个文件),实际查询的是那个文件由mysql决定而不是你决定

如果你依然想自己分表,那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表


以 用户id 来分区

版主 我是想用用用户id来分表,可是分表后上面的功能就不好实现了。比如我要查 哪些用户关注了我,分表后;我不确定要查哪个表。只有将所有分表都查一次才可以知道。
不要分表呀,直接写sql语句就可以了

1.查询关注了哪些用户:select `follow_user_id` from `表` where `user_id`='你的id'
2.查询被哪些用户关注了:select `user_id` from `表` where `follow_user_id`='你的id'
3.查询和某个用户共同的关注列表。select * from `表` where `user_id` in ('你的id', '某个用户id')
4.查询是否互相关注:select * from `表` where `user_id`='你的id' and `follow_user_id`='某个用户id' `user_id` in (select `follow_user_id` from `表` where `user_id`='某个用户id')

当然估计还有更优秀的写法,特别是第4条

select * from `表` where `user_id`='你的id' and `follow_user_id`='某个用户id' and `user_id` in (select `follow_user_id` from `表` where `user_id`='某个用户id')
로그인 후 복사
第4条少了一个and,重新写一下

正因为分表后不确定要查哪个表,所以不能分表而是分区
分区后的表对你而言依然是一个整表(虽然被分成了多个文件),实际查询的是那个文件由mysql决定而不是你决定

如果你依然想自己分表,那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表

谢谢回答 我会参考一下的

正因为分表后不确定要查哪个表,所以不能分表而是分区
分区后的表对你而言依然是一个整表(虽然被分成了多个文件),实际查询的是那个文件由mysql决定而不是你决定

如果你依然想自己分表,那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表

版主 分区是什么概念呢。吾只懂电脑分区阿

还有这句话可以详细说一下吗

”那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表“

谢谢啦!

关于表分区可参见 http://www.baidu.com/s?ie=utf-8&bs=mysql%E5%88%86%E5%8C%BA%E8%A1%A8&f=8&rsv_bp=1&wd=mysql%E5%88%86%E5%8C%BA&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=26&inputT=796

关注可以是单向的,比如这个

user_id follow_user_id1       21       31       4
로그인 후 복사
로그인 후 복사

按 user_id 分表后,你整检查所有的表才能得到与 follow_user_id 相连的 user_id
所以你需要另有一组以 follow_user_id 分组的表
follow_user_id user_id 2              13              14              1
로그인 후 복사
로그인 후 복사

关于表分区可参见 http://www.baidu.com/s?ie=utf-8&bs=mysql%E5%88%86%E5%8C%BA%E8%A1%A8&f=8&rsv_bp=1&wd=mysql%E5%88%86%E5%8C%BA&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=26&inputT=796

关注可以是单向的,比如这个

user_id follow_user_id1       21       31       4
로그인 후 복사
로그인 후 복사

按 user_id 分表后,你整检查所有的表才能得到与 follow_user_id 相连的 user_id
所以你需要另有一组以 follow_user_id 分组的表
follow_user_id user_id 2              13              14              1
로그인 후 복사
로그인 후 복사


版主  
"follow_user_id 分组的表" 也是要分表的吧
那这个方案可以支持查,哪些人关注了我吗。
比如我的用户id是1    按follow_user_id 尾数进行分表。


follow_user_tbl_1

follow_user_id user_id 
1               1
11              1
21              1

follow_user_tbl_2

follow_user_id user_id 
2               1
12              1
22              1

如果 user_id follow_user_id 表示 user_id 被 follow_user_id 关注
那么 follow_user_id user_id 表示 follow_user_id 关注了 user_id

你把主体确定了,事情就清楚了

单独保存一个关注表
或者把关注你的用户也存到用户表里可行不?

单独保存一个关注表不大可行   因为数据量太大啦 

关注我的用户存到用户表不合理  

如果 user_id follow_user_id 表示 user_id 被 follow_user_id 关注
那么 follow_user_id user_id 表示 follow_user_id 关注了 user_id

你把主体确定了,事情就清楚了

版主  吾听了你的,开始明白你的想法啦。 谢谢了。要分表可能只有这样啦

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿