witcheryne 2009-01-03 17:37
浏览 334
已采纳

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

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

例如:

用户表:

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,对这方面有很多问题还不是很清楚)

  • 写回答

3条回答 默认 最新

  • 统一方便面 2009-01-04 09:28
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog