Chinaunix首页 | 论坛 | 博客
  • 博客访问: 629882
  • 博文数量: 105
  • 博客积分: 10013
  • 博客等级: 上将
  • 技术积分: 985
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-31 21:04
个人简介

窥天地之奥 达造化之极

文章分类

全部博文(105)

文章存档

2015年(1)

2010年(3)

2009年(2)

2008年(2)

2007年(2)

2006年(95)

分类: Oracle

2006-07-30 23:50:37

浅谈oracle数据库的建模与设计  
   要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价。所以,一个良好的数据库设计是高效率的系统所
   一、逻辑建模
   数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工
具来进行,如Rational rose,PowerDesigner等,这一阶段主要是依据系统的需求,获取与分
析要实现的应用系统信息,进行数据内部以及外在关系的分析,从而有效地建立整个系统的数
据结构(在关系数据库中通常称为表结构),在此基础上对数据库的数据量、数据流量、及响
应速度的估算分析,这样数据模型就产生了。具体的操作准则是数据库的几个范式、用户的具
体需求和分析者的经验,从数据库的性能、安全、方便管理、易于开发等方面出发,具体方法
因分析员的喜好和习惯而异,可以不用工具,最好使用工具,能让分析过程简便,最主要是能
   二、物理设计
   此步设计和系统将具体使用的数据库有关,也和数据库所运行的硬、软件平台有关,目的
是尽量合理地给数据库分配物理空间,这一步在数据库设计中很重要,关系到数据库数据的安
全和数据库的性能,具体的来说,这一步包括相应表空间的数据文件在磁盘上的分配,还要根
据数据量的大小确定redolog文件、rollback段的大小,然后进行分配,这些文件的分配要遵
循一些原则,本着利于备份,利于性能优化的原则,原则如下(以ORACLE数据库为例):
   1、为表和索引建立不同的表空间,禁止在系统表空间中放入非核心oracle系统成分的对
象,确保数据表空间和索引表空间位于不同的磁盘磁盘驱动器上。
   2、了解终端用户怎样访问数据,如果可能,将经常同时查询和频繁查询的对象放在不同
   3、当数据库包含允许用户并行访问不同数据元素的大对象时,将对象分割存放在多个磁
盘上是有好处的。可以采用分区。在某个操作系统平台上定义拥有数百万行的表时,则更需小
心,因为数据库文件的大小受到限止,这种限制是由操作系统而不是由oracle引起的。
   4、在独立的各盘上至少创建两个用户定义的rollback表空间,以存放用户自己的
rollback段。在初始化文件中安排rollback段的次序,使它们在多个磁盘之间进行切换。
   5、将redo log文件放在一个读写较少的盘上。对于每个oracle 实例要建立两个以上的
   6、确立表和索引的大小,这决定了保存它们所需的表空间的尺寸,也决定了哪些表空间
物理地装在哪些盘上和哪些表空间可以结合在一起。具体的估算方法可以按照oracle 一些公
式,这里还要按照各个表的具体特性,用途,定义它的存贮参数如(pctfree,pctused)。
   三、关于数据库参数的设计
   每个数据库在建立时,都有缺省的参数设置,但是对于具体的应用要求参数设置可能不同
,缺省的参数设置往往需要根据应用系统的特点而需要改动,如每个数据库的操作系统平台、
instance 数目、各种内存大小的设置、采取的线程方式、备份方式等不同,具体的参数就一
定要进行最为恰当的修改,这个步骤对数据库性能很重要,也是保证应用系统所要求的数据库
   四、与开发软件的接口问题
   数据库设计最后要考虑的是与要选择的开发软件之间的接口问题,要准备好接口程序,有
些是第三方软件已经备好的,有些是数据库本身要具备的,如jdbc,bde,ado,等与数据库的接
口,主要是考虑接口的可用性、效率问题。这一步主要从经验出发,因为这种产品不断出台,
而且都是经过各商家的吹捧,要在实践中决定哪个是最适合。
   以上是数据库建模设计的几个重要步骤的大致分析,整个设计过程是不断地改进的,是数
