`
xiebh
  • 浏览: 616000 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Oracle数据库设计要做到五戒

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

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

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

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


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

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


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

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

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

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

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


 三戒:不要用商务规则来实现数据的完整性。

  数据的完整性有好几种实现方法。如可以通过数据库约束实现数据完整性;也可以通过前台系统的商务规则来实现数据的完整性。不过,笔者这里要建议的是,在一些大型的数据库中,不要试图通过商务规则来实现数据的完整性,而尽可能的通过数据库的约束来实现。因为若通过商务规则来实现完整性,往往会出现一些莫名其妙的错误。

  如笔者就遇到过这一个案例。在数据库设计的时候,把某个字符型字段长度限制为最长50位。而在前台应用程序中,却限制了60位。在员工录入数据的时候,在前台应用程序中输入了55个字符。但是,下次用户查询的时候,却发现后面几个字符没有了,只剩下前面那些内容。这主要是因为在数据保存的时候,超过了数据库的最长位数限制。数据库就会自动把后面几个字符去掉然后保存。如此,用户在前台输入数据的时候,以为可以保存。但是,实际上数据库中存储的数据是不全的。

  所以,笔者的第三个戒条就是,不要利用商务规则在前台实现数据的完整性。只要有可能,就要尽量在数据库系统层面实现数据的完整性。在数据库层面实现数据完整性的同时,需要注意用户的友好性。

  一是要把违反约束信息尽可能详细的回馈给用户。如销售订单号,在数据库系统中设置了唯一性约束。则当用户在建立销售订单的时候,销售订单号重复时,就需要把这个约束的详细信息反馈给前台用户。若只显示不能够保存这个错误信息往往是不够的。这会让用户摸不着头脑。

  二是在必要的时候,可以利用触发器来实现数据的完整性。虽然在功能设计上,我们不建议在Oracle数据库中采用触发器来实现。如要把某个小写金额转换为大小金额。我们是建议通过前台应用程序实现。因为应用程序的执行效率要比数据库的触发器高。但是,在数据库数据完整性上,在必要的时候,若靠数据库约束无法实现完整性,我们仍然建议采用触发器,而不是前台应用程序来实现。在任何情况下,不要依赖于应用程序来实现数据完整性。否则的话,很难保证数据库约束与商务层约束的一致性。

四戒:在可能的情况下,不要让前台应用程序直接访问数据表。

    其实,在数据库基础表与前台应用程序之间,还有一个很好的“中间人”,那就是视图。视图是数据库基础表的一个抽象。他除了可以保障数据的质量外,还可以有效的防止前台应用程序对于数据的非法访问。所以,一些安全性级别比较高的数据库系统,在数据库设计的时候,往往会在数据库和前台应用程序代码之间提供“视图”这个中间人,让其作为基础表的“新闻发言人”。如此,前台应用程序在没有必要的情况下,可以不直接访问数据表,而是通过视图来对表实现间接的访问。

  如在进行数据导入程序设计的时候,通过视图来实现则是一个很理想的方法。如用户现在要导入产品信息,包括产品基本信息、供应商信息、价格信息等等。这些信息在数据库中往往包含在三种表中,分别为产品基本信息表、供应商信息表、产品价格信息表。若前台应用程序直接访问基础表的话,就需要分别访问这三张基础表。这不但效率比较低,而且也不容易实现数据的完整性。此时,我们就可以利用视图,把一些必须要填入的字段组合在一张可更新视图中。如此,前台应用程序只需要访问一个数据库对象即可。

  再者,在数据库报表设计上,更是要通过视图来实现。而不要通过传递一段SQL代码来查询基础表。这对于数据的安全性会带来比较大的威胁。


  所以,第四个戒条就是,在可能的情况下,不要让前台应用程序直接访问数据表。
分享到:
评论
1 楼 ah_fu 2009-03-13  
恩,补一个,第五戒,一定不要忘记创建需要的表。
比如,某业务需要五个表,但是只创建了四个,这是不好的。

相关推荐

    Oracle数据库课程设计医院系统数据库源代码.zip

    Oracle数据库课程设计医院系统数据库源代码。包含Java代码和SQL语句。源码中默认使用的数据库为运行的Oracle数据库 如需修改,在java源码/database.propertie中修改即可!Oracle数据库课程设计医院系统数据库源代码...

    ORACLE数据库设计与优化

    《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的功能。本主题主要探讨Oracle数据库的设计原则和优化策略,以提升系统的性能和效率。 ...

    Oracle数据库设计文档——帮助数据库初学者了解数据库设计

    Oracle数据库设计是构建高效、稳定、可扩展的数据库系统的基础,尤其对于初学者来说,理解这一过程至关重要。本文档将深入探讨Oracle数据库的设计原理和实践技巧,帮助新手逐步掌握数据库设计的基本概念和方法。 ...

    Oracle 数据库设计开发规范

    Oracle 数据库设计开发规范概述 Oracle 数据库设计开发规范是指在 Oracle 数据库开发过程中,为了确保系统的稳定性、可扩展性和安全性所制定的规则和标准。这些规则和标准涵盖了数据库设计、开发、测试和维护的各个...

    Oracle数据库开发和设计规范

    Oracle 数据库开发和设计规范 Oracle 数据库开发和设计规范是指在开发和设计 Oracle 数据库时需要遵守的一系列规则和约定,以确保数据库的可维护性、可扩展性和可读性。本文档总结了 Oracle 数据库开发和设计规范的...

    C# oracle数据库 毕业设计

    本毕业设计项目利用C# 2010作为开发工具,结合Oracle数据库10g,构建了一个企业用户管理系统,充分展示了C#与Oracle数据库的集成应用。 首先,C#提供了ADO.NET框架,它是一组用于访问数据库的类库,使得开发者能够...

    Oracle数据库大作业

    【Oracle数据库大作业】是一个关于Oracle数据库在教务管理系统中的应用项目,可能涵盖了数据库设计、实施、优化等多个方面的内容。这个大作业包含了PPT演示文稿、Word文档以及可能的源代码,为学习者提供了全面了解...

    基于 Java+Oracle实现的医院系统数据库【Oracle数据库课程设计】

    【作品名称】:基于 Java+Oracle实现的医院系统数据库【Oracle数据库课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 ...

    《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf

    《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle...

    Oracle数据库课程设计报告(1).doc

    Oracle数据库课程设计报告主要涵盖了以下几个核心知识点: 1. **Oracle数据库**:Oracle是全球领先的数据库管理系统,用于存储、管理和检索数据。在本课程设计中,Oracle作为后台数据库,支持前端应用的各种操作,...

    Oracle数据库精讲之数据库管理_ Oracle数据库管理视频

    2. Oracle数据库设计、开发和备份等管理人员; 四、课程内容: 第一讲:Oracle体系结构 第二讲:Oracle实例中内存结构 第三讲:Oracle实例中后台进程管理 第四讲:Oracle数据数据文件管理 第五讲:Oracle数据库...

    oracle数据库课程设计

    《Oracle数据库课程设计》 Oracle数据库是全球广泛应用的关系型数据库管理系统,因其强大的功能和稳定性而备受青睐。在“数据库系统原理课程设计”中,我们将会深入学习和实践Oracle的管理和开发技术,分为“Oracle...

    Oracle数据库设计-图书管理系统.doc

    "Oracle数据库设计-图书管理...Oracle数据库设计-图书管理系统是指使用Oracle数据库管理系统来设计和实现图书管理系统,涵盖了需求分析、数据库设计、数据库表设计、数据库实施、图书管理系统的功能等方面的知识点。

    Oracle数据库课程设计

    Oracle数据库课程设计是针对IT专业人士,尤其是学习数据库管理和开发的学生所进行的一项实践性学习任务。在这样的课程设计中,学生通常会被要求设计并实现一个基于Oracle数据库的特定系统,例如本例中的“学生考勤...

    oracle数据库设计工具

    Oracle数据库设计工具是一种高效的方法,即使在计算机上未安装Oracle数据库的情况下,也能便捷地进行数据库的设计和规划。本文将深入探讨Oracle数据库设计的关键概念、工具和步骤,以及如何利用相关资源进行无Oracle...

    Oracle数据库系统应用与开发

    Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它在企业级数据管理和应用程序开发中扮演着核心角色。本资源“Oracle数据库系统应用与开发”深入探讨了Oracle数据库的使用和开发技术,特别关注...

    oracle数据库课程设计案例,

    本课程设计案例将为你提供深入理解Oracle数据库系统及其操作的宝贵机会。以下将围绕Oracle数据库的课程设计案例展开详细的讨论: 一、Oracle数据库基础 Oracle数据库采用SQL(结构化查询语言)作为其主要的数据管理...

    Veeam 备份恢复oracle数据库详细配置文档

    五、Oracle 数据库异机恢复 使用 Veeam 备份恢复 Oracle 数据库可以实现异机恢复。通过图形化界面和 RMAN 脚本两种方式可以实现 Oracle 数据库异机恢复。在异机恢复时,需要在恢复目标机上设置好 host 解析,推送 ...

    Oracle数据库转Mysql数据库

    Oracle 数据库转换为 Mysql 数据库是指将 Oracle 数据库中的数据和结构转换为 Mysql 数据库中,整个过程涉及到多个步骤,包括数据库设计、数据类型转换、sequence 实现等。下面将详细介绍 Oracle 数据库转换为 Mysql...

Global site tag (gtag.js) - Google Analytics