数据库系统概论(第五版)——数据库设计

0 前言

数据库是大数据领域非常重要的一个部分,并且随着数据量不断增大和数据结构更加复杂,数据库技术将变得日益重要。笔者本科时修过数据库原理的课程,但当时仅从应用的角度去看,甚至都不能算有角度,只能说学了一点sql语句,甚是浅显,说一无所知都不过分。目前笔者处在研究生阶段,研究方向为大数据与数据挖掘,经过学习和探索,笔者认为数据库是本领域最重要的三项技术之一,其他两项分别为数据挖掘算法和云计算技术,有机会也会进行探讨与分享。本系列内容将是我在重读王珊、萨师煊编著,高等教育出版社出版的《数据库系统概论(第5版)》的过程中的笔记和思考,笔者将从数据库原理、数据库设计与编程、关系数据库原理和数据库技术的应用四个方面进行梳理。

数据库设计

一 数据库设计概述

数据库设计广义上是指数据库及其应用系统的设计,狭义上是设计数据库本身,即设计数据库的各级模式并建立数据库。

1.数据库设计的一般定义:对于一个给定的应用环境,构造优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。

2.数据库设计的目标:为用户和各种应用系统提供一个信息基础设施和高效的运行环境,包括数据库数据的存取效率、数据库存储空间的利用率、数据库系统运行管理的效率。

3.数据库设计的特点:三分技术、七分管理、十二分基础数据;结构设计和行为设计相结合,又称是数据设计和处理设计相结合;强调设计过程中数据库设计和应用系统设计的密切结合。

4.数据库设计的方法:早期使用手工与经验相结合的方法;新奥尔良方法、基于E-R模型的设计方法、3NF(第三范式)的设计方法、面向对象的数据库设计方法、统一建模语言方法等。

5.数据库设计的基本步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护。

二 需求分析

需求分析简单说就是分析用户的需求,明确用户要管理的数据和需要对数据采取的处理。

1.需求分析的任务:通过详细调查现实世界要处理的对象,充分了解原有系统的工作概况,明确用户的各种需求,在此基础上确定新系统的功能。重点是“数据”和“处理”,获得用户对数据库的信息要求(数据要求)、处理要求(功能和性能)、安全性和完整性要求

2.需求分析的挑战:用户需求的准确表达、需求的动态变化、设计人员对需求的专业化理解。

3.需求分析的方法:跟班作业,开调查会,请专人介绍、询问、设计调查表请用户填写、查阅记录。

4.数据字典:是进行详细的数据收集和数据分析所获得的主要成果。是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程。

(1)数据项:是数据库中数据的最小组成单位,包括数据项名、数据项含义、数据类型、长度、取值范围、与其他数据项之间的关联等。

(2)数据结构:由若干数据项组成,反映数据之间的组合关系,包括数据结构名、数据结构含义、组成。

(3)数据流:是数据结构在系统内传输的路径,包括数据流名、数据流来源、数据流去向等。

(4)数据存储:是数据结构停留或保存的地方,也是数据流的来源和去向之一,包括数据量、存取频度、存取方式等。存取方式指是批处理还是联机处理,是检索还是更新,是顺序检索还是随机检索等。

(5)处理过程:对数据的处理过程,一般用判定表或判定树来描述。包括处理过程名、输入和输出等,在数据字典中需要简要说明该处理过程的功能和处理要求,功能是指该处理过程用来做什么,处理要求是指处理频度要求,如单位时间里处理多少事务、多少数据量、响应时间要求等。

三 概念结构设计

将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计。

1. 概念模型:是对用户应用需求在信息世界的抽象,具有以下特点。

(1)真实、充分反映现实世界,包括事物和事物之间的联系。

(2)易于理解,可以用它和不熟悉计算机的用户交换意见。

(3)易于更改,应对环境和应用要求改变后的模型修改及扩充。

(4)易于向关系、网状、层次等各种数据模型转换。

2. E-R模型:由P.P.S. Chen提出,是用E-R图来描述现实世界的概念模型,涉及的主要概念包括实体、属性、实体之间的联系等。实体型是指某一类型实体的集合,实体型与实体的关系类似于Java中类和对象的关系。

