有效数据库设计的目标

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

有效数据库设计的目标

借助现代数据库工具,几乎所有人都能够创建数据库。但是问题是,得到的数据是否有用?

如果不能从其中快速、可靠且一致地取出数据,那么数据库不会有多少用处。如果数据库里都是不正确的或自相矛盾的数据,那么将毫无用处。此外,如果数据库被窃取、丢失或者当系统崩溃时遭受到仅半写入的数据的破坏,那么它也是无用的。

现代数据库工具、好的数据库设计和一些常识可以解决所有这些潜在的问题。只要能够了解这些问题的实质,则可以避免它们。

获得有用数据库的第一步是了解数据库的目标。数据库应该完成哪些任务?怎么样能使数据库变得有用以及它能解决什么样的问题?使用一个强大的数据库工具但却没有制定目标就像驾驶飞机在云中飞行而没有罗盘:您拥有自己需要的工具但是却不知道方向。 本章将描述数据库设计的目标。通过研究诸如文件这样能够充当数据库的信息容器,则可以定义数据库应该具有的特性和它们应该避免的问题。

在本章将会学到如下内容:

● 好的数据库设计之所以重要的原因。

● 可以充当数据库的各种不同的信息容器的优点和缺点。

● 如何使计算机化的数据库受益于这些优点并避免那些缺点。

● 好的数据库设计有助于达成数据库目标的方法。

● CRUD 和ACID 的概念以及它们和数据库设计相关的原因。

1.1 理解数据库设计的重要性

请暂时忘记本书是有关数据库设计的,并考虑常规的软件设计。软件设计在软件开发中起着重要的作用。设计规划了今后开发将会采用的大体结构和方向,决定系统各部分之间的交互关系以及哪些子系统对应用程序的其他部分提供支持。

如果应用程序的基础设计是有缺陷的,那么系统整体上将存在危险。设计中错误的假定会渗入应用程序最低级的代码,导致子系统出现问题。构建在这些子系统上的高级系统将沿袭设计缺陷并且它们的代码很快也会受损坏。

有时,代码受到一点损坏便会弥散到整个系统并且直到项目进入到相对较晚的阶段才第 章

第 章 1

第I部分数据库和数据库设计介绍

会被注意到。项目持续的时间越长,不正确的假设越难更改,开发人员越不愿意舍弃整个设计并重新开始。问题在系统中存在的时间越长,越难消除它们。某些情况下抛弃所有事物并从头开始可能更为容易,但这是一个大多数人都不愿意向更高的管理层呈交的决定。

项目管理

我的一个朋友是工程师,参与了一个非常庞大的卫星项目。过了一段时间后,工程师们都意识到在当前的技术条件和设计状况下,该项目是不可行的。最终项目经理被迫向高层主管汇报此情况,他本人因此被解雇了。新的项目经理坚持了一段时间后也被迫向高层主管承认此项目不可行,当然他也被解雇了。

此项目在新的项目经理接手后又继续进行了一段时间,但是他后来也认识到该项目是无希望的,并且直到最后上层主管也不得不承认项目是没有结果时他也被解聘,最终整个项目彻底失败。

如果他们前期在项目设计上花费更多的时间并即时修正问题或立刻认识到项目不可能完成并在一开始就废弃项目,那么便可以节省大量时间、金钱和人力。

构建一个项目往往与建造一座房屋或摩天大楼相似。在没有经过基于完善的建筑原则而深思熟虑的设计之前,完全不可能建造一个造价高达几十亿美元的摩天大楼。但是,软件开发人员往往在还末确定肯定能完成软件开发时就匆忙开始编写代码。编码比设计更有意思、更令人感兴趣。编写代码还允许开发人员告知管理层和客户他们已经写了多少行代码,这样看似开发人员正在实施软件开发,即使这些代码由于错误的假设而毫无用处。只有到了后期,他们才认识到基础设计有缺陷,编写的代码没有意义,而项目此时已经陷入了巨大的麻烦之中。

现在回到项目设计。应用程序设计中数据库设计是最为关键的一项任务。数据库是信息的存储库,供应用程序的其他部分进行管理并显示给用户。如果数据库没有存储正确的数据,没有安全地保存数据,或者应用程序无法找到所需的数据,那么应用程序很少有成功的机会。在这里,无用输入无用输出(GIGO)原则完全适用。如果底层的数据不可靠,那么无论使用这些数据的应用程序完成什么任务,结果充其量也将是不可信的。

