社交网站的核心就是人,接着通过人与人之间的关系开展一系列活动,昨天终于静下心,打开PowerDesigner画了几个Table在画布上,如下所示:【SysUser】用户表:最重要的两个信息----邮箱和密码,其次是昵称。
【SysFriendShip】朋友关系:我想人与人这间关系自然是“多对多”的关系,即张三可以是李四、王五的朋友,而李四又可能是赵六、周七的朋友,故以表SysUser的主键UserIdentifier(nchar(10))作为联合主键,字段在表现形式上分别更改为:FriendShipRequestID(好友发起人)、FriendShipAcceptID(好友接受人),与后面字段FriendCategoryID(朋友分组)连起来所表达的意思便是:某发起人向接受人提出了好友申请,并预先将其纳入到自己的某个朋友分组中,比如"随便聊聊"分组;那么反过来,当接受人接纳了发起人的请求,欲把发起人纳入某个分组时,该如何表达出这个关系呢?为此当接受人接收请求后,将重新新增一条记录,而不仅仅是把字段IsPassed更改为1,即接受人此时成了发起人对应字段FriendShipRequestID,而当初的发起人对应字段FriendShipAcceptID,这样就可以记录下接受人自己选择的FriendCategoryID(朋友分组),显然IsPassed直接就是1。
【SysFriendCategory】朋友分组:各人维护自己的分组,由SysUser(用户)进行外键约束即可。我只是个小小的C#程序员,很想听听数据库设计达人们是如何思考这个问题的。

解决方案 »

  1.   

    表SysFriendShip在“申请好友”的过程中,流程如下:
    一.张三向李四申请好友:
    发起人     接受人    朋友分组    是否通过
     张三       李四     2(随便聊聊)   0(未通过,等待确认)二.李四登录后作出应答,如果李四表示【同意】,该过程是事务原子性
    1.更新第一步中那条记录,把 IsPass字段由0更新为1,即
     张三       李四     2(随便聊聊)   1(已通过确认)2.新增一条记录
     李四       张三     8(IT朋友圈)   1(已通过确认)
      

  2.   

    现在微博里有这么一种情况,一个人可以分在好几个不同的组里,既是“随便聊聊”又是“等待进一步发生”
    ---
    我想应该这么设计关系表(用户A,用户B,AB关系【A关注B、B关注A、互相关注】)
    分组表(用户,用户组别)【比如:用户A 随便聊聊,用户A 等待进一步发生】
    组别人员表(组别,用户)【比如 等待进一步发生 B,等待进一步发生 c】
    表达不是太好,不知道大家有没有明白
      

  3.   


    省略了ID,为了直接表达一下意思,实际中肯定得加组别ID的
      

  4.   

    暂时来说(这个“暂时,可能对于你就是二十个月,所以至少十八个月之内都不用考虑重构),好友组只要用个名称就够了,用不到单独做一个对象(类)来考虑。所以用户好友(加入说是数据表设计的话)可能是这样的:      用户好友(用户ID,好友组名称,好友ID)第一个字段作为外键与用户表关联。最后一个字段实际上也跟用户表关联。