(1)实体之间的联系:有两大类,分别是实体内部的联系和实体之间的联系,实体内部的联系是指实体的各属性之间的联系,实体之间的联系是指不同实体型的实体之间的联系。

      两个实体型之间的联系:一对一联系(1:1),例如班级和班长,一个班级有一个班长,一个班长对应一个班级;一对多联系(1:n),例如班级和学生,一个班级多个学生,一个学生只能对应一个班级;多对多联系(m:n),例如学生和课程,一个学生对应多门课程,一门课程也对应多个学生。

      两个以上的实体型之间的联系:一对一、一对多、多对多。例如课程、教师与参考书三个实体型,一门课程对应多个教师,使用若干本参考书,一个教师只教一门课程,一本参考书只供一门课程使用。

      单个实体型内的联系:同一实体型内的各实体之间也可以存在一对一、一对多和多对多的联系。例如职工实体型内部具有领导与被领导的联系,即某一职工领导若干名职工,一个职工仅被另外一个职工直接领导。

      联系的度:指参与联系的实体型的数目。两个实体型之间的联系度为2,称为二元联系,三个实体型之间的联系度为3,称为三元联系,N个实体型之间的联系度为N,称为N元联系。

(2)E-R图:实体型用矩形表示,属性用椭圆形表示,连接在实体型上,联系用菱形表示,实体型连接在联系上,并在连线上注明联系的类型(1:1、1:n或m:n)。下面给出一个E-R图的实例。

3. 扩展的E-R模型:根据现实世界实体之间的真实关联,对E-R模型中联系的类型和数量约束进行扩展。

(1)ISA联系:父类-子类的联系称为ISA联系,表示“is a”的语义,例如研究生is a学生,本科生is a学生。ISA联系用三角形表示,子类继承父类的所有属性,还可以有自己的属性。ISA联系根据分类属性的值将父实体型中的实体分派到子实体型中,例如学生是研究生还是本科生由“学生类别”这个分类属性的值决定。不相交约束描述父类中的一个实体不能同时属于多个子类中的实体集,用ISA联系三角形符号内加一个叉号来表示。完备性约束描述父类中的一个实体是否必须是某一个子类中的实体,如果是则叫完全特化,用双线连接表示,否则叫做部分特化,用单线连接表示。

(2)基数约束:是对实体之间一对一、一对多和多对多联系的细化,用来说明一个实体可以在联系中出现的最少次数和最多次数(是一个范围),用一个数对min..max表示。例如图中(c)一个学生只能有一个班级,即为1..1,一个班级有30-40个学生,即30..40。

(3)Part-of联系:表明某个实体型是另外一个实体型的一部分。例如轮子实体是汽车实体的一部分,即Part-of汽车实体。

有两种类型:一种是整体实体如果被破坏,部分实体仍然可以独立存在,称为非独占的Part-of联系,例如汽车和轮子,非独占的Part-of联系可以通过基数约束来表示;另一种是独占的Part-of联系,即整体实体如果被破坏,部分实体不能存在,在E-R图中部分实体用弱实体型表示,即表示一个实体型的存在依赖于其他实体型的存在,否则称为强实体型,用双矩形表示弱实体型,用双菱形表示识别联系。

以下图为例,贷款和还款是独占的Part-of联系,还款必须依赖贷款存在,没有贷款就没有还款;房间和楼房也是独占的Part-of联系,如果房间号不包含楼号,则房间号不能作为(唯一标识),房间是个弱实体。

4. UML:一种统一建模语言,提供了多种类型的模型描述图。UML中的类大致对应E-R图中的实体,具有面向对象的特征,描述对象的属性和方法。具有实体型、实体的码(用PK标注)、联系、基数约束、子类等。

5. 概念结构设计:(1)确定实体、属性、联系,形成E-R图;(2)解决子E-R图之间的冲突,集成E-R图。

(1)实体与属性的划分:为简化E-R图,现实世界的事物能作为属性对待的尽量作为属性对待。(原则)属性不可分;属性不能与其他实体具有联系。

例. 销售管理子系统E-R图的设计。

(a)定义实体属性:

顾客:{顾客号(标注下划线),顾客名,地址,电话,信贷状况,账目余额}

订单:{订单号(标注下划线),顾客号,订货项数,订货日期,交货日期,工种号,生产地点}

订单细则:{订单号(标注下划线),细则号(标注下划线),零件号,订货数,金额}

应收账款:{顾客号(标注下划线),订单号(标注下划线),发票号,应收金额,支付日期,支付金额,当前余额,贷款限额}

产品:{产品号(标注下划线),产品名,单价,重量}

折扣规则:{产品号(标注下划线),订货量(标注下划线),折扣}

(b)销售管理子系统的E-R图。

(实体联系图)

实体属性图(略)

(2)E-R图的集成:对大型信息系统自顶向下进行需求分析,再自底向上设计概念结构。首先设计各子系统的分E-R图,然后将它们集起开,得到全局E-R图。

第一步:合并。解决分图之间的冲突。

三类冲突:属性冲突(属性域和属性取值单位)、命名冲突(同名异义和异名同义)、结构冲突(同一对象抽象层次不同、同一实体属性个数或次序不同、实体间的联系不同)。

