设计 Flashcards
数据库设计
广义地讲,是数据库及其应用系统的设计,即设计整个的数据库应用系统。狭义地讲,是设计数据库本身,即设计数据库的各级模式并建立数据库,这是数据库应用系统设计的一部分。
(本书重点是讲狭义的数据库设计。)
设计一个好的数据库与设计一个好的数据库应用系统是密不可分的。一个好的数据库结构是应用系统的基础。特别在实际的系统开发项目中两者更是密切相关、并行进行的。
数据库应用系统
使用数据库的各类信息系统。
数据库设计的定义
对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
信息管理要求是指在数据库中应该存储和管理哪些数据对象;数据操作要求是指对数据对象需要进行哪些操作,如查询、增、删、改、统计等操作。
数据库设计的目标
为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。
高效率的运行环境包括:数据库数据的存取效率、数据库存储空间的利用率、数据库系统运行管理的效率等都是高的。
数据库建设
数据库应用系统从设计、实施到运行与维护的全过程。
数据库建设的基本规律
数据库建设和一般的软件系统的设计、开发和运行与维护有许多相同之处,更有其自身的一些特点。
1。数据库建设的基本规律。"三分技术,七分管理,十二分基础数据"。数据库建设是硬件、软件和干件(技术与管理的界面)的结合。
在数据库建设中不仅涉及技术,还涉及管理。要建设好一个数据库应用系统,开发技术固然重要,但是相比之下则管理更加重要。这里的管理不仅包括数据库建设作为一个大型的工程项目本身的项目管理,而且包括该企业(即应用部门)的业务管理。
企业的业务管理更加复杂,也更重要,对数据库结构的设计有直接影响。因为数据库结构(即数据库模式)是对企业中业务部门的数据以及各个业务部门之间数据联系的描述和抽象。业务部门的数据以及各个业务部门之间数据联系是和各个部门的职能、整个企业的管理模式密切相关的。
一个企业数据库建设的过程是企业管理模式的改革和提高的过程。只有把企业的管理创新做好,才能实现技术创新,才能建设好一个数据库应用系统。
十二分基础数据则强调了数据的收集、整理、组织和不断更新是数据库建设中的重要环节。
基础数据的收集、入库是数据库建立初期工作量最大、最烦琐、最细致的工作。在以后数据库运行过程中更需要不断地把新的数据加到数据库中,使数据库成为一个"活库",否则就成了"死库"。数据库一旦成了"死库",系统也就失去了应用价值,原来的投资也就失败了。
2。从软件设计的角度来看,数据库设计应和应用系统设计相结合。也就是说,整个设计过程中要把数据库结构(数据)设计和行为(对数据的处理)设计密切结合起来。
数据库设计方法
大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。它要求从事数据库设计的专业人员具备多方面的技术和知识。主要包括: 计算机的基础知识; 软件工程的原理和方法; 程序设计的方法和技巧; 数据库的基本知识; 数据库设计技术; 应用领域的知识。
数据库设计方法
早期数据库设计主要采用手工加经验相结合的方法。设计的质量往往与设计人员的经验与水平有直接的关系。数据库设计是一种技艺,缺乏科学理论和工程方法的支持,设计质量难以保证。常常是数据库运行一段时间后又不同程度地发现各种问题,需要进行修改甚至重新设计,增加了系统维护的代价。
为此,人们努力探索,提出了各种数据库设计方法。例如:
1。新奥尔良方法。把数据库设计分为若干阶段和步骤,并采用一些辅助手段实现每一过程。运用软件工程的思想,按一定的设计规程用工程化方法设计数据库。属于规范设计法。
规范设计法从本质上看仍然是手工设计方法,其基本思想是过程迭代和逐步求精。
2。基于E-R模型的数据库设计方法。用E-R模型来设计数据库的概念模型,是数据库概念设计阶段广泛采用的方法。
3。3NF(第三范式)的设计方法。用关系数据理论为指导来设计数据库的逻辑模型,是设计关系数据库时在逻辑阶段可以采用的一种有效方法。
4。ODL(Object Definition Language)方法。面向对象的数据库设计方法。用面向对象的概念和术语来说明数据库结构。可以描述面向对象数据库结构设计,可以直接转换为面向对象的数据库。
数据库设计工具
数据库设计工具已经实用化和产品化。
例如:Designer2000和PowerDesigner分别是ORACLE公司和SYBASE公司推出的数据库设计工具软件,这些工具软件可以辅助设计人员完成数据库设计过程中的很多任务,已经普遍地用于大型数据库设计之中。
数据库设计的阶段
需求分析;
概念结构设计;
逻辑结构设计;
物理结构设计;
数据库实施;
数据库运行和维护。
在数据库设计过程中,需求分析和概念设计可以独立于任何数据库管理系统进行。逻辑设计和物理设计与选用的DBMS密切相关。
数据库设计开始之前,首先必须选定参加设计的人员,包括系统分析人员、数据库设计人员、应用开发人员、数据库管理员和用户代表。系统分析和数据库设计人员是数据库设计的核心人员,他们将自始至终参与数据库设计,他们的水平决定了数据库系统的质量。用户和数据库管理员在数据库设计中也是举足轻重的,他们主要参加需求分析和数据库的运行和维护,他们的积极参与(不仅仅是配合)不但能加速数据库设计,而且也是决定数据库设计质量的重要因素。应用开发人员(包括程序员和操作员)分别负责编制程序和准备软硬件环境,他们在系统实施阶段参与进来。
如果所设计的数据库应用系统比较复杂,还应该考虑是否使用数据库设计工具以及选用何种工具,以提高数据库设计质量并减少设计工作量。
设计一个完善的数据库应用系统是不可能一蹴而就的,它往往是上述6个阶段的不断往复。
这个设计步骤既是数据库设计的过程,也包括了数据库应用系统的设计过程。在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。
需求分析阶段
进行数据库设计首先必须准确了解与分析用户需求(包括数据与处理)。
需求分析是整个设计过程的基础,是最困难、最耗费时间的一步。需求分析是否做得充分与准确,决定了在其上构建数据库的速度与质量。需求分析做得不好,甚至会导致整个数据库设计返工重做。
简单地说就是分析用户的要求。是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
概念结构设计阶段
是整个数据库设计的关键,通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
逻辑结构设计阶段
将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化。
物理结构设计阶段
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
数据库实施阶段
设计人员运用DBMS提供的数据库语言(如SQL)、工具及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
数据库运行和维护阶段
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行客观的评价、调整与修改。
数据库设计过程中的各级模式
数据库设计的不同阶段形成数据库的各级模式。需求分析阶段,综合各个用户的应用需求。
在概念设计阶段形成独立于机器特点,独立于各个DBMS产品的概念模式,在本篇中就是E-R图。
在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式。
在物理设计阶段,根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
需求分析的任务(设计目标)
通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
需求分析阶段所调查的内容
调查的重点是"数据"和"处理",通过调查、收集与分析,获得用户对数据库如下要求:
1。信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
2。处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。
3。安全性与完整性要求。
确定用户的最终需求是一件很困难的事,这是因为一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此往往不能准确地表达自己的需求,所提出的需求往往不断地变化。另一方面,设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须不断深入地与用户交流,才能逐步确定用户的实际需求。
需求分析的方法
进行需求分析首先是调查清楚用户的实际要求,与用户达成共识,然后分析与表达这些需求。
调查用户需求的步骤
1。调查组织机构情况。包括了解该组织的部门组成情况、各部门的职责等,为分析信息流程做准备。
2。调查各部门的业务活动情况。包括了解各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么,这是调查的重点。
3。在熟悉了业务活动的基础上,协助用户明确对新系统的各种要求,包括信息要求、处理要求、安全性与完整性要求,这是调查的又一个重点。
4。确定新系统的边界。对前面调查的结果进行初步分析,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。由计算机完成的功能就是新系统应该实现的功能。
调查方法
1。跟班作业。通过亲身参加业务工作来了解业务活动的情况。
2。开调查会。通过与用户座谈来了解业务活动的情况及用户需求。
3。请专人介绍。
4。询问。对某些调查中的问题,可以找专人询问。
5。设计调查表请用户填写。如果调查表设计得合理,这种方法是很有效的。
6。查阅记录。查阅与原系统有关的数据记录。
做需求调查时,往往需要同时采用上述多种方法。但无论使用何种调查方法,都必须有用户的积极参与和配合。
调查了解了用户需求以后,还需要进一步分析和表达用户的需求。在众多的分析方法中,结构化分析(SA)是一种简单实用的方法。SA方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。SA方法把任何一个系统都抽象为(数据来源-(数据流)>处理-(数据流)>数据输出,处理数据存储)的形式。要反映更详细的内容,可将处理功能分解为若干子功能,每个子功能还可以继续分解,直到把系统工作过程表示清楚为止。在处理功能逐步分解的同时,它们所用的数据也逐级分解,形成若干层次的数据流图。
数据流图表达了数据和处理过程的关系。在SA方法中,处理过程的处理逻辑常常借助判定表或判定树来描述。系统中的数据则借助数据字典(DD)来描述。
对用户需求进行分析与表达后,必须提交给用户,征得用户的认可。
数据字典的内容
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程5个部分。
其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
数据字典
数据流图表达了数据和处理的关系,数据字典则是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。数据字典在数据库设计中占有很重要的地位。
数据项
数据项是不可再分的数据单位。
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
其中,"取值范围"、"与其他数据项的逻辑关系"定义了数据的完整性约束条件,是设计数据检验功能的依据。
可以用关系规范化理论为指导,用数据依赖的概念分析和表示数据项之间的联系。即按实际语义,写出每个数据项之间的数据依赖,它们是数据库逻辑设计阶段数据模型优化的依据。
数据结构
反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
数据描述={数据结构名,含义说明,组成:{数据项或数据结构}}
数据流
数据流是数据结构在系统内传输的路径。
数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
其中,"数据流来源"是说明该数据流来自哪个过程;"数据流去向"是说明该数据流将到哪个过程去;"平均流量"是指在单位时间(每天、每周、每月等)里的传输次数;"高峰期流量"则是指在高峰时期的数据流量。
数据存储
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。它可以是手工文档或手工凭单,也可以是计算机文档。
数据存储描述={数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}
其中,"存取频度"指每小时或每天或每周存取几次、每次存取多少数据等信息;"存取方式"包括是批处理还是联机处理、是检索还是更新、是顺序检索还是随机检索等;另外,"输入的数据流"要指出其来源;"输出的数据流"要指出其去向。
处理过程
处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。
处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
其中,"简要说明"中主要说明该处理过程的功能及处理要求。功能是指该处理过程用来做什么(而不是怎么做),处理要求包括处理频度要求,如单位时间里处理多少事务、多少数据量,响应时间要求等。这些处理要求是后面物理设计的输入及性能评价的标准。
强调两点
1。需求分析阶段的一个重要而困难的任务是收集将来应用所涉及的数据,设计人员应充分考虑到可能的扩充和改变,使设计易于更改,系统易于扩充。
2。必须强调用户的参与,这是数据库应用系统设计的特点。数据库应用系统和广泛的用户有密切的联系,许多人要使用数据库。数据库的设计和建立又可能对更多人的工作环境产生重要影响。因此用户的参与是数据库设计不可分割的一部分。在数据分析阶段,任何调查研究没有用户的积极参与是寸步难行的。设计人员应该和用户取得共同的语言,帮助不熟悉计算机的用户建立数据库环境下的共同概念,并对设计工作的最后结果承担共同的责任。
数据字典的作用
数据字典是关于数据库中数据的一种描述,在需求分析阶段建立,是下一步进行概念设计的基础,并在数据库设计过程中不断修改、充实和完善。
明确地把需求收集和分析作为数据库设计的第一阶段是十分重要的。这一阶段收集到的基础数据(用数据字典来表达)和一组数据流程图(DFD)是下一步进行概念设计的基础。
概念结构设计
将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。它是整个数据库设计的关键。
概念结构的主要特点
1。能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型。
2。易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键。
3。易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。
4。易于向关系、网状、层次等各种数据模型转换。
概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。
描述概念模型的有力工具是E-R模型。
数据库概念结构设计的重要性
数据库概念设计是整个数据库设计的关键,在需求分析阶段所得到的应用需求应该首先抽象为信息世界的结构(概念结构),以此作为各种数据模型的基础,才能更好地、更准确地用某一DBMS实现这些需求。
设计概念结构的方法
1。自顶向下。即首先定义全局概念结构的框架,然后逐步细化。
2。自底向上。即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构。通常分两步:第一步是抽象数据并设计局部视图,第二步是集成局部视图,得到全局的概念结构。
3。逐步扩张。首先定义最重要的核心概念结构,然后向外扩充,以递进方式逐步生成其他概念结构,直至总体概念结构。
4。混合策略。即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
其中最常采用的策略是自底向上方法,即自顶向下地进行需求分析,然后再自底向上地设计概念结构。
数据抽象
概念结构是对现实世界的一种抽象。所谓抽象是对实际的人、物、事和概念进行人为处理,抽取所关心的共同特性,忽略非本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。
一般有三种抽象
1。分类。定义某一类概念作为现实世界中一组对象的类型。这些对象具有某些共同的特性和行为。它抽象了对象值和型之间的"is member of"的语义。在E-R模型中,实体型就是这种抽象。
2。聚集。定义某一类型的组成成分。它抽象了对象内部类型和成分之间"is part of"的语义。在E-R模型中若干属性的聚集组成了实体型,就是这种抽象。更复杂的聚集即某一类型的成分仍是一个聚集。
3。概括。定义类型之间的一种子集联系。它抽象了类型之间的"is subset of"的语义。(吵类、子类)
原E-R模型中不具有概括,本书对E-R模型作了扩充,允许定义超类实体型和子类实体型。并用双竖边的矩形框表示子类,用直线加小圆圈表示超类-子类的联系。
概括有一个很重要的性质:继承性。子类继承超类上定义的所有抽象。子类可以增加自己的某些特殊属性。
概念结构设计的第一步
利用上面介绍的抽象机制对需求分析阶段收集到的数据进行分类、组织(聚集),形成实体、实体的属性,标识实体的码,确定实体之间的联系类型(1:1,1:n,m:n),设计分E-R图。
具体做法是:
1。选择局部应用。根据某个系统的具体情况,在多层的数据流图中选择一个适当层次的数据流图,作为设计分E-R图的出发点。让这组图中每一部分对应一个局部应用。由于高层的数据流图只能反映系统的概貌,而中层的数据流图能较好地反映系统中各局部应用的子系统组成,因此人们往往以中层数据流图作为设计分E-R图的依据。
2。逐一设计分E-R图。选择好局部应用之后,就要对每个局部应用逐一设计分E-R图。在前面选好的某一层次的数据流图中,每个局部应用都对应了一组数据流图,局部应用涉及的数据都已收集在数据字典中了。现在就是要将这些数据从数据字典中抽取出来,参照数据流图,标定局部应用中的实体、实体的属性、标识实体的码,确定实体之间的联系及其类型。
事实上,在现实世界中具体的应环境常常对实体和属性已经作了大体的自然划分。在数据字典中,"数据结构"、"数据流"和"数据存储"都是若干属性有意义的聚合,就体现了这种划分。可以先从这些内容出发定义E-R图,然后再进行必要的调整。
在调整中遵循的一条原则是:为了简化E-R图的处置,现实世界的事物能作为属性对待的,尽量作为属性对待。
符合什么条件的事物可以作为属性对待呢?划分准则:
1。作为"属性",不能再具有需要描述的性质。"属性"必须是不可分的数据项,不能包含其他属性。
2。"属性"不能与其他实体有联系,即E-R图中所表示的联系是实体之间的联系。
视图的集成的方式
各子系统的分E-R图设计好以后,下一步就是要将所有的分E-R图综合成一个系统的总E-R图。 视图集成可以有两种方式: 1。多个分E-R图一次集成。 2。逐步集成。用累加的方式一次集成两个分E-R图。 第一种方法比较复杂,做起来难度较大。 第二种方法每次只集成两个分E-R图,可以降低复杂度。
集成局部E-R图的步骤
无论采用哪种方式,每次集成局部E-R图时都需要分两步走:
1。合并。解决各分E-R图之间的冲突,将各分E-R图合并起来生成初步E-R图。
2。修改和重构。消除不必要的冗余,生成基本E-R图。
合并分E-R图,生成初步E-R图
各个局部应用所面向的问题不同,且通常是由不同的设计人员进行局部视图的设计,这就导致各个分E-R图之间必定会存在许多不一致的地方,称之为冲突。因此,合并分E-R图时并不能简单地将各个分E-R图画到一起,而是必须着力消除各个分E-R图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型。合理消除各分E-R图的冲突是合并分E-R图的主要工作与关键所在。
各分E-R图之间的冲突
主要有三类:属性冲突、命名冲突和结构冲突。
属性冲突
1。属性域冲突,即属性值的类型、取值范围或取值集合不同。
2。属性取值单位冲突。
属性冲突理论上好解决,但实际上需要各部门讨论协商,解决起来并非易事。
命名冲突
1。同名异义。即不同意义的对象在不同的局部应用中具有相同的名字。
2。异名同义(一义多名),即同一意义的对象在不同的局部应用中具有不同的名字。
命名冲突可能发生在实体、联系一级上,也可能发生在属性一级上。其中属性的命名冲突更为常见。处理命名冲突通常也像处理属性冲突一样,通过讨论、协商等行政手段加以解决。
结构冲突
1。同一对象在不同应用中具有不同的抽象。
解决方法通常是把属性变换为实体或把实体变换为属性,使同一对象具有相同的抽象。
2。同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同。
这是很常见的一种冲突,原因是不同的局部应用关心的是该实体的不同侧面。解决方法是使该实体的属性取各分E-R图中属性的并集,再适当调整属性的次序。
3。实体间的联系在不同的分E-R图中为不同的类型。(一对一或一对多,两个实体发生联系或三个实体发生联系)
解决方法是根据应用的语义对实体联系的类型进行综合或调整。
消除不必要的冗余,设计基本E-R图
在初步E-R图中,可能存在一些冗余的数据和实体间冗余的联系。所谓冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难,应当予以消除。消除了冗余后的初步E-R图称为基本E-R图。
消除冗余的方法
1。主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。
但并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息作为代价。因此在设计数据库概念结构时,哪些冗余信息必须消除,哪些冗余信息允许存在,需要根据用户的整体需求来确定。如果人为地保留了一些冗余数据,则应把数据字典中数据关联的说明作为完整性约束条件。
2。除分析方法外,还可以用规范化理论来消除冗余。在规范化理论中,函数依赖的概念提供了消除冗余联系的形式化工具。具体方法如下:
1)确定分E-R图实体之间的数据依赖。实体间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。
2)求函数依赖集FL的最小覆盖GL,差集为D=FL-GL。逐一考察D中的函数依赖,确定是否是冗余的联系,若是,就把它去掉。
由于规范化理论受到泛关系假设的限制,应注意下面两个问题:
1,冗余的联系一定在D中,而D中的联系不一定是冗余的。
2,当实体之间存在多种联系时,要将实体之间的联系在形式上加以区分。
数据库概念结构设计的步骤
概念结构的设计方法有多种,其中最经常采用的策略是自底向上方法,该方法的设计通常分为两个步骤:
1。抽象数据并设计局部视图。
2。集成局部视图,得到全局的概念结构。
数据库概念结构设计的重要性
数据库概念设计是整个数据库设计的关键,在需求分析阶段所得到的应用需求应该首先抽象为信息世界的结构(概念结构),以此作为各种数据模型的基础,才能更好地、更准确地用某一DBMS实现这些需求。