日期:2014-05-17  浏览次数:20391 次

求个好思路,关于好友表的设计
首先有个角色表,  里面有一个唯一的角色ID字段.


现在每一个角色,可以有其他角色作为他的好友.  两个角色之间一定是相互好友,不存在单方面好友.(假设好友上限150)

怎么设计好友表最合理?
------解决方案--------------------
角色表
id name memo
1  1    1
2  2    2
...

关系表
id1 id2
1   2
3   4

至于:假设好友上限150,这个需要使用程序控制.

查询:
select t.id , t1.name , t2.name
from 角色表 t
left join 关系表 t1 on t.id = t1.id1
left join 关系表 t2 on t.id = t2.id2



------解决方案--------------------
好友表,一般就是两个字段
id1  id2

但存储数据往往有两个策略
1、一对好友只存放一条数据,在程序比较两个id大小,小的放id1,大的放id2,查询好友需要联合id1 = @id和id2 = @id的结果。
2、一对好友存放两条数据,查询时之需要查询id1 = @id

优缺点可能你自己分析下就会得出
1数据量小,写入快,查询复杂,修改删除简单
2数据量大,写入慢,查询简单,修改删除复杂



------解决方案--------------------
角色表(FutRole)
名称 英文名 类型 空 描述
角色ID RoleID Varchar(10) 
角色名 RoleName Varchar(10)
操作员ID UserID Varchar(10)
描述 Description Varchar(255)


角色功能表(FutRoleFunction)
名称 类型 空 描述
自增段 ID Int 主键
角色ID RoleID Varchar(10)  外键
功能ID FunctionID Varchar(128)  外键
描述 Description Varchar(255)


用户角色对应表 (FutUserRole)
名称 英文名 类型 空 描述
自增段 ID Int 主键
用户ID UserID Int  外键
角色ID RoleID int
描述 Description Varchar(255)