Oracle数据库设计要做到五戒

众所周知,数据库设计的好坏直接关系到数据库运行的效率。根据笔者的经验,对于提升数据库性能来说,合理的数据库设计,比升级服务器的硬件配置,还要来的有效。但是,笔者无论是在跟同事合作,又或者是在论坛上跟相关同行交流的时候,总是会发现有些人有一些不好的数据库设计习惯,影响了数据库的性能,增加了数据库管理员的工作量。

笔者认为,为了提升数据库的性能,在Oracle数据库设计的时候,要做到五戒。

一戒:在小型表上不要建立索引。

毋庸置疑,索引可以提高数据库查询的效率。但是,俗话说,过之则不及。索引也必须用在合时的地方。如果索引设置不当,不但不会提升数据库的性能,反而会起到相反的作用。如在小型数据库上设置索引,而且这些表用户更改的比较频繁。如员工基本信息表,就是简单的不超过十个字段。这个表用户需要经常的进行插入与删除操作。当进行这些变更作业的时候,需要对索引进行维护。而这个维护的工作量可能比扫描表空间消耗更多的存储空间。从而不但起步到改善数据库性能的作用,反而是在拖后腿。

所以,在数据库设计的时候,要做到的第一个戒条就是,不要再用户经常更改的小型表上建立索引。否则的话,是得不偿失的。

二戒:不要用用户的键。

如我们在设计一个ERP系统数据库的时候,有一张销售订单表。在这张表中,有一个销售订单号。那么我们能否利用这个单号作为关联其他表的外键呢?如在销售出货单上,需要关联到销售订单。这个时候,我们能否把销售订单单号作为跟出货单关联的关键字呢?

答案是可以的,但是不是最优选择。我们可以看一下ERP的后台数据库。在销售订单表上,除了销售订单号这个唯一表示销售订单纪录的字段外,还有一个字段就是销售订单ID。在前台的出货单界面上虽然显示的是销售订单号码,但是,在后台却存储着的是销售订单ID。也就是说,数据库不是以用户的键作为主键,而是采用了数据库自动维护的单据ID这个字段。

为什么要这么设计呢?这就是笔者今天要谈的第二个戒条,不要用用户的键。通常情况下,不要选择用户可编辑的字段作为外键或者主键。因为这会增加我们额外的工作量。

如果我们把销售订单号作为外键的话,则在创建销售订单纪录后还要对用户编辑字段的行为施加限制,如判断是否违反外键的强制性规则等等。有些系统把销售订单号设置为外键的话,则往往是把这个字段设置为系统自动编号,并且用户不可更改。可是,在实际工作中,企业员工往往需要编辑这个字段。员工需要编辑这些不可编辑的字段时系统缺乏灵活性的缺陷就体现出来了。而且,当用户输入完数据保存的时候再提示纪录不符合要求,则也不是很人性化的设计。

另外,我们还必须为此设计一些检测和纠正键冲突的方法。如考虑这个外键的直是否在其他数据表中存在等等。虽然这通常只需要我们花点时间就可以搞定。但是从数据库性能上来说,这个代价就比较大了。再则,如此的话,就不能够很好的把系统的基本数据跟企业员工的数据实现很好的隔离。

所以,笔者认为,不要用用户的键来作为我们数据库设计的主键或则外键。或者说,数据库设计时用到的键要让数据库系统进行自动维护,用户不得更改这个维护规则。

时间: 2024-08-03 04:38:05

Oracle数据库设计要做到五戒的相关文章

Oracle数据库设计开发阶段性能优化策略

引言 Oracle是目前使用最为广泛的大型数据库管理系统,提高Oracle数据库系统的运行效率,是整个计算机信息系统高效运转的前提和保证.影响Oracle数据库应用系统性能的因素很多,既有软件方面的因素,也包括数据运行的硬件环境.网络环境.数据库管理和维护方面的因素等.数据库系统设计开发阶段是Oracle应用优化的最佳阶段,也是主动优化阶段,能达到以最小成本获得最大性能增益的目的.通过对其逻辑存储结构和物理存储结构设计进行优化,使之在满足需求条件下,时空开销性能最佳,可以解决数据库系统运行过程中

