关于新浪微薄好友分组设计

yananguo_1985 2011-03-14 02:24:26
最近新浪微薄很流行,对其中的一些数据库设计希望大家可以探讨下。

微薄好友设计:
新浪微薄好友可以创建分组,好友可以属于我设置的几个分组中。

一般我们设计好友都是UserId(用户ID)、FriendId(朋友ID)、CreatedDateTime(创建时间)、
Status(好友之间的状态)、GroupId (分组编号)

表设计一般为:
UserId,FriendId,CreatedDateTime,GroupId,Status,之类的,一般一个好友只属于一个分组中。

但在新浪微薄中好友分组一个好友可以属于几个分组中,即GroupId可能为(2,5,6,7,9),即几个分组组成的字符串表示。

如果这样设计,在查询好友分组的时候就需要拆分GroupId,从而带来一定性能问题。

请教2个问题:

1、关于新浪微薄这样的好友分组mysql中设计问题?如何设计?希望能够给出性能最佳的方式!
2、mysql中由于没有函数返回表,拆分GroupId(2,5,6,7,9),然后和通过拆分的编号和另外一个表进行JOIN的问题,mysql中拆分字符串性能最佳的方式?

以上问题希望高手能够指教。
...全文
685 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2011-03-14
  • 打赏
  • 举报
回复
1、最好将GroupId存为
2
5
6
7
9

2、拆分字符串,用SQL+辅助表方法
示例:
SELECT a.*,
MID(MID(newa,b.id,LENGTH(newa)),2,LOCATE(',',MID(newa,b.id,LENGTH(newa)),2)-2) AS newb
FROM (
SELECT *,CONCAT(',',articles,',') AS newa FROM `test`.tn) a,lsb2 b
WHERE LENGTH(newa)>=b.id
AND MID(newa,b.id,1)=','
AND LENGTH(MID(newa,b.id,LENGTH(newa)))>=2

lsb2:字段ID,内容1-10000,效率不会太高
ACMAIN_CHM 2011-03-14
  • 打赏
  • 举报
回复
标准的范式设计方法是
(UserId,FriendId,CreatedDateTime,....)
'A','B',...
(UserId,FriendId,GroupId)
'A','B',2
'A','B',5
'A','B',6
'A','B',7
'A','B',9


但考虑到一个人添加的好友是有限的,不会几百万,我个人估计平均一个人也就50-200好友,并且分组上所做的查询并不多。因此可以设计为
(UserId,FriendId,CreatedDateTime,....GroupId)
'A','B',.......,'2,5,6,7,9'

至于分组的显示和查询则可以在程序中实现。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