数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

浅谈Oracle数据库的建模与设计


发布日期:2021年04月26日
 
浅谈Oracle数据库的建模与设计

要开发一个基于数据库的应用系统其中最关键的一步就是整个系统所依据的数据库的建模设计从逻辑的到物理的一个环节疏于设计整个的应用系统便似建立在危房之上随着开发过程的不断深入它要随时面临着各种难

以预料的风险开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价所以一个良好的数据库设计是高效率的系统所必须的

逻辑建模

数据库设计的方法因具体数据库而异但是建模阶段的相同的所以可以用一些通用的工具来进行如Rational rosePowerDesigner等这一阶段主要是依据系统的需求获取与分析要实现的应用系统信息进行数据内部以及外在关系的分析从而有效地建立整个系统的数据结构(在关系数据库中通常称为表结构)在此基础上对数据库的数据量数据流量及响应速度的估算分析这样数据模型就产生了具体的操作准则是数据库的几个范式用户的具体需求和分析者的经验从数据库的性能安全方便管理易于开发等方面出发具体方法因分析员的喜好和习惯而异可以不用工具最好使用工具能让分析过程简便最主要是能生成一些图如ER图让分析过程一目了然

物理设计

此步设计和系统将具体使用的数据库有关也和数据库所运行的硬软件平台有关目的是尽量合理地给数据库分配物理空间这一步在数据库设计中很重要关系到数据库数据的安全和数据库的性能具体的来说这一步包括相应表空间的数据文件在磁盘上的分配还要根据数据量的大小确定redolog文件rollback段的大小然后进行分配这些文件的分配要遵循一些原则本着利于备份利于性能优化的原则原则如下(以ORACLE数据库为例)

为表和索引建立不同的表空间禁止在系统表空间中放入非核心oracle系统成分的对象确保数据表空间和索引表空间位于不同的磁盘磁盘驱动器上

了解终端用户怎样访问数据如果可能将经常同时查询和频繁查询的对象放在不同的物理磁盘上

当数据库包含允许用户并行访问不同数据元素的大对象时将对象分割存放在多个磁盘上是有好处的可以采用分区在某个操作系统平台上定义拥有数百万行的表时则更需小心因为数据库文件的大小受到限止这种限制是由操作系统而不是由oracle引起的

在独立的各盘上至少创建两个用户定义的rollback表空间以存放用户自己的rollback段在初始化文件中安排rollback段的次序使它们在多个磁盘之间进行切换

将redo log文件放在一个读写较少的盘上对于每个oracle 实例要建立两个以上的redo log 组同组的两个成员放在不同的设备上

确立表和索引的大小这决定了保存它们所需的表空间的尺寸也决定了哪些表空间物理地装在哪些盘上和哪些表空间可以结合在一起具体的估算方法可以按照oracle 一些公式这里还要按照各个表的具体特性用途定义它的存贮参数如(pctfreepctused)

关于数据库参数的设计

每个数据库在建立时都有缺省的参数设置但是对于具体的应用要求参数设置可能不同缺省的参数设置往往需要根据应用系统的特点而需要改动如每个数据库的操作系统平台instance 数目各种内存大小的设置采取的线程方式备份方式等不同具体的参数就一定要进行最为恰当的修改这个步骤对数据库性能很重要也是保证应用系统所要求的数据库功能得以实现重要一步

与开发软件的接口问题

数据库设计最后要考虑的是与要选择的开发软件之间的接口问题要准备好接口程序有些是第三方软件已经备好的有些是数据库本身要具备的如jdbcbdeado等与数据库的接口主要是考虑接口的可用性效率问题这一步主要从经验出发因为这种产品不断出台而且都是经过各商家的吹捧要在实践中决定哪个是最适合

以上是数据库建模设计的几个重要步骤的大致分析整个设计过程是不断地改进的是数据库管理员设计人员开发人员共同完成的只是各有侧重点不同数据库管理员侧重于是步的设计设计人员侧重于步的设计而开发人员侧重于步的设计由于有些应用系统的编程环境和实际应用环境不同所以要做两套设计并注意两套设计的兼容性可移植性

下面结合一个实际开发的劳资管理系统中的数据库设计对以上几个步骤做进一步解释

该系统应用于大型企业集团包括几十个分厂基本数据均来源于各分厂各分厂有一套access数据库存贮着自己的人才档案信息由各厂自己维护定期传到总的数据库里供劳资处各室查询统计用这是一个分部式的数据库

逻辑建模

首先是对数据库的数据量数据流量及响应速度的估算分析这一步对物理设计也是必须的劳资系统的主要数据是人员档案大概有兆左右还有人员配备等信息加上工种序列工资等级厂矿车间等各种编码总的数据量大约在某些方面兆左右数据的输入维护大部分在各厂矿进行然后到处里集中所以数据流量很大对响应速度要求一般

在逻辑建模上的工具上采用Rantional rose 根据用户的需求设计各种use case view 在 logic view中生成数据库的实体及实体之间的ER图然后生成Data modeler确定以后用Schema generation在建好的数据库中的对应的用户下生成表

详细的图很繁琐在这里就不展示了

物理设计

因为职工档案信息库很大还有照片所以把它分成两个表把照片单独地放在一个表中并且采用分区技术在档案表照片表上建立分区不同的分区分别放在不同的表空间

因为职工档案信息库里有许多编码查询的时候要和编码库一起进行read操作所以不把职工档案信息表和编码库放在一个表空间

建立二个rollback 表空间十个rollback段分区放在二个表空间里建立一个比较大的rollback段因为职工档案信息表经常会有批量的修改与添加

将redo log文件放在一个读写较少的盘上建立三个redo log 组同组的两个成员放在两个盘上因为选用的是ARCHIVELOG的备份方式

根据每个表的性质确定其存贮的参数如职工档案信息表的修改删除插入都比较多所以把它的Pctfree Pctused 定大小估算出它大致需要的block数算出存放这些表的表空间的数据文件的大小

根据用户的需求建立一套数据库的安全体系也就是总结出几种权限级别的用户建立这些用户并给这些用户赋上相应的仅限供开发人员编程时使用

参数的设置

缺省的初始化参数文件中选择large因为用户数很多个左右

SHARED_POOL_SIZE 与数据库大小有关也与应用软件有关这里设成缺省值的

DB_BLOCK_BUFFERS 根据所用服务器的内存与交易数的大小设为

SORT_AREA_SIZE 根据所用服务器的内存设为

LOG_BUFFER 用缺省值的

DBWR_IO_SLAVES 设为

ROLLBACK_SEGMENTS 根据交易量的大小定为分别放在两个磁盘上

PROCESS

MTS_SERVERS

MTS_DISPATCHERS tcp

ARCHIVE_LOG_START TRUE 采用ARCHIVE方式备份

这些参数的确定是暂时的没有一个系统可以运行之前把参数确定得正好需要在应用程序运行之后进行调整

与开发软件的接口问题

因为我们这个系统的开发软件用的是Borland c++builder 所以采用的是比较成熟的BDE的接口它是Borland公司提供的性能比较好

上一篇:JDBC+Hibernate将Blob数据写入Oracle

下一篇:OracleDatabase10g:闪回版本查询