`
weishaoxiang
  • 浏览: 96641 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

数据库设计五戒[转载]

阅读更多

数据库设计五戒

 

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

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

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

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

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

二戒:不要用用户的键。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  所以,第四个戒条就是,在可能的情况下,不要让前台应用程序直接访问数据表。

五戒:不要一直让用户输入数据。

  有些字段其实不一定要让用户输入,只需要用户选择即可。如在人事管理系统中,企业员工所属的民族、职位、省份等等就没有必要让用户手工输入。而可以通过列表的形式让员工来进行选择。这种手段,是提高数据完整性的最佳方式之一。若能够给用户提供一个详细的列表供其选择,这样将减少键入代码的错误,同时提高数据库的一致性;也可以提高用户界面的友好性。

  所以,在数据库设计的时候,尽量使用列表字段来供用户选择。若连省份等等字段都要用户手工输入的话,则我们在数据库完整性所花费的时间,就要很多。如在数据保存的时候,都要去判断用户输入的数据是否合乎完整性的规则。这显然工作量要比设计一个列表字段多得多。

  故数据库设计的第五个戒条就是不要老是让用户手工输入数据。提供列表让用户进行选择,用户不仅可以提高效率,我们也可以省事,同时,也能够保障数据的准确率。

分享到:
评论

相关推荐

    软件开发过程中数据库设计部分详解

    数据库设计可以分为五个基本步骤:需求分析、概念设计、逻辑设计、物理设计和实施与维护。 需求分析是数据库设计的基础,是最困难、最花时间的一步。需求分析人员既要懂数据库技术,又要对应用环境的业务熟悉,一般...

    4-软件数据库设计文档模板.docx

    软件数据库设计文档模板 software database design report document" 在软件开发项目中,数据库设计是非常重要的一步骤,它直接影响到软件系统的性能、安全性和可维护性。本文档提供了一份软件数据库设计文档模板...

    数据库课程设计:长途汽车信息管理数据库设计

    数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息...

    数据库系统原理实验五/大作业:数据库设计与应用开发大作业

    本实验的目的是让学生深入理解和掌握数据库设计的基本方法和工具,包括概念结构设计、逻辑结构设计和物理结构设计,以及如何通过SQL语句实现这些设计。 在实验内容上,学生需要运用数据库原理进行系统分析,例如,...

    工资管理系统数据库设计报告(数据库课程设计).doc

    工资管理系统数据库设计报告是信息技术学院信息管理与信息系统专业的一份课程设计报告,旨在通过实际操作来学习和理解数据库系统的设计与实现。这份报告涵盖了多个关键阶段,包括需求分析、概念设计、逻辑设计以及...

    支付交易平台数据库设计文档

    标题“支付交易平台数据库设计文档”表明本文档详细介绍了构建银行支付交易平台时所需设计的数据库架构。数据库设计是信息技术领域中极为重要的一环,尤其是在金融行业,其准确性、完整性和安全性的要求尤为严格。本...

    HNU数据库实验五:数据库设计实验

    在“HNU数据库实验五:数据库设计实验”中,我们将探讨数据库设计的全过程,包括概念设计、逻辑设计和物理设计,以及SQL语言在数据库操作中的应用。这个实验旨在帮助学生深入理解数据库系统的内部运作,提高数据库...

    精编《数据库系统概论》王珊第五版第7章数据库设计1资料.ppt

    本资料主要聚焦于第七章——数据库设计,涵盖了数据库设计的基本概念、流程、方法以及各个设计阶段的关键点。 数据库设计是一个复杂而重要的过程,它涉及到对特定应用环境的深入理解,目的是构建出高效、优化的...

    教务管理系统 数据库设计

    #### 五、逻辑设计 逻辑设计是在概念设计的基础上,进一步细化实体、属性和联系,形成具体的数据库表结构。 - **学生信息表**(Student):包括学号、姓名、性别等信息。 - **教师信息表**(Teacher):包含教师...

    数据库设计概论,介绍数据库设计的人物和特点、设计方法以及步骤

    数据库设计的主要步骤包括五个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计和数据库的实施及维护。在需求分析阶段,设计师需理解用户对信息的需求和处理流程。概念结构设计则将这些需求转化为易于理解...

    数据库设计规范.doc

    数据库设计规范 数据库设计规范是指在设计数据库时需要遵循的规则和标准,以确保数据库的设计是合理、科学和高效的。本文档将详细介绍数据库设计规范的各个方面,包括设计原则、命名规范、设计文件内容等。 设计...

    数据库设计文档模板.pdf

    本文档模板涵盖了数据库设计的各个方面,包括数据库环境说明、数据库命名规则、逻辑设计、物理设计、安全性设计、优化和数据库管理与维护说明等。 数据库环境说明 数据库环境说明是指数据库设计过程中的环境说明...

    数据库设计教程(第二版)pdf

    根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...

    数据库设计(论文+方案)

    数据库设计(论文+方案)数据库设计(论文+方案)数据库设计(论文+方案)数据库设计(论文+方案)数据库设计(论文+方案)

    《数据库课程设计》-旅游管理系统设计报告+SqlServer.doc

    3.1.2 数据库概念结构设计 9 3.1.3 数据库逻辑结构设计 10 3.1.4 数据库的物理结构设计 11 3.1.5 数据库安全性和完整性 13 3.2系统总体设计 13 3.2.1系统功能模块设计 14 3.2.2系统输入输出设计 15 第四章 旅游管理...

    数据库课程设计----学校的工资管理系统的设计

    数据库原理及应用课程设计报告---学校的工资管理系统的设计 里面包含了sql源码和课程设计报告,可供学习参考。高分课设。 一、课程设计目的及基本要求 数据库系统课程设计是为数据库原理及应用课程而独立开设的实践...

    需求分析+概要设计+详细设计+数据库设计模板

    需求分析、概要设计、详细设计和数据库设计模板 ...需求分析、概要设计、详细设计、数据库设计和软件测试是软件开发的五个重要步骤,它们之间存在紧密的联系。只有通过这些步骤,软件开发才能确保软件的质量和可靠性。

Global site tag (gtag.js) - Google Analytics