理解数据库类型、模型、设计,以及设计的术语;发现良好的数据库设计能为你带来什么好处,以及为什么不好的数据库设计会给你带来痛苦;为你的数据库设定目标,并将其付诸实际的设计;分析一个现有的数据库,以便于你掌握改进它的方法;创建表结构和表关系,设定主键,设置字段说明,并设定视图;确保每一个应用有恰当水平的数据完整性;明确和建立业务规则。
才开始设计数据库?补救糟糕的设计?现有数据库需要完善?本书为你一一解答。
献给我的妻子,感谢她始终如一地信任我。
献给一路帮助过我的人——我的老师、导师、朋友和同事。
献给所有曾经尝试过设计关系数据库但失败了的人。
关于作者
Michael J. Hernandez是一位独立的关系数据库咨询专家,专攻关系数据库设计。他有20多年的科技行业从业经验,为各种各样的客户开发过数据库应用程序。他为众多杂志专栏、白皮书、书籍和期刊撰稿,合著有畅销书SQL Queries for Mere Mortals®(Addison-Wesley,2007)。Mike(Michael的昵称)是全美政府、军队、私营部门以及企业中最受欢迎、最有名的技术培训师。他曾在很多美国国内和国际会议上发言,他的演讲和主持一直大受欢迎。
除了技术背景之外,Mike的技能和兴趣广泛,从艺术到形而上学,涉猎众多。不过,Mike最爱的还是吉他,他已经弹了40多年吉他,担任专业吉他手也有15个年头。Mike厨艺了得,热爱教学(教授写作、公共演讲、音乐),擅长一语双关的文字游戏,甚至还能用塔罗牌算命。
Mike说他永远不会真正地退休,只会在厌倦了手头上的事情之后,转而去做其他能引起他兴趣的事情。
序言
致第三版
十年了,我和Mike见面的机会比过去更少了。有人可能不知道,我们同一天生日(虽然他比我年长了不少,起码大整整一岁)。我们每年至少会见上一面,庆祝我们又多活了一年。有趣的是,微软(Microsoft)差不多也是每十年就“更新”一次技术。如今,回头看我十年前所写的序言,一切都没多大变化——我依然埋头研究微软的一项新技术,不过这一次研究的是WinRT和Windows 8,而不是.NET。不过,有一点从未改变:人们对精心设计并良好执行的数据库设计的需求从未改变。Mike在第一版中所述内容基本上依然适用,目前的新版本进一步完善了一些细节,而优良数据库设计的原则十年来始终如一。我不得不承认,我有点嫉妒Mike写了一本生命力如此持久的好书。一本书能畅销这么多年,至少证明它是一本好书。Mike在本书中详细阐述了数据库设计过程,不管你是第一次阅读本书,还是第二次,抑或第三次,都肯定能在其中找到一条考虑周全的有益道路,指引你在变幻莫测的数据库设计中找到方向。现在,让我们跳过引言部分,进入正题吧!
——肯盖茨(Ken Getz),2012年11月14日
第二版序言
我和Mike Hernandez相见的次数不如从前多了。自我为本书的第一版作序以来,我们的职业生涯都发生了巨大的改变。就算不说别的,我们走动得少了,自然碰头的次数也就少了。如果你愿意迁就我,我也许会补充说,自此书的第一版问世以来,整个世界也发生了巨大变化。就最平凡无奇的方面来说,自我全心全意地投入到微软.NET的开发中,我的整个开发生涯都被改变了。不过,有一件事始终未变,即对数据、对精心设计的数据的不断渴求。把复杂的应用整合在一起,但背后的数据却设计拙劣,由此带来的损害,不比Mike撰写本书第一版时的程度低。不管你是刚涉足数据库开发,还是已经经验丰富;不管你曾经读过Mike的书籍,还是第一次读到;不管你是乐于让别人设计你的数据,还是喜欢自己动手做——本书都是你的不二之选。Mike不但能简单明了,而且能趣味横生地阐释概念,这一能力一直令我深感惊异。
——肯盖茨(Ken Getz),2002年10月10日
第一版序言
你可能好奇,为什么还要再出一本关于数据库设计的书呢?Mike Hernandez第一次和我讨论这本书的时候,我也这么想。但事实就是,世上确实需要一本这样的书,也许通过迅速阅览本书的内容,在翻到本序言之前,你已经发现这一点。你肯定能找到许多解释数据库设计科学背后的原理和概念的书籍,但可能不会找到很多从Mike的独特视角出发的书籍(如果真能找到的话)。他立志拿出一本基于坚实的数学研究原理之上的书,但目标是实际应用,而不是讨论理论上的可能性。不管你现在具体使用的是哪种数据库,本书中的概念都有意义,适用于你的数据库设计项目。
当我翻到第6章的开篇,看到如下建议时,我就知道这本书正是我想要的:
不要将现有的数据库框架作为新的数据库框架的基础。
如果多年前,我刚刚踏上数据库开发者之路时,有人如此忠告我,我定能省下大笔的时间!这就是我所看中的:Mike有多年为客户设计数据库的经验;他花费了大量时间思考、阅读、研究创造数据库应用的正确方式。在本书中,他毫无保留地将一切呈献给了大家。
这本书充满真知灼见,并用简单易懂的例子加以阐释。这并非是指本书中没有涉及适当的数据库设计的核心信息——书中自然是有这些信息的,但是这些内容是面向真正的程序开发人员的,而不是理论家。
我花了不少时间和Mike讨论数据库设计。不管是喝咖啡时、开会时还是写课件时,Mike对数据库设计的热忱始终未减。就像操作系统设计师追求极致完美的算法一样,Mike一直在探寻解决数据库设计的好方法,以及如何能恰当地解释给别人——就如你在本书中会看到的一样。多年来,我所掌握的数据库设计知识中,有很多是从Mike处学得,而且我确信此书定能教给我更多。本书简洁翔实地展示了开发专业数据库所需掌握的信息,我也确信你在读过这本书之后,会有同感。
——肯盖茨(Ken Getz),MCW技术公司(KenG@mcwtech.com)
前言
生命,一如所有最古老的暗喻所认为的,是一段旅程。
——Jonathan Raban
For Love and Money
路线也许会变更,方向也许需要调整,但是旅途会继续……
——Micheal J. Hernandez
《数据库设计凡人入门》(第二版)
显然,从本书的第二版问世9年以来,科技领域,尤其是数据库管理方面的变化之巨,翻天覆地都不足以形容。如今,掌上设备的存储和处理能力,相当于过去几个房间大的大型机。今天,掌上设备无处不在,许多人视之为理所当然——尤其是年轻一代。(我的小侄子可能永远无法理解,我第一次为自己的IBM计算机买了一块40MB的扩展卡时的激动心情。不过,这又是另一回事了。)如今,数据库管理系统能够处理数TB的数据,现在人们也很重视存储、管理和利用云端的数据。
那么,现在是否还需要你手上拿的这本书?当然!无论数据库管理变得多么复杂,始终需要关于数据库设计基础的书籍。要理解事物运行的工作方式和原理,就必须掌握基础知识。许多其他的专业领域亦是如此,无论是技术类学科,如建筑设计、工程学,还是艺术类学科,如音乐、烹饪,无一例外。
近些年,我的人生踏上了新的、全然不同的道路,而我非常享受所做的一切。最近,我写东西比较多,因此觉得是时候出本书的第三版了。我会分享在此过程中学到的一些新知识。也许,我还会进一步厘清我对这个主题的一些看法。现在我已经完成了这部作品,迫不及待地想知道这趟旅程接下来会带我到哪里。
读者请注意:参阅本书中引用的其他内容,请登录Informit.com/titles/ 0321884493。
致谢
不管你听说过哪些写作心得,写作其实需要的是协作。我很感激一直乐于提供帮助的编辑、同事、朋友和家人一路上给我的支持。他们给我带来勇气,让我能专注于手头的工作,所以我想对他们致以最诚挚的谢意。
首先,我要感谢我的好编辑琼默里(Joan Murray)给我重写一版的机会。我们花了好几年的时间讨论此事,是她的毅力、耐心、善良和领导力帮助我下定决心开始这项工作,并圆满完成。我还要感谢出版编辑卡罗琳塞奈(Caroline Senay)熟练地指导审校,还有校对编辑奥德丽多伊尔(Audrey Doyle)对本书内容精确、详尽的审校。同时,我要特别感谢约翰富勒(John Fuller)以及他的制作人员——你们做得一如既往地出色!我一直和Addison-Wesley团队保持着良好的关系,我几乎不能想象我怎么可能会愿意为其他出版社写作技术书籍。
其次,我想感谢杰出的技术审校团队:特雷西桑顿(Tracy Thornton)、托尼威金斯(Tony Wiggins)还有西奥多理查森(Theodor Richardson)。他们毫无保留地奉献出了他们的时间、精力和专业知识,给我提出了众多的宝贵意见和建议。毫无疑问,本书受益于他们的付出。我想再一次感谢你们每一个人的付出,让第三版的水平超出了我的预期。
非常感谢肯盖茨(Ken Getz)再一次为本书作序,肯是一位备受尊敬的专家,同时也是我的同事、好友。真高兴能在本书开篇加上他的想法和评论。
我还要感谢读者朋友们把他们关于本书的想法和评论反馈给我。大家给予的赞扬和支持让我受宠若惊,我要特别感谢读者提出的建设性批评意见,让我得以在新一版中完善相关内容。我还要感谢所有的学术机构、政府组织和商业组织,感谢你们采用我的作品,当作数据库初学者的“标准读物”。它们对本书的肯定,让我备感荣幸。
最后,我想感谢我的妻子,感谢她在我创作此书的过程中给予我的无尽的耐心。她的帮助和支持何其珍贵,我欠她的太多。我可以清楚地告诉大家我有多爱她,但是她讨厌任何公开示爱的行为。因此,我只能为她献上桂冠,紧紧地握住她的手。
引言
平凡的厨子做不好普通的菜。
——Countess Morphy
过去,数据库设计的工作由信息技术(IT)部门人员和专业的数据库开发者履行。他们通常具备数学、计算机科学或者系统设计背景,往往有使用大型机数据库的经验。其中很多人编程经验丰富,已经编写过大量由数千行代码的数据库应用程序。(他们因其工作的性质和重要性,通常都会工作过度。)
那时,设计数据库系统的人员必须有过硬的学历背景,因为他们开发的大部分系统都将在全公司范围内运用。由于编程语言和他们所采用的数据库应用程序异常复杂,即便只是为公司内部的一个部门或者一个小公司开发数据库,数据库设计师仍然需要进行全面的正规训练。然而,随着技术进步,教育背景要求也在变化。
自20世纪80年代以来,数据库软件取得了长足发展。许多供应商都开发出了能运行在台式机上的软件,相比大型机软件,这些产品收集、存储和管理数据更见简易。随着计算处理能力的增强,以及对复杂度的要求提升,供应商还开发出了能在各种不同环境下让许多人访问和共享集中数据的软件,例如在局域网(LAN)和广域网(WAN)连接的计算机上运行的用户/服务器架构。公司或组织机构内部人员不再严格依赖大型机数据库或由中央IT部门来满足他们的信息需求。
笔记本电脑的出现和广泛应用,以及互联网的普及也推动了数据库软件的发展。笔记本电脑已经变得非常强大,拥有数GB的内存和存储容量以及飞速的处理能力。在很多地方,笔记本电脑已经非常普及,甚至完全取代了台式电脑。这也使得人们在咖啡屋、餐馆和机场等常见的地方能够连上互联网。(我甚至无须提及各色能连上互联网的设备——这当有别的书来另行讨论。)如此,软件供应商和企业双双推动在互联网上运营和管理数据库,以让更多的人能够随时随地访问到他们的应用程序和数据。看看未来几年这种想法的进展如何,将十分有趣。
供应商不断地在他们的数据库软件中添加新功能,增强工具集,这使得数据库开发人员能够创建更强大、更灵活的数据库应用。他们也在不断地提升软件的易用性,使更多人能够创建自己的数据库应用。当下的数据库软件大大简化了创建高效的数据库结构和直观的用户界面的过程。
大部分程序都提供示例数据库结构,让用户根据自身的特定需求来复制或修改。虽然用户一开始可能认为,以这些示例结构为基础建立新数据库十分方便,但现在你应当停下来,重新思考一下这一举动。为什么?因为你有可能在不知不觉中创建出一个不当、低效、不完整的设计。最终可能会在一个自认为可信赖的数据库设计上遇到问题。当然,这就提出了一个问题:“我会遇到什么类型的问题呢?”
数据库中出现的大部分问题可以归为下面两类:应用问题和数据问题。应用问题包括数据输入/编辑表单有问题、令人困惑的菜单和工具栏、令人难以理解的对话框和烦琐的任务顺序。这些问题主要是因为数据库开发人员经验不足、不熟悉良好的应用设计方法或者不了解用来实现数据库的软件。这类问题很常见,妥善解决这类问题很重要,不过,这不在本书的讨论范围之内。
注意:解决遇到的许多应用问题的一个好方法就是,购买并研读一本第三方“开发者”写的涉及你采用的软件的书。这类书籍探讨了应用设计问题、高级编程技术以及可以用来改善优化一个应用的各种技巧和窍门。具备了这些新技能,就能改善和微调数据库应用程序,使之能正确、平稳和有效地运行。
另一方面,数据问题包括诸如数据缺失、数据不正确、数据不匹配以及信息不精准。糟糕的数据库设计通常是造成这类问题的根源。如果一个数据库结构不合理,就没法满足一个组织机构的信息需求。虽然出现糟糕的设计通常是由于数据库开发者未掌握良好的数据库设计原则,但是这并不能表明开发者水平低。很多人,包括经验丰富的程序员和数据库开发人员,很少或从未接受过任何形式的数据库设计方法方面的指导。很多人甚至从未意识到存在设计方法。数据问题和糟糕的设计是本书将解决的问题。
第三版中的新变化
笔者修订了这一版,提升了可读性,更新和扩展了已有内容,增加了新内容,提高了本书的教学价值。第三版中的一些新变化如下:
重写了部分文字,使意思更加清晰,便于读者理解。
修订了图表内容,增强实用性。
更新了对数据类型的讨论。
推荐阅读书目中涵盖了书籍的最新版本和各书的国际标准书号(ISBN)。
增加了关于规范化的附录。这一部分简明地解释了规范化这一概念,以及如何融入到本书所讨论的设计过程之中。
参阅本书中引用的其他内容,请访问网址:informit.com/titles/0321884493。
读者群体
阅读本书,不需要拥有数据库设计背景。因为读者拿起本书,就是为了学习如何恰当地设计数据库。如果你初涉数据库管理领域,正在考虑开发一个自己的数据库,那本书就有价值。从一开始就掌握正确的数据库创建方法,比通过反复试验试错来学习要好得多。相信我,后者需要的时间长得多。
如果你和数据库编程打过一段时间的交道了,正打算为公司或企业开发新数据库,那么应该读一读本书。也许你心里大致有数,优良的数据库结构应该是个什么样子,但不是很确定数据库开发人员要如何实现有效的设计。也许你是一个程序员,按照一些基本原则,已经创建过不少的数据库,但是总免不了要编写大量的程序代码,才能让数据库正常运行。如果你属于这种情况,那么本书也值得一读。
即使你已经有了数据库设计方面的背景,最好也能读一读本书。也许你大学时学过数据库设计方法,或者上过数据库相关课程,课上讨论过数据库设计,但已记不清细节,或没有理解某些设计过程。不过,只要学习并理解了本书中讲述的设计过程,那些曾经困惑之处都将豁然开朗。
本书也适用于经验丰富的数据库开发人员和程序员。虽然你可能已经了解了书中讲述的设计过程的诸多方面,但是读下去就可能发现一些以前从未遇到或考虑过的问题。通过阅读此书,可能受到启发,产生一些关于如何设计数据库的新想法,因为本书从不同的角度阐释了许多你所熟知的设计过程。至少,本书可当作一本不错的数据库设计复习教程。
本书的目的
总体来说,整个数据库开发过程分为三个阶段。
1.段逻辑设计:涉及定义表及其字段、建立主键和外键、建立表之间的关系,并确定和建立各级数据完整性。
2.物理实现:涉及建表、建立主键字段和表之间的关系,并使用恰当的工具来实现各级数据完整性。
3.应用开发:涉及创建一个应用,能让单个用户或群组用户利用存储在数据库中的数据。此阶段本身又可划分为多个独立的步骤,譬如确定终端用户任务和适当的序列、确定输出报告的信息需求,以及为应用导航创建一个菜单系统。
始终应该先从逻辑设计阶段着手,并尽可能彻底地执行所做的设计。在建立了健全的结构之后,就能应用到所选的任何数据库软件中了。在物理实现阶段,可能会需要根据自身所选软件的利弊和优劣,适当调整数据库结构。甚至可能会为了提升数据处理性能而调整数据库结构。首先进行逻辑设计可确保在确定数据库结构时,做出有意识的、有条理的、清晰明智的决策。如此一来,也有助于减少在物理实现和应用开发阶段进一步调整数据库结构的次数。
本书只涉及整体开发过程中的逻辑设计阶段。本书的重点是,在摈弃绝大部分数据库设计书籍采用的高深、正统的方法论的前提下,阐释关系数据库的设计过程。笔者尽量避开这些复杂的方法论,转而呈现一种相对简单明白的设计方法。笔者也采用了一种简单直接的数据建模方法作为此设计方法的辅助,以尽可能清晰的语言、尽量少的技术术语,讲述整个设计过程。
市面上的许多数据库设计相关书籍都包含在特定的数据库产品中实现数据库的章节。有些书籍甚至会将设计和实现阶段混为一体。(笔者非常不赞成这种做法,而且一直坚持认为一个数据库开发者应当将逻辑设计和实现阶段分开,以确保最大程度的集中、高效。)这类书籍的主要缺陷是,如果读者没有使用书中提到的特定数据库软件或编程语言,就很难从有关数据库实现的章节中获得任何有用或相关的信息。因此,笔者才决定编写一本专注于数据库逻辑设计的书籍。
相比同一主题的其他书籍,本书可能更易读。市面上的许多数据库设计相关书籍技术性很强,可能难于理解吸收。笔者认为,如果没有读过计算机科学专业,不是一个数据库理论家或者是有经验的数据库开发人员,这些书绝大部分让人困惑,望而生却。本书中的设计原则易于理解、记忆,书中所采用的示例也非常常见,具有通用性,适用于各种情况。
笔者在全美巡讲的时候,碰到的大部分人都表示,他们想学习创建合理的数据库结构的方法,而不用掌握范式和高等数学理论。相比在特定数据库软件应用程序中实现一种结构,很多人更关注如何优化他们的数据库结构和实施数据完整性。在本书中将学习如何创建高效的数据库结构、如何实施多层数据完整性,以及如何用几近无限量的方式将表关联在一起以获取信息。不必惊慌,这没你想象的那么难。通过了解一些关键术语、学习和使用一组特定的常见技巧和概念,就能做到这一切。
同时,读者将学习如何分析和利用现有数据库、确定信息需求,以及确定和实施业务规则。这些话题都很重要,因为许多人也许会沿用旧的数据库,需要利用通过阅读此书所学到的东西来改进。不过,就算从头开始创建一个数据库,这些话题照样很重要。
读完本书,也就掌握了创建一个优良的关系数据库结构所必不可少的知识和工具。笔者坚信,这整套方法将对多数数据库开发人员和他们要创建的数据库都有效。
如何阅读本书
不管你是新手还是专业人士,强烈推荐按顺序从头读到尾。如此一来,就不会脱离上下文语境,避免困惑——疑惑通常是由于一开始没能看到本书的全局造成的。此外,在重点研读某个章节之前,先整体了解整个过程,不失为一个好主意。
当然,如果读本书是为了复习设计技巧,那么也可以只读那些感兴趣的章节。虽然笔者已经尽可能地让每一章能独立成篇,但仍然推荐读者能将整本书通读一遍,以确保不会错过任何至今为止你从未想到过的、有关数据库设计的新思想或新点子。
本书的组织结构
下面是本书各个部分和各个章节所述内容的简单概述。
第1部分:关系数据库设计
该部分介绍数据库、数据库设计的基本思想,以及一些为了学习和理解本书所讲述的设计过程所需熟知的术语。
第1章 关系数据库
本章简单地讨论了数据库类型、常见的数据库模型和关系数据库的发展简史。
第2章 设计目标
本章探讨了需要关注设计的原因,指出了优良设计的目标和优点,并简单介绍了规范化和范式。
第3章 术语
本章涵盖了为了学习和理解本书中所讲述设计方法所必须掌握的术语。
第2部分:设计过程
该部分详细论述了数据库设计过程的方方面面,包括创建表结构、指定主键、设立字段说明、建立表间关系,以及建立视图和各种不同层次的数据完整性。
第4章 概念性概述
本章概述了设计过程,阐释了设计过程的各个部分是如何衔接在一起的。
第5章 大幕开启
本章介绍了如何定义数据库的宗旨和任务目标,并且两者都是数据库创建初始阶段的重心。
第6章 分析现有数据库
本章涵盖了现行数据库存在的问题。探讨了为什么要分析现行数据库、如何看待收集和呈现数据的现有方法、为何和如何与用户和管理人员交谈,以及如何编写初始字段列表。
第7章 建立表结构
本章涉及的内容包括诸如界定数据库该记录什么内容,将字段与表联系起来,以及精简表结构。
第8章 键
本章涉及内容包括键的概念以及其对设计过程的重要性,还有如何为每个表定义候选键和主键。
第9章 字段说明
本章探讨了一个众多数据库开发人员容易忽略的问题。字段说明除了指示每个字段如何创建之外,还决定了每个字段取值的特性。本章涉及的内容包括字段说明的重要性、说明特性的类型和如何定义数据库中每个字段的说明。
第10章 表关系
本章阐释了表间关系的重要性、关系类型、设立关系和建立关系特征。
第11章 业务规则
本章讲述了业务规则的类型、确定和设立业务规则,以及使用验证表。业务规则对任何数据库都非常重要,原因在于它决定了一个方面的数据完整性。
第12章 视图
本章探讨了视图的概念及其重要的原因,介绍了视图类型以及如何确定和建立视图。
第13章 评审数据完整性
本章对前面章节所定义和讨论过的各个层次的数据完整性做了评审。读者应该认识到,评审数据库结构的最终设计,能有效确保数据完整性尽可能完善。
第3部分:其他数据库设计事项
该部分讨论了在设计过程中如何避免设计不当以及打破规则的问题。
第14章 设计不当——禁忌事项
本章涵盖了应避免出现的设计问题类型,比如平面文件设计和电子表格设计。
第15章 打破规则
本章讨论了一些需要对设计过程的技巧和概念进行适当调整的特例,介绍了何种情况下应考虑放宽规则,以及如何进行调整。
第4部分:附录
附录部分提供了一些对了解数据库过程和开发数据库时有用的信息。
附录A 思考题答案
本部分中包含了从第1章到第12章所有思考题的答案。
附录B 数据库设计过程中的示意图
本部分提供了整个设计过程所使用的示意图。
附录C 设计指南
本部分列出了本书中出现的各种设计指南,以便读者查阅。
附录D 文档形式
本部分提供了字段说明、业务规则规范、视图规范表的空白表格,以便读者使用。
附录E 数据库设计示意图符号
本部分包含了本书中出现过的所有示意图符号,以便读者查阅。
附录F 设计样本
本部分介绍了一些数据库设计样本,读者可以从中借鉴一二。
附录G 关于规范化
本部分介绍了作者是如何将规范化融入本书的设计方法中的。
附录H 推荐书目
本部分列出了读者深入学习数据库技巧所应阅读的一些书籍。
术语表
本部分为本书中用到的所有术语给出了简明的定义。
注意:务必阅读本部分!
关于本书中的示例和技巧
本书中运用了大量示例。笔者在选择示例时,也尽量确保它们普遍通用、切中主题。不过,读者难免还是会发现一些示例过于简单、不够完整甚或有时是错误的。无论读者相信与否,笔者确实是有意为之。
之所以运用了一些存在错误的示例,是为了将特定概念或技巧阐述清楚。缺少这些示例,读者就无法理解如何使用对应概念或技巧,也无法看到预料中的结果。一些示例过于简单,同样是因为重点在于对应技巧或概念,而非示例本身。例如,设计一个跟踪订单的数据库有很多种方法。但是,本书中使用的订单跟踪数据库示例的结构却比较简单,原因是重点仅在于设计过程,而不是建立一个详尽的订单跟踪数据库系统。
所以,笔者在此力图真正强调的是:
重点在于概念或技巧及其预期结果,而非所使用的示例。
新的学习方法
下面介绍一种学习设计过程(或者任何相关的知识)的非常有用的新方法,这是笔者在自己开设的数据库设计课上发现的。
把设计过程中用到的所有技巧当作一套工具,每个工具(或技巧)都有特定的用途。这里的想法就是,一旦掌握了一个工具的一般用途,就可以在任意情况下使用该工具。原因在于,每种情况下使用该工具的方式都是一样的。
就拿活动扳手来说。一般说来,活动扳手用来拧开或拧紧螺钉。调整扳手头部的调校螺丝,让活动扳手的开口尺寸套上给定的螺母。现在,既然已经清楚了它的用法,就找几个螺钉尝试一下。比如,户外椅的椅腿、发动机的风扇皮带罩、空调室外机的侧板或铁门的铰链板。是否发现,无论在哪遇到螺栓和螺母,始终能用相同的方法紧固和拧开螺母?
设计数据库所用的工具也是如此。一旦懂得了一个工具的一般用法,无论遇到怎样的情况,都能奏效。例如,想想分解字段值的工具(或技巧)。在CUSTOMERS表中有一个Address值,这个表包含了特定顾客的街道地址、城市、州以及邮编的信息。你会发现很难在数据库中使用这个字段,因为它包含了多个数据项。无疑,检索特定城市的信息或通过特定邮编对信息分类会非常困难。
解决这一难题的方法是将Address字段分解成更小的字段。先识别组成该字段值的各个项,再将每个项当作一个独立的字段,问题就迎刃而解了。就是这么简单!这个过程中包含了一个“工具”,现在可以将它应用到任何包含多个不同数据项的字段中,比如下面的字段样本。下列表中展示了分解过程的结果。
当前字段名 实例值 新字段名
Address 7402 Kingman Dr.. Seattle.
WA98012 Street Address. City.
State. Zip Code
Phone (2006)555-5555 Area Code. Phone Number
Name Michael J. Hernandez First Name. Middle Initial. Last Name
EmployeeCode ITDEV2516 Department, Category.
注意:第7章“建立表结构”中对分解字段值做了更为详细的介绍。
可以用相同的方式使用本书的设计过程中呈现的所有技巧(“工具”)。无论需要创建什么类型的数据库,使用这些技巧,都能设计出完善的数据库结构。但是要切记:
重点在于概念或技巧及其预期结果,而非所使用的示例。