3.1数据库概念设计
数据库概念设计主要解决数据需求,即如何准确地理解数据需求,真实地把应用领域中要处理的数据组织、定义描述清楚,以支持数据库设计后续阶段的工作。
3.1.1概念设计的任务
数据库概念设计阶段的目标是:
(1)定义和描述应用领域涉及的数据范围。
(2)获取应用领域或问题域的信息模型。
(3)描述清楚数据的属性特征。
(4)描述清楚数据之间的关系。
(5)定义和描述数据的约束。
(6)说明数据的安全性要求。
(7)支持用户的各种数据处理需求。
(8)保证信息模型方便地转换成数据库的逻辑结构(数据库模式),同时也便于为用户理解。
3.1.2概念设计的依据及过程
1.概念设计的依据
数据库概念设计的依据是需求分析阶段的文档,包括需求说明书、功能模型(数据流程图或 IDEFO图)以及在需求分析阶段收集到的应用领域或问题域中的各类报表等。信息模型和数据库概念设计说明书是数据库逻辑设计的依据,也是数据库用户确认数据需求的依据。
2.概念设计的过程
(1)明确建模目标。
(2)定义实体集。
(3)定义联系。
(4)建立信息模型。
(5)确定实体集属性。
(6)对信息模型进行集成与优化。
3.1.3数据建模方法
实体联系 ER 模型用简单的图形直观地抽象出现实世界中客观对象的属性特征及其关系,这使得面向现实世界概念设计阶段的工作变得相对容易。其他的数据建模方法如 IDEF1X、UML 中的类图等。这些数据建模方法的共同特点是:
(1)能够真实客观地描述现实世界中的数据及数据之间的关系。
(2)组成模型的概念少,语义清楚,容易理解。
(3)不同概念的语义不重叠,概念无多义性。
(4)用图形方式描述数据,数据直观易懂,有利于数据库设计者和用户交流。
(5)这种数据模型容易转换成数据库逻辑设计阶段需要的数据结构。
1.ER 建模方法
实体联系(ER)方法面向数据存储需求建模,将现实世界中需要处理的数据抽象组织成某种信息结构。这种结构不依赖于具体的计算机系统,仅从存储需求描述数据的属性特征及数据之间的关系。与 ER 模型有关的几个概念。
(1) 实体或实例:实体指客观存在并可相互区分的事物(也称为实体集实例或实例)。
(2) 实体集:实体集表示一个现实的和抽象事物的集合,这些事物必须具有相同的属性或特征。
(3) 属性:属性用于描述一个实体集的性质和特征。每个属性的取值范围称为域。
(4) 码:实体集中能唯一标识每一个实例的属性或属性组称为该实体集的码。
(5) 联系:联系描述现实世界中实物之间的关系。
现实世界事物之间的联系可归纳为 3 类:
①一对一联系(1:1)。若对于实体集 A 中的每一个实例,实体集 B 中至多有一个实例与之联系,反之亦然,则称实体集 A 和实体集 B 具有 1:1 联系。
②一对多联系(1:n)。若对于实体集 A 中的每一个实例,实体集 B 中有 n 个实例(n≥0)与之联系,而对于实体集 B 中的每个实例,实体集 A 中至多有一个实例与之联系,则称实体集 A 与实体集 B 存在 1:n的联系。
③多对多联系(m:n)。若对于实体集 A 中的每一个实例,实体集 B 中有 n 个实例(n≥0)与之联系,而对于实体集 B 中的每个实例,实体集 A 中有 m 个实例(m≥0)与之联系,则称实体集 A 与实体集 B 存在m:n 的联系。
ER 方法中用矩形框表示实体集,矩形框内写上实体集的名称;用菱形框表示联系,联系名写在菱形框内;实体集的属性用椭圆或圆角矩形框表示,属性的名字写在椭圆或圆角矩形框内。
2.IDEF1X 建模方法
IDEF1X 侧重分析、抽象和概括应用领域中的数据需求,被称为数据建模方法。IDEHX 模型有如下建模元素:
(1)实体集:如果一个实体集的每个实例都能被唯一地标识而不决定于它与其他实体集的联系那么该实体集就是独立标识符实体集或简称为独立实体集;如果实体集的一个实例的唯一依赖于该实体集与其他实体集的联系,那么它就是从属标识符实体集或简称为从属实体集。IDEF1X 用矩形框来表示独立实体集,用加了圆角的矩形框来表示从属实体集。独立实体集与从属实体集语法如图 3.4 所示。
IDEF1X 中,每一个实体集定义有一个唯一的名字和编码,名字和编码之间用斜杠(/)分开。写在矩形框的上方,编码应该是正整数。实体集的名字用名词或名词短语命名,这个名词或司短语描述了实体集所表示的一类事物的集合。一个实体集中的属性要有唯一的名字,属性名一般用名词或名词短语来表示。通常,主码属性名后加“(PK)”标注,被列在属性列表的顶端,I 嗖属性列在下面,并且用水平线把主码与其他属性分开。一个实体集可以有任意多个属性,一个属性只能归属于一个实体集。
(2)联系。
一个“确定型连接联系”或简称“连接联系”(还可称为“父子联系”或“依存联系”),是实体集之间的一种连接或关系。在这种连接联系中,被称为双亲实体集的每一个实例与子女实体集的 0 个、1 个或多个实例相连接。子女实体集中的每个实例精确地同双亲实体集的 1 个实例相联系。
①标定型联系。在“确定型连接联系”中,如果子女实体集中的每个实例都是由它与双亲的联系而确
定的,那么这个联系就被称为是“标定型联系”。在标定型联系中子女实体集总是从属实体集,标定型联系用一条实线或线段把它们连接起来,1(父)端是线段的原点,n(子女)端是线段的终点,并用一个实心圆点表示其联系的基数是 n0。
②非标定型联系。在“确定型连接联系”中,如果子女实体集中的每一个实例都能被唯一地确认而无
须了解与之相联系的双亲实体集的实例,则该联系就被称为“非标定型联系”。非标定型联系用一条虚线把它们连接起来,1(父)端是线段的原点,n(子女)端是线段的终点,用一个实心圆点表示联系的基数是 n0。
③分类联系。“分类联系”是两个或多个实体集之间的联系,且在这些实体集中存在一个一般实体集,它的每一个实例都恰好与一个且仅一个分类实体集的一个实例相联系。一般实体集的每一个实例和与之相关的一个分类实体集实例描述的是现实世界的同一事物,因此它们具有相同的唯一标识符。
④非确定联系。一个非确定联系又称为“多对多关系”或 m:n 联系。在这种联系关联的两个实体集
之间,任一实体集的一个实例都将对应另一实体集的 0 个、1 个或多个实例。
3.1.4概念设计实例
3.2数据库逻辑设计
3.2.1概述
数据库逻辑设计的任务是把数据库概念设计的结果(ER 模型),转换为具体的数据库管理系统支持的数据模型。数据库逻辑设计是面向机器世界的,这个阶段将按照具体数据库管理系统支持的数据模型来组织和存储数据,包括定义和描述数据库的全局逻辑结构、数据之间的关系、数据的完整性及安全性要求等。
3.2.2逻辑设计实例
1.将 ER 图转换成关系模式,一般包含两个步骤
(1)第一个步骤是标识 ER 模型中的联系;
(2)第二个步骤是依次转换与每个联系相关联的实体集及联系。
2.命名确认
根据项目选定的数据库管理系统支持的命名规则,检查确认关系名和属性名是否符合统一命名规则。
3.优化关系模式
应用规范化理论逐一检查每一个关系模式,使之满足 3NF
3.3数据库物理设计
3.3.1物理设计概述
数据库物理设计的目的是将数据的逻辑描述转换为实现技术规范,其目标是设计数据存储方案,以便提供足够好的性能并确保数据库数据的完整性、安全性和可恢复性。
3.3.2数据库的物理结构
数据库中的应用数据是以文件形式存储在外设存储介质(如磁盘)上的,文件在逻辑上被组织成记录的序列,也就是说,每个 DB 文件可以看作是逻辑记录的集合。
从数据库物理结构角度需要解决如下几个问题:
(1)文件的组织。
(2)文件的结构。
(3)文件的存取。
(4)索引技术。
3.3.3索引
1.索引技术
索引的概念类似于图书中使用的术语“索引”。索引技术(Indexing)是一种快速数据访问技术,它将
一个文件的每个记录在某个或某些域上的取值与该记录的物理地址直接联系起来,提供一种根据记录域的取值快速访问文件记录的机制,索引技术关键是建立记录域取值到记录的物理地址间的映射关系(这种映射关系称为索引(Index))。
2.索引技术分类
根据索引的实现方式,索引技术被分成两大类:有序索引和散列索引。
(1)有序索引(Ordered Index)技术,也称为索引文件机制。有序索引技术利用索引文件实现记录域取值到记录物理地址间的映射关系。这里的记录域就是查找码。索引文件由索引记录组成,每个记录中记载着一个索引项,索引项记录了某个特定的查找码值和具有该值的数据文件记录的物理地址。查找码也称为排序域。查找码可以是数据文件的主码或主属性,也可以是非主属性。
(2)散列技术,也称为哈希(Hash)索引机制。散列技术利用一个散列函数实现记录域取值到记录物理地址间的直接映射关系。这里的记录域就是查找码,也称为散列函数的散列域或排序域。对于存储有关系表数据的数据库文件,该文件的查找码可以是关系表的主码或候选码,也可以是关系表的其他非主属性。
3.有序索引
有序索引作为基于索引文件的索引技术,需要考虑的两个关键问题是:
(1)如何组织索引文件中的索引记录;
(2)如何从索引文件出发,访问数据文件中的数据记录。
当需要采用有序索引机制快速访问一个数据文件时,首先要为该数据文件建立一个索引文件,索引文件是索引记录或索引项的集合。索引文件根据某个特定的查找码值的升序或降序存储索引记录,并且也组织为顺序文件。 有序索引有多种多样的形式,根据索引(文件)本身的性质介绍几类主要的有序索引及其特点。
①聚集索引和非聚集索引
一个数据文件上可以建立多个索引文件,数据文件和每个索引文件都根据各自查找码有序地组织为顺序文件。 对数据文件和它的一个特定的索引文件,如果数据文件中数据记录的排列顺序与索引文件中索引项的排列顺序相一致,或者说索引文件按照其查找码指定的顺序与数据文件中数据记录的排列顺序相一致,则称该索引文件为聚集索引;否则,称该索引文件为非聚鍵引。
②稠密索引和稀疏索引
如果数据文件中的每个查找码值在索引文件中都对应一个索引记录,则该索引称为稠密索引。如果只是一部分查找码的值有对应的索引记录,则该索引称为稀疏索引。
③主索引和辅索引
在数据文件的主码属性集上建立的索引称为主索引。在数据文件的非主属性上建立的索引称为辅索引。 在实际的关系数据库系统中,数据库管理系统通常按照主码值的顺序将元组有序存储在数据文件中,并且以主码作为查找码建立索引文件。该索引文件既是主索引,也是聚集索引。
④唯一索引
唯一索引可以确保索引列不包含重复的值。在多列唯一索引的精况下,可以确保索引列中每个值的组合都是唯一的。
⑤单层索引和多层索引
单层索引也称为线性索引,其特点是索引项根据键值在索引名件中顺序排列,组织成一维线性结构,每个索引项直接指向数据文件中的数据记录。 当数据文件很大时,即使采用稀疏索引,建成的索引文件也会很大,只能以顺序文件形式存|放在磁盘上。如果需要读取某个索引项,必须读取磁盘块,导致对索引文件本身的访问效率非常低。 为解决索引文件本身的访问效率非常低的问题,可以对索引文件中的索引项本身再建立一级稀疏索引,组成二层索引结构,用于快速查找索引项。可以建立多层树型索引结构来快速定位大数据量文件中的数据记录。多层索引的典型例子是数据库系统中广泛应用的 B 树和 B+树索引。
3.3.4数据库物理设计
1.物理设计内容
数据库物理结构设计是在具体的硬件环境、操作系统和 DBMS 约束下,根据数据库逻辑设计嫛吴设计合适的数据库物理结构。其目标是得到存储空间占用少、数据访问效率高和维护代价低的数据库物理模式。
数据库物理设计主要包括以下环节,每个环节包含若干设计内容。
(1)数据库逻辑模式描述。
(2)文件组织与存取设计。
(3)数据分布设计。
(4)确定系统配置。
(5)物理模式评估。
2.数据库逻辑模式描述
数据库逻辑设计产生了数据库的逻辑结构,其中有数据库的关系模式、关系模式上的完整性约束和面向具体应用的业务规则。数据库逻辑模式描述主要包括以下设计内容。
(1)面向目标数据库描述基本表和视图。
(2)设计基本表业务规则。
3.DB 文件组织与存取设计
一个好的数据库物理模式应当满足存储空间占用少、数据访问效率高和维护代价低的要求,为了进行有效的数据库文件组织和存取路径设计,必须分析和理解数据库事务的数据访问特性。事务分析可以按照如下步骤进行:
(1)使用事务-基本表交叉引用矩阵,分析系统内(部分重要的)数据库事务对各个基本表的访问情况,确定事务访问了哪些基本表,对这些基本表执行了何种操作,并进一步分析各操作涉及的基本表属性。
(2)估计各事务的执行频率,即单位时间内事务的执行次数。在此基础上分析事务中的每访问操作对各个基本表中的相关属性的操作频率。
(3)对每张基本表,汇总所有作用于该表上的各事务的操作频率信息,得到如下数据访问估洸该表是否被频繁访问,该表中哪些属性列的访问频率较高和作用于这些属性上的操作类查询条件类型(等值查询、范围查询)。
(4)根据事务数据访问特性分析结果,可以对基本表设计成更为有效的文件组织和索引方式。
每种 DBMS 平台都提供一种或若干种数据库文件结构(如堆文件、顺序文件、聚集文件、索引文件和散列文件)。数据库物理结构设计者应当了解目标 DBMS 提供的各种数据库物理结构机 S.弓据应用系统实际情况,为数据库和基本表选择合适的文件结构。
下面给出一些为基本表选择合适的文件结构的原则:
对数据库中的基本表等数据库对象选择了合适的文件结构后还需要为其设计存取路径,设计内容包括:
为数据库文件设计合理的物理存储位置和为基本表设计索引。
索引加快了数据查询速度,却减慢了数据更新速度。索引本身还会占用一定的存储空间。因此,必须权衡考虑索引的优点和索引的维护代价。可根据下述原则决定是否为一个基本表建立索引:
(1)对于经常需要进行查询、连接、统计操作,且数据量大的基本表可考虑建立索引;而对于经常执行插人、删除、更新操作或小数据量的基本表应尽量避免建立索引。
(2)一个基本表上除了可以建立一个聚集索引外,还可以建立多个非聚集索引。索引越多,对表内数据更新时为维护索引所需的开销就越大。对于一个更新频繁的表应少建或不建索引。
(3)索引可以由用户根据需要随时创建或删除,以提高数据查询性能。
对于基本表,可考虑在下面一些属性上建立索引:
(1)表的主码。(大部分关系数据库管理系统会自动为主码建立唯一索引)
(2)在 WHERE 查询子句中引用率较高的属性。
(3)参与连接操作的属性。
(4)在 Order By 子句、Group By 子句中出现的属性。
(5)在某一范围内频繁搜索的属性,但只有当使用索引的查询其结果不超过记录总数的 20%时索引才会有明显的效果。
(6)如果在 WHERE 子句中同时包含一个表中的多个属性,则可以考虑在这些属性上建立多属性索引。 此外,如果数据库文件需要频繁执行精确匹配查询(如等值查询),则可考虑建立散列索引。而 B+树等有序索引更适合于范围查询。
(7)当一个属性有相对较多的不同值时,使用索引有明显的作用;当一个属性的不同值很少使用索引没有好处。
(8)对包含大量空值的属性建立索引时要仔细考虑,因为很多数据库管理系统中的索引不引用具有空值的行,对空值的查找需要使用全表扫描来实现。