to:jxdn_yang(比利) 这样肯定不行的,只是简单的构造用户表肯定不行,这样如何表示某个user下的所有friends,而且要对这些frindes分组(有组名,如家庭,同学等),还有就是所有的frinds都有类型信息(是客户,准客户,线索等),一个friend在不同的user下的类型和所属的组都是不同的。也就是说分组信息和好友类型信息都是针对不同的user的。我觉得这个设计就因该和QQ下的好友结构差不多,大家有没有想过QQ下的表是怎样设计的。每个登陆的qq维护者它的好友,可以创建分组,可以把好友移动到某个组下,这里多了一个好友的类型信息。因此如果好友比较多,怎么样设计表才能使效率最好!!

解决方案 »

  1.   

    撇开系统功能表不谈,就看用户功能实现这块应该有几个表:1、这个系统的核心显然是用户基础信息表,这个表包括注册用户的“个人信息”,主键ID编号。
    2、用户好友信息表。这个表包括“所有用户的所有cantact”信息表。这个表听起来很夸张,但是必须的。也就是说每个用户的每个contact对应一条记录,以该用户的ID和该条记录的好友ID为联合主键,外加个组别记录,足以。不然你的数据库连1NF都不满足。而根据你的项目要求,最起码要满足BCNF。至于效率的提高,完全在于这张表索引的建立好坏。
    例:13456 23124 4。这条记录表示ID为13456的用户有一个ID为23124的好友。在13456的好友名单中组别为4。有了这两个表,其他的操作就完全可以通过查询和视图来完成了
      

  2.   

    但是不同的用户分组信息不同的,也就是说还要至少建立一个以userID和user_GroupID为联合主健的表用以记录每个不同用户的分组信息,不是吗?
    -------------------还有个问题就说如果我要实现动态的用户属性的增减,怎么设计表,也就是说用户的属性(生日,住址,年龄..等等)是可变的,而不是在用户基本信息表上定死的就是那么几个字段,可以增加一个表,包括用户ID,属性ID,属性值,来实现,但这里有一个问题就是如何处理这些不同类型的字段(像生日为日期型,年龄为int型,住址为string)?
      

  3.   

    还有个问题一直没解决好,就是如何保存用户和每个contact之间的通讯记录?这个记录应该放置在那个表里,请大家想想啊
      

  4.   

    应该专门用一张表来保存用户同他的contact的通讯记录。
    用户ID和contact ID以及通讯时间构成主键
      

  5.   

    没有设预见过这种业务需求。想听听大家的意见,怎么样设计表才能适合业务的需求?
    To:sxbxy(sxbxy) 我觉得业务介绍的已经差不多了,只是听起来简单,做起来比较麻烦