ITPUB??ì3
ITPUB论坛 » 系统分析与UML » 公司已争得火花四溅了,请各位高人裁决

标题: 公司已争得火花四溅了,请各位高人裁决
离线 Arrayg770728y
初级会员



精华贴数 0
个人空间 0
技术积分 18 (58709)
社区积分 0 (1005424)
注册日期 2006-6-27
论坛徽章:0
      
      

发表于 2007-7-20 16:55 
公司已争得火花四溅了,请各位高人裁决

系统设计中遇到如下问题,公司技术人员争论得十分激烈,各执一词,十分希望高手裁决之。我们公司技术人员都十分关注这个贴子:

1、采用代理主键作外键,还是代码code作外键
表1:代理主键——id,并取代码作唯一约束——code。
表2:参照表1时,其外键应参照code,还是id?
在这个问题上,有三种策略:
1)参照表1的id。优点是明显的,缺点是查询时必须进行表联接,尤其是有时需要对代码进行模糊查询的时候更是如此。
2)参照表1的code。优点是对代码进行模糊查询时不需进行表连接,缺点是code不能发生变动,否则将同步修改很多相关表。据说这是很多大公司的做法。
3)参照表1的id,并冗余一个code字段。同时具备第1、2条的优点,但也具有第2条的缺点。这种做法似乎很常见。
我个人认为应取第一种策略,对于确实影响性能的,经过分析后可以采用第三种策略以避免连接,优化性能,但无论如何不能采取第三种策略。

2、数据库视图的使用
有三类项目:类型A,类型B,类型C。这三类项目都有一些公共的特性(比如地区等信息。需要对面向全部项目统计查询),大约占字段总量的50%左右,这些公共特性经常需要在查询中用到。在数据库设计时有如下策略:
1)三个分类项目表+一个视图:三类项目分开建表(表:项目A,项目B,项目C),这样给项目的操作上带来很大便利,但同时给查询上带来了不便,要从所有项目中查找数据,必须参照三个表。为解决这个问题,从三个表中提取了一个视图,相当于 项目表。
2)一个项目表+三个分类项目表:建一个项目表,再建三个分类项目表(表:项目A,项目B,项目C),共四个表。这样给查询带来了方便,但给增加和修改操作带来了麻烦,这时必须修改两个表。
3)冗余策略:建一个项目表,全部属性设置在一个表内。这种策略给查询带来了方便,但增加操作却非常麻烦,必须把每一类项目要设置哪些字段弄清楚。
我比较看好第一种策略,这种策略在完全不冗余的情况下,实现了查询和增删改的简便性。但听说现在不推荐用视图,所以有些犹豫。

另外,我们目前虽使用hibernate,但完全是使用的单表模式,即没有建立一对多、多对多的关系,全部是针对一个表进行的操作。并且公司一位从大公司出来,并且很有经验的高手说,一般大公司,尤其是做ERP公司的,一般都是这种模式,以确保系统性能。面向对象普及这么多年,为什么在大型系统中始终不能得到应用呢?我真的疑惑了。


只看该作者    顶部
离线 king_wjb
中级会员



精华贴数 1
个人空间 0
技术积分 733 (2547)
社区积分 5 (14954)
注册日期 2003-2-26
论坛徽章:0
      
      

发表于 2007-7-20 17:15 
呵呵,我不是高人,随便说说。
1、我倾向于第一种方案,即使要做关联查询,不见得对性能有多大影响;第二种方案很烦,而且code变动基本上不可避免;第三种方案不到万不得已,一般不使用,除非对性能影响特别大。

2、我比较倾向于第二种方案,可以建立一个主表,其他的A、B、C与其关联,应该不会出现同时更新多表的情况吧。主细表我以前用过很多,也没觉得有什么毛病。不知道你们为什么不推荐使用视图,是基于性能的考虑吗?


只看该作者    顶部
离线 g770728y
初级会员



精华贴数 0
个人空间 0
技术积分 18 (58709)
社区积分 0 (1005424)
注册日期 2006-6-27
论坛徽章:0
      
      

发表于 2007-7-20 17:30 
-->应该不会出现同时更新多表的情况吧。
不会。