据库管理员、设计人员、开发人员共同完成的,只是各有侧重点不同,数据库管理员侧重于是
2、3步的设计,设计人员侧重于1步的设计,而开发人员侧重于4步的设计,由于有些应用系
统的编程环境和实际应用环境不同,所以要做两套设计,并注意两套设计的兼容性可移植性。
   下面结合一个实际开发的劳资管理系统中的数据库设计,对以上几个步骤做进一步解释。
   该系统应用于大型企业集团,包括几十个分厂,基本数据均来源于各分厂,各分厂有一套
access数据库,存贮着自己的人才档案信息,由各厂自己维护,定期传到总的数据库里,供劳
   一、逻辑建模
   首先是对数据库的数据量、数据流量、及响应速度的估算分析,这一步对物理设计也是必
须的,劳资系统的主要数据是人员档案,大概有100兆左右,还有人员配备等信息加上工种序
列、工资等级、厂矿车间等各种编码,总的数据量大约在某些方面300兆左右。数据的输入、
维护大部分在各厂矿进行,然后到处里集中,所以数据流量很大,对响应速度要求一般。
   在逻辑建模上的工具上,采用Rantional rose 2000,根据用户的需求,设计各种use
case view, 在 logic view中生成数据库的实体,及实体之间的E-R图,然后生成Data
modeler,确定以后,用Schema generation在建好的数据库中的对应的用户下生成表。
   详细的图很繁琐,在这里就不展示了。
   二、物理设计
   1、因为职工档案信息库很大,还有照片,所以把它分成两个表,把照片单独地放在一个
表中,并且采用分区技术,在档案表、照片表上建立分区,不同的分区分别放在不同的表空间
   2、因为职工档案信息库里有许多编码,查询的时候要和编码库一起进行read操作,所以
不把职工档案信息表和编码库放在一个表空间。
   3、建立二个rollback 表空间,十个rollback段,分区放在二个表空间里,建立一个比较
大的rollback段,因为职工档案信息表经常会有批量的修改与添加。
   4、将redo log文件放在一个读写较少的盘上。建立三个redo log 组,同组的两个成员
放在两个盘上。因为选用的是ARCHIVELOG的备份方式。
   5、根据每个表的性质,确定其存贮的参数,如职工档案信息表的修改、删除、插入都比
较多,所以把它的Pctfree 10,Pctused 80定大小,估算出它大致需要的block数,算出存放
   6、根据用户的需求,建立一套数据库的安全体系。也就是总结出几种权限级别的用户,
建立这些用户,并给这些用户赋上相应的仅限,供开发人员编程时使用。
   三、参数的设置
   缺省的初始化参数文件中,选择large。因为用户数很多,100个左右。
   SHARED_POOL_SIZE, 与数据库大小有关,也与应用软件有关。这里设成缺省值的1.5倍。
   DB_BLOCK_BUFFERS 根据所用服务器的内存与交易数的大小,设为25兆。
   SORT_AREA_SIZE 根据所用服务器的内存,设为10兆
   LOG_BUFFER 用缺省值的1.5倍。
   DBWR_IO_SLAVES 设为1
   ROLLBACK_SEGMENTS 根据交易量的大小,定为10个。分别放在两个磁盘上。
   PROCESS 80
   MTS_SERVERS 3
   MTS_DISPATCHERS tcp,3
   ARCHIVE_LOG_START TRUE 采用ARCHIVE方式备份。
   这些参数的确定是暂时的,没有一个系统可以运行之前把参数确定得正好,需要在应用程
   四、与开发软件的接口问题
   因为我们这个系统的开发软件用的是Borland c++builder 5,所以采用的是比较成熟的BDE
   以上是根据多年数据库管理、开发的实践总结而出的数据库建模与设计的大致思路,希望
   原作者:邓未玲
阅读(2984) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~