例如,假想构建了一个订单跟踪系统用以快速获取客户以往订单的信息。遗憾的是,每次要求程序提取某个客户的记录,但它返回的结果却略有出入。尽管程序能够快速找到数据,但是结果并不足够可信赖而被使用。

设想已经构建了一个令人吃惊的程序,该程序能够跟踪完成一个复杂任务的数千道工序,如建造一艘游轮或载客喷气式飞机。该程序能够跟踪每道工序的完成状况,确定何时需要订购新的零件以便为后续建造阶段做好准备,甚至还能确定今后采购的现行价格从而决定是现在购买还是等到需要时再购买零件。但是,程序将花费数个小时重新计算复杂的任务进度安排和价格详情。尽管计算结果是正确的,但是计算过程太慢使得用户无法有效地做出任何更改。更改飞机座椅织布的颜色或游轮走廊上使用的瓷砖都会延误整个项目。

假设构建了一个有效的订阅应用程序,该程序允许客户订阅公司每季的资讯和数据服务。该程序能够快速查找并更新客户的订阅并且总能一致地为特定的客户显示同样的订价。但是,当更改了某个发行刊物的价格时会发现并非所有客户的记录都显示更新的价格。一

4

第1章有效数据库设计的目标

些客户是按照新价格订阅的,另一些客户是按照旧价格订阅的,还有一些客户看似是按照从没见过的价格订阅的(本示例并不像看起来的那样牵强。一些系统允许向客户群提供廉价订阅或特殊的奖励或者允许销售代表向特殊用户提供特价。如果希望能够完成诸如更改标准价格而不干扰定制价格这样的操作,那么这种系统便要求特殊的设计)。

拙劣的数据库设计会导致上述这些问题和其他令人烦恼的问题以及付出潜在的昂贵代价。良好的设计则可为完成应用程序其余部分打下坚实的基础。

有经验的开发人员知道错误在系统中停留的时间越长,则越难以查找和修正。基于此逻辑,在开始构建应用程序之间实施正确的设计是非常重要的一环。

数据库设计也不例外。在开始确定软件体系结构构思拙劣、实现拙劣或程序不合格之前,有缺陷的数据库设计注定项目会失败。

1.2 信息容器

数据库是什么?这个问题看似很简单,但是如果认真对待它,结果可能很有启发作用。通过调研满足数据库定义的一些物理对象的优点和缺点,可以了解理想计算机化数据库具有的特性。

数据库是一种存储数据的工具,允许以某种方式创建、阅读、更新和删除数据。

这是一个非常宽泛的定义并且涵盖许多不为大多数人看做是现代数据库的物理对象。例如,装满名片的信封、笔记本、装满客户档案的档案柜和人的大脑都符合此定义。这些数据库都有各自的优缺点,从中可以洞察计算机数据库具有的理想特性。

只要不装过多的名片,名片盒就是有用的。通过浏览所有名片可以查找一条特定的数据(例如一个人的电话号码)。通过将更多的名片装进名片盒至少在一定程度上可以方便地扩展数据库。如果名片的数量超过一打,找到特定的名片将是耗时的。甚至还可以略微重新安排一下名片来方便查找经常使用的名片。每次使用一张名片,就将其放在名片堆的前面,这样一段时间以后使用最多的名片会放在最前面。

笔记本是一种小型、便于使用和携带的数据库,不需要供电,也不要求在使用之前引导它。另外,笔记本数据库也非常容易扩展,因为当第一本笔记本写满时可以买另一本笔记本加入到收集物中。但是,笔记本的内容是按顺序安排的。如果希望查找有关特定主题的信息,必须一次浏览一个页面直到找到想要的内容。拥有的数据越多,这种搜索就会变得越困难。

档案柜存储的信息要比笔记本多很多,可以通过添加更多的文件或柜子来扩展这种数据库。只要是根据用于安排档案的数据类型进行搜索的,在档案柜中查找某条特定的信息要比在笔记本中查找更为容易。如果档案柜装满按照客户名整理排列的客户信息,并且希望找到某个特定的客户数据,那么这样是幸运的。如果希望找到住在某个城市中的所有客户,则必须逐个遍历所有文件。

人的大脑是迄今创建的最为复杂的数据库。它可以存储难以置信的数据量并允许采用多种不同的方式检索特定的数据块。例如,现在您很可能可以轻易地回答如下有关您经常光顾的饭店的问题:

5

相关文档
最新文档