好友功能 的 数据库应该如何设计?

问题描述:

如题, 好友功能的数据库应该如何设计。。

例如:

用户表:

Table: UserInfo

Column:    id   --主键列,

           name --用户姓名



好友表:  建立UserInfo 与 UserInfo 的一对多关系

Table: Friend

Column:    userid --用户id1, 外键   与 UserInfo 中id关联

           friendid --用户id2 外键  与 UserInfo 中id关联



疑问:

  1. Friend表中是否要将userid和friendid同时表示为主键....

           如果同时设置为主键则在Hibernate中如何创建改关系的实体类?(我在用MyEclipse5.5生成Friend表的实体类时总是反射出两个实体类)

  2. 如果使用如下对象关系来描述 好友关系。那么数据库应该如何设计:

public class UserInfo {
private int id = 0;
private String name = null;
private Set<userinfo> friend = null;
}


    如上面代码描述的关系, 如果一个用户有1w个好友,那么是不是在使用Hibernate中的Session.get()方法来获取改对象时,是不是会把1w个好友数据也存放到了Set中。 如果是这样那么怎样才能解决效率问题. (刚刚接触Hibernate,对这方面有很多问题还不是很清楚)

[quote] 1. Friend表中是否要将userid和friendid同时表示为主键....
如果同时设置为主键则在Hibernate中如何创建改关系的实体类?(我在用MyEclipse5.5生成Friend表的实体类时总是反射出两个实体类)
[/quote]
其实要进行这样的设计,Friend表中采用复合主键是没有必要的,你要维护的表之间的关系比较简单,userid作为外键完全可以维护一对多的关系,所以用复合主键反而增加了难度,如果你硬要这样,hibernate也提供了很好的支持:实现请参考
http://www.blogjava.net/alex/archive/2006/11/09/80231.html

兄弟, 什么工具允许你用1W个好友的? 我觉得有1024个就差不多了。设置一个上限。
另外, 如果这么庞大的的系统, 你觉得会用hibernate来做么。 我不想说hibernate使用的是非。
好友系统的设计最难不是一个人有几个好友的问题, 这个可以通过CACHE来实现的。 最关键的是, 如果有1000W个用户, 每个人都有500个好友, 这5B的数据如何管理的问题。 比如QQ这样的系统。 如何分布式管理这些数据是最大的难题。 如果你能解决这个问题, 那么你离互联网技术大师的距离也不远了:), 当然是夸张了点。 但是确实如此.

1.不用使用复合主键
2.使用二级缓存就不存在效率问题,将UserInfo缓存起来。