我这里是个比较简单的应用,我想做成IGOOGLE的那种,但是要和用户关联。现在有3个表。user表,tab表(代表IGOOGLE里面用户自己定义的TAB标签),然后是widget表(就是每个标签下的小工具)。user表和tab表是一对多,一个用户拥有多个tab标签是没有问题的。现在大家都知道IGOOGLE的那个应用,是开发好的,然后点应用就是应用上你的这个用户的这个TAB标签里面,那么TAB标签在业务上是一对多widget表的。但是我想直接把widget表做成一个资源表,因为如果不是这样的话会造成一个widget表数据量会很多的情况,相当于比如说:10000个用户平均有7个tab标签,那么等于tab表就有70000个记录,然后widget表又是针对每个标签来一对多的话,那么肯定有几十万个widget.这还只是10000个用户的情况。但是one-to-many在逻辑上是这样的,但是我想的是另外的设计方案。
如果我不把widget表设计成资源表,比如说就是IGOOGLE的应用列表,就最多几万个而已。tab表中有个字段是一个字符串类型的但是用逗号隔开,我相信会hibernate的人都知道,hibernate可以自定义类型很方便的把这样类型映射成一个LIST。这样我一个用户进入系统,点一个TAB标签的时候,就只会查询出来10来过widget而且是从几万个数据中查,应该效率高,但是在展示的时候涉及到循环。而且我拿到的也只是ID而已。我不知道这样的设计是否比较好,我想寻求大家的帮助。
这里还有个问题就是如果不做one-to-many更新的话会比较麻烦,但是都还好。看大家的意见。

解决方案 »

  1.   

    恩我也是这个意思,但是我想了下循环做数据库操作,或是用IN的方式好不好。In你也知道比较麻烦,而且我这个系统估计做更新的少,就是更新我也是更新那个TAB表,这个是我的一个设计,减少冗余的设计方法。我肯定我自己的第2种,在这里是想请教更好的方法。我也在考虑使用key-value数据库,当然我还在研究。呵呵谢谢大哥。
      

  2.   

    大哥不是这个意思,那个字符串用逗号分隔就是widget表的主键ID,这样我查询和更新的操作就是在操作tab表,但是会循环去查询widget表,所以我比较徘徊,希望大哥把上面我的描述看完了给我提点意见。
      

  3.   

    如果分出来那么中间表的数据一样会很多以后,是个乘集的关系。大哥应该知道,我就是想如果能少点最好,毕竟在大数据量下查询速度不行。不过做关联对于我更新更加方便,我会考虑使用中间表的方式。其实关系数据库就是这个点不好,性能总是有很大问题。以后考虑采用KEY-VALUE了。