算了,把需求这里帖出来。这里先100分,等下再开个100分的。
------------------------------------------------------------------功能就象qq的加减朋友。有这么一个user表:
id       name
------------------------------
1       A
2       B
3       C
4       D
.......有这么一个friend表:
user1       user2
--------------------------
A           B
B           A
A           C
C           A
B           C
.......他们可以互相加为好友。
例如:当A加B为好友,那么,B可以 1)拒绝、2)接受、3)接受并且加A为好友。
如果选1,那么他们(指A和B)就不是朋友了;在friend表不增加记录;
如果选2,那么B就是A的好友,而A不是B的好友;当然B还可以再加A为好友;在friend表增加一条记录:user1是A,user2是B;
如果选3,那么B不需要等A验证了,他们就互相是朋友关系了;在friend表增加两条记录:user1是A,user2是B;user1是B,user2是A。。这样的话,如果user表有n个用户,如果他们都互相加为好友,
那么,friend表就有n*(n-1)条记录。
如果user表有10000个用户,那么friend表就有10000*(10000-1)=99990000条记录,这肯定不现实。
所以,请教各位,怎么设计 这种需求的关系 ???
谢谢。

解决方案 »

  1.   

    每个用户一个表是行不通的,如果系统运行时间一长,注册用户一多,数据库里的数据表不是多得不得了,而且对“好友,陌生人,黑名单,待审批的好友申请”的四种状态是单选的,这样的设计也会造成冗余!
    我倒觉得friend表应该包涵〔id   userAId   userBId     relationId〕四个段
    再新建一张 关系的表(relation),friend就引用用户表和关系表!