-->不知道你们为什么不推荐使用视图,是基于性能的考虑吗?
是的。不知道目前视图在大的程序中有应用吗?

thanks


只看该作者    顶部
离线 snowmeteor
初级会员



精华贴数 0
个人空间 0
技术积分 14 (69716)
社区积分 0 (705208)
注册日期 2005-12-3
论坛徽章:0
      
      

发表于 2007-7-21 09:27 
视图在大的程序中有应用


只看该作者    顶部
离线 omencathay
菜田守望者


精华贴数 7
个人空间 80
技术积分 4977 (261)
社区积分 7006 (212)
注册日期 2002-10-21
论坛徽章:7
现任管理团队成员     
      

发表于 2007-7-23 18:58 
用有一定规则的流水号隐藏更多的类别信息可以放到一个表中


只看该作者    顶部
离线 mydear
高级会员


来自 SH
精华贴数 2
个人空间 16250
技术积分 13593 (84)
社区积分 88888 (2)
注册日期 2003-6-2
论坛徽章:343
BLOG年度发帖之星年度论坛发贴之星月度论坛发贴之星BLOG月度发帖之星月度论坛发贴之星月度论坛发贴之星
BLOG月度发帖之星月度论坛发贴之星月度论坛发贴之星   

发表于 2007-7-28 23:52 
这种问题还是要看系统得实际情况大家一起讨论
希望达成一致


__________________
只看该作者    顶部
离线 wdzwdz
版主



精华贴数 11
个人空间 0
技术积分 2544 (604)
社区积分 1064 (892)
注册日期 2001-12-30
论坛徽章:9
管理团队成员ITPUB元老管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员
ITPUB新首页上线纪念徽章在线时间开发板块每日发贴之星   

发表于 2007-8-3 17:08 
就一个数据库表的主键就火花四溅了?

夸张.小题大做


__________________
从事系统分析工作qq=24938558,msn=wdz123@hotmail.com我的bloghttp://blog.itpub.net/wdzwdz
只看该作者    顶部
离线 julyboxer
初级会员



精华贴数 0
个人空间 0
技术积分 2 (207247)
社区积分 0 (1232833)
注册日期 2007-1-1
论坛徽章:0
      
      

发表于 2007-8-8 16:07 
呵呵..
1.现在我们开发的项目是应用第二种方案..用第一种方案太经常要关联查询了..第二种只是偶尔会有更新..第三种是完全没有必要了..


只看该作者    顶部
离线 zusheng
中级会员


精华贴数 0
个人空间 0
技术积分 406 (4733)
社区积分 47 (4965)
注册日期 2006-8-30
论坛徽章:4
授权会员ITPUB新首页上线纪念徽章开发板块每日发贴之星设计板块每日发贴之星  
      

发表于 2007-8-10 08:32 
学习经验ing


__________________
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃。
只看该作者    顶部
离线 twslh
资深会员



精华贴数 0
个人空间 0
技术积分 1139 (1544)
社区积分 26 (6567)
注册日期 2005-3-18
论坛徽章:3
会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章   
      

发表于 2007-8-10 11:29 


QUOTE:
最初由 julyboxer 发布
呵呵..
1.现在我们开发的项目是应用第二种方案..用第一种方案太经常要关联查询了..第二种只是偶尔会有更新..第三种是完全没有必要了..


分析一下 表的主要用途有哪些?不要绝对的选择第一种或第二种方案

如果两者相结合,是不是更好?

更新多的表,用第一种方案
查询多的表,用第二种方案

第一种方案 到 第二种方案的 同步或转换的这个方案,应该不难吧

象Google 或 Baidu 这样的数据量查询,肯定是用第二种方案。
而他们的网页收集 是采用第一种方案。

如果不是两种方案相结合,收集网页时,他们会死,用户查询时,用户会慢死

关键是看你们的数据量多大。

-------------------------------------------------------------

关键在于你们的“度”是多少

Varchar(10)和Char(10)的区别 应该不大吧

如果这个表的记录,是上1000亿条呢?

Varchar(1000)和Char(10) 区别大吧
如果这个表的记录,只有10条呢?

自己把据“度”


__________________



有事没事,常联系--------------------------------------
MSN:twslh@126.com
Skype:twslh@163.com


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问