首先有个角色表,  里面有一个唯一的角色ID字段.
现在每一个角色,可以有其他角色作为他的好友.  两个角色之间一定是相互好友,不存在单方面好友.(假设好友上限150)怎么设计好友表最合理?

解决方案 »

  1.   

    角色表
    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
      

  2.   

    好友表,一般就是两个字段
    id1  id2但存储数据往往有两个策略
    1、一对好友只存放一条数据,在程序比较两个id大小,小的放id1,大的放id2,查询好友需要联合id1 = @id和id2 = @id的结果。
    2、一对好友存放两条数据,查询时之需要查询id1 = @id优缺点可能你自己分析下就会得出
    1数据量小,写入快,查询复杂,修改删除简单
    2数据量大,写入慢,查询简单,修改删除复杂
      

  3.   

    角色表(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)
      

  4.   

    建立一个好用表
    CREATE TABLE #temp
    (
        id int  IDENTITY(1,1),
        aid int,
        bid int
    )
    id为标识种子
    aid为邀请人id
    bid为被邀请人id
    楼主在查找时.
    select * from #temp where aid=1 or bid=1
    这样就可以确认好友人数或是信息了.
    自己的一点想法.希望对你有帮助
      

  5.   

    那如果加一个分组字段,里面的分组属于哪个id1还是id2呢?