ORACLE 数据库设计看哪本书好

问题描述 我想向数据库设计.分析方面进军. 解决方案 Thomas Kyte写的几本书,都好好的读一读.<<ORACLE专家高级编程>><<Oracle9i &10g编程艺术 >><<oracle9i高效编程>>解决方案二:<<Expert One-on-one Oracle>>不错,不过看什么书都不如看oracle官方文档解决方案三:Oracle的OCA考试认真的SQL部分.解决方案四:<Ora

教你设计大型Oracle数据库

超大型系统的特点为:1.处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB; 一.概论 超大型系统的特点为: 1.处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB; 2.系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性. 为了能达到以上要求,除了需要性能优越的计算机和海量存储设备外,还需要先进的数据库结构设计和优化的应用系统. 一般的超大型系统采用双机或多机集群系统.下面以数据库采用Oracle 8.0.6并行服务器为例来

Oracle 9i数据库设计详解

一.数据库物理设计原则 1.1 数据库环境配置原则 1.1.1 操作系统环境: 对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9i RAC的集群数据库的方法,集群节点数范围在2-64个.对于大型数据库系统,可以采用Sun Solaris SPARC 64位小型机系统或HP 9000 系列小型机系统.RAD5适合只读操作的数据库,RAD1 适合OLTP数据库 1.1.2 内存要求 对于linux操作系统下的数据库,由于在正常

oracle 11g-求救!用oracle11g实现人事管理数据库设计,在循环键盘输入信息时遇到错误!

问题描述 求救!用oracle11g实现人事管理数据库设计,在循环键盘输入信息时遇到错误! 我现在做用oracle实现人事管理数据库,遇到了很严重的问题,请各位路过的大侠帮帮忙!!! 它的要求和部分代码如下: 我用的是oracle 11g,用cmd进行以下操作,我的用户名已创建(user_name1),被授予了需要用到的权限,创建了3个表空间orcltbs1_1.orcltbs1_2.orcltbs1_3都是(300m的容量)用来完成要求1. 要求: 1.员工表(按出生日期建立分区表)creat

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

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具

教你设计大型Oracle数据库_oracle

一.概论 超大型系统的特点为: 1.处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB; 2.系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性. 为了能达到以上要求,除了需要性能优越的计算机和海量存储设备外,还需要先进的数据库结构设计和优化的应用系统. 一般的超大型系统采用双机或多机集群系统.下面以数据库采用Oracle 8.0.6并行服务器为例来谈谈超大型数据库设计方法: 确定系统的ORACLE并行服务器应用划分策略 数据库物理结构的设计 系统

数据库设计-求大神解答oracle数据库关于触发器集联删除的问题

问题描述 求大神解答oracle数据库关于触发器集联删除的问题 做期末项目,做到了触发器集联删除这块,我想删除course表(父表)里的数据,必须先删除teacou(子表)中的cid,cid与course里的id有外键关系.删除子表后我又不能找到父表里的id了. select teaCou.cId from teaCou where teacou.tId=:old.id有时候查出来两个结果,select into语句不能用, 怎么办啊,请大神帮忙看看,谢谢啦! 解决方案 http://www.2

设计-如何用php和Oracle数据库开发知识库

问题描述 如何用php和Oracle数据库开发知识库 有谁知道用php和Oracle数据库开发知识库的相关书籍或者论坛资源,好像用php和Oracle数据库开发知识库这方面的东西不太多,最好是谁见过这类知识库的原型或者成功的案例,谢谢! php程序设计我还行,不过用php开发知识库的还没见过,我是想找用php开发的知识库原型看一看,什么知识库都行,我就是不知道用php开发知识库要做什么在里面 解决方案 https://www.mediawiki.org/wiki/Download/zh 世界上最