第二步:修改和重构。消除不必要的冗余。

冗余的数据是指可由基本数据导出的数据,冗余的联系时指可由其他联系导出的联系。消除冗余的方法:分析方法和规范化理论(提取实体属性之间的依赖关系,建立函数依赖集,进行规范化处理)。

四 逻辑结构设计

1. 逻辑结构设计的任务是把E-R图转换为合适的逻辑结构,例如将E-R图转换为关系模型。

2. E-R图向关系模型转换的主要问题是:(1)将实体型和实体间的联系转换为关系模式;(2)确定关系模式的属性和码。

3. 一个1:1、1:n、m:n联系或有三个及以上实体间的联系均可以转换为一个关系模式,与该联系相连的各实体的码及联系本身的属性转换为关系的属性,具有相同码的关系模式可合并。

4. 数据库逻辑设计的结果不是唯一的,可以通过确定数据依赖、极小化处理数据依赖、对模式进行合并或分解进行数据模型优化。(水平分解是指将关系的元组分为若干子集;垂直分解是指把关系模式的属性分解为若干子集。)

5. 逻辑结构设计阶段除了设计数据库模式外,还需要根据局部应用需求,结合具体关系数据库管理系统的特点设计用户子模式,又称外模式。

6. 设计用户外模式时可以注重考虑用户的习惯与方便,具体包括:(1)使用符合用户习惯的别名;(2)可以对不同级别的用户定义不同的视图,以保证系统的安全性;(3)简化用户对系统的使用,可将复杂查询定义为视图。

五 物理结构设计

数据库的物理结构包括数据库在物理设备上的存储结构存取方法。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。

1. 数据库物理设计的内容和方法

——目标是设计优化的物理数据库结构(事务响应时间小、存储空间利用率高、事务吞吐率大)。

——内容包括选择物理数据库设计所需参数、确定系统的存取方法和存储结构。

2. 关系数据库物理设计的主要内容

——关系模式存取方法选择。

——确定设计关系、索引等数据库文件的物理存储结构。

——对物理结构进行评价,重点是时间和空间效率。

(1)关系模式存取方法选择

存取方法是快速存取数据库中数据的技术。常用的存取方法为索引方法和聚簇方法。

B+树索引存取方法:根据应用要求确定对关系的哪些属性列建立索引、哪些属性列建立组合索引、哪些索引要设计为唯一索引等。索引设计时还要考虑到系统维护索引的代价和查找索引的代价,如果一个关系的更新频率高,则关系上定义的索引数不能太多。

hash索引存取方法:一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,关系大小可预知且保持不变,则可选择hash存取方法。

聚簇存取方法:把某个属性或属性组上具有相同值的元组集中存放在连续的物理块中称为聚簇。该属性或属性组称为聚簇码。聚簇功能可大大提高按聚簇码进行查询的效率,例如查询信息系500个学生的名单信息,极端情况下,500名学生的数据源组分布在500个不同的物理块上,尽管对学生关系按所在系建有索引,由索引很快找到信息学院学生的元组标识,但在由元组标识去访问数据块时就要进行对500个物理块的500次I/O操作。如果将同一系的学生元组集中存放,则每读一个物理块可得到多个满足查询条件的元组,提高访问效率。在使用聚簇时,要注意聚簇码值相对稳定,以减少修改聚簇码值所引起的维护开销。

(2)确定数据库的存储

确定数据的存放位置和存储结构,包括确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。

要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。

将数据的易变部分与稳定部分、经常存取部分和存取效率较低的部分分开存放。例如将表和索引放在不同的磁盘上,将较大的表分放在两个磁盘上,将日志文件与数据库对象放在不同的磁盘上,以支持多用户多线程的访问。

设计人员和数据库管理员确定系统配置变量和存储分配参数,以对数据库进行物理优化。

(3)评价物理结构

对时间效率、空间效率、维护代价和各种用户要求进行权衡。

六 数据库的实施和维护

1. 数据库实施:数据库源代码-->调试产生目标模式-->组织数据入库。

(1)数据载入:数据量大、来源混杂、组织方式结构格式有差异,应设计数据录入子系统、对数据进行安全性检验,还提供不同数据库管理系统间数据转换的工具。

(2)应用程序的编码和调试:应与数据库设计同时进行。

2. 数据库的试运行:检测功能是否满足设计要求,测试系统的性能指标。注意要分期分批组织数据入库,逐步增加数据量,逐步评价,做好数据库的转储和恢复工作。

3. 数据库的运行和维护:主要由数据库管理员完成,进行数据库的转储和恢复、数据库的安全性和完整性控制、数据库性能监督分析和改造、数据库重组织与重构造。

你可能感兴趣的:(数据库系统概论(第五版)——数据库设计)