应该设计成一个表,还是11个表,高手指点思路,谢谢!

05-12-23 wilson751
数据库是oracle8i,表test包含了20个字段,其中,有10个字段需要限定范围,例如:“用户类型”字段,只能是“超级用户”,“普通用户”,“管理人员”中的一个。此表查询和更新很频繁,对性能有一定要求。

我只知道,有两种办法,
1.在这10个字段上都设置check约束。
2.每个字段独立出来,另建10个表,使用外键约束,查询或更新时,做多表连接。

和表test相对应的是一个jsp页面,页面的form中,有10个下拉列表框。这10个下拉列表框中的值,保存在数据库中。如果请求此页面时,再从数据库中取数据,性能很差。我想当server启动时,就将数据从DB中取出来。

这时,遇到一个问题,例如:jsp页面有一个“用户类型”的下拉列表,它的值需要从DB中取出来。如果将所有20个字段集中在一个表中,只建一个表。我们知道,从数据库中取出的数据,一般都要包装到一个对象中。这时,取出的“用户类型”的值,包装到哪个对象中呢?

应该设计成一个表,还是11个表呢?

谢谢先!

banq
2005-12-27 09:50
>应该设计成一个表,还是11个表呢?
我的意见这些都是不重要,都可以,关键你应该从业务对象开始设计,通过对象缓存来提高性能,一般类型都是一个域对象的字段,而域对象一般都是可以被缓存的,因此类型字段和真实对象会被缓存。

至于如何存储,通过hibernate或SQL都可以“随意”处理。

ccname
2006-02-17 14:37
可以设计成二个表:
表test就不用说了,用不用约束要看你的需要了.
第二个表保存限定信息.比方说:“用户类型”保存为
"usertype","0","超级用户"
"usertype","1","普通用户"
"usertype","2","管理人员"

test里的:“用户类型”字段就保存"0""1""2"其中的一个,具体的限制最好通过应用来进行.这样如果你的限制需要进行维护的时候,只用通过一个维护的应用进行就OK了.
"jsp页面有一个“用户类型”的下拉列表"这个问题也就解了吧.

h_backup
2006-04-18 15:12
个人观点应该先设计好对像/类图 然后反向设计表

xderam
2007-02-07 00:22
嗯.有一点不明白.
这样的POJO如何设计呢?
也就是如何在表示层表现出来?
test里id为1 用户类型字段为0 那么如何设计bean才能在jsp里表现为id:1 用户类型:超级用户

Coolyu0916
2007-02-07 17:33
11个表
按照设计标准应当是
每个小表都是一个字典
有助于你系统的扩展

scofield
2007-02-10 15:14
如果这些限定值域的字段是固定的,不需要改动的,就不需要另外设计关系,使用外键连接查询时候毕竟会有性能损失。

比如如果你的用户类型是固定的,就可以考虑使用一个常量定义的值来表示,不一定要再建立一个关系

Coolyu0916
2007-02-10 20:46
楼上的
为了所谓性能而损失系统的可扩展性有些得不偿失
没有永远不变的系统的

flyinghuang
2007-03-04 20:57
引用 Coolyu0916
11个表
按照设计标准应当是
每个小表都是一个字典
有助于你系统的扩展

比较同意这个观点

Aaroncay
2007-03-15 08:59
我也正为表性能的事发愁呢

hanfi
2007-03-21 18:18
折中以下用两个表好了
同意ccname

maoone2003
2007-03-22 09:29
建11张表吧,应该这样设计!!!
你有没有考虑到除了test外其它的表实际上是数据字典,数据量不会太大,另外你关联查询的时候一定要10个字段都用上吗,如果那样你的查询也太麻烦了吧,系统也太不易用了。就这点数据量就放心做吧。呵呵

猜你喜欢