注:文章内容是数据库系统课程学习的笔记,参考王珊,萨师煊编著的《数据库系统概论》(第5版),北京:高等教育出版社,2018.5.
第7章主要讨论基于关系数据库管理系统的关系数据库设计问题,具体内容包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和维护。
一般定义:数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效的运行环境。高效的运行环境指数据库数据的存取效率、数据库存储空间的利用率、数据库系统运行管理的效率等都是高的。
大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。它要求数据库设计人员具有多方面的知识和技术。主要包括:
典型方法:新奥尔良(New Orleans)方法、基于 E-R 模型的设计方法、3NF(第三范式)的设计方法、面向对象的数据库设计方法、统一建模语言(UML)方法
需求分析和概念结构设计独立于任何数据库管理系统,逻辑结构设计和物理结构设计与选用的数据库管理系统密切相关。
在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。
概念结构设计阶段:形成独立于机器特点、独立于各个关系数据库管理系统产品的概念模式,这里指 E-R 图
逻辑结构设计阶段:将 E-R 图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式
物理结构设计阶段:根据关系数据库管理系统的特点和处理的需要进行物理存储安排,建立索引,形成数据库内模式
需求分析是设计数据库的起点,需求分析结果是否准确反映用户的实际要求,将直接影响到后面各阶段的设计,并影响到设计结果是否合理和实用。
需求分析的任务:详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变。
(1)信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
(1)调查组织机构情况。包括了解该组织的部门组成情况、各部门的职责等,为分析信息流程做准备。
(2)调查各部门的业务活动情况。包括了解各部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么等,这是调查的重点。
(3)在熟悉业务活动的基础上,协助用户明确对新系统的各种要求,包括信息要求、 处理要求、完全性与完整性要求。这是调查的又一个重点。
(4)确定新系统的边界。对前面调查的结果进行初步分析,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。由计算机完成的功能就是新系统应该实现的功能。
结构化分析方法(Structured Analysis,SA):从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。
对用户需求进行分析与表达后,需求分析报告必须提交给用户,征得用户的认可。下图描述了需求分析的过程。
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
数据存储描述={数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}
处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。
把需求收集和分析作为数据库设计的第一阶段是十分重要的。第一阶段收集的基础数据(用数据字典来表达)是下一步进行概念设计的基础。强调两点:
(1)能真实、充分地反映现实世界,包括事物和事物之间的联系,是现实世界的一个线)易于理解,可以用它和不熟悉计算机的用户交换意见。
如果对于实体集 A 中的每一个实体,实体集 B 中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集 A 与实体集 B 具有一对一联系,记为 1:1。
例如,学校里一个班级只有一个正班长,而一个班长只在一个班中任职,则班级与班长之间具有一对一联系。
)与之联系,反之,对于实体集 B 中的每一个实体,实体集 A 中至多只有一个实体与之联系,则称实体集 A 与实体集 B 有一对多联系,记为 1:n。例如,一个班级中有若干名学生,而每个学生只在一个班级中学习,则班级与学生之间具有一对多联系。
)与之联系,反之,对于实体集 B 中的每一个实体,实体集 A 中也有 m 个实体(m \geqslant 0)与之联系,则称实体集 A 与实体集 B 具有多对多联系,记为 m:n。例如,一门课程同时有若干个学生选修,而一个学生可以同时选修多门课程,则课程与学生之间具有多对多联系。
例如,对于课程、教师与参考书 3 个实体型,如果一门课程可以有若干个教师讲授,使用若干本参考书,而每一个教师只讲授一门课程,每一本参考书只供一门课程使用,则课程与教师、参考书之间的联系是一对多的,如图(a)所示。
例如,有三个实体型:供应商、项目、零件,一个供应商可以供给多个项目多种零件,而每个项目可以使用多个供应商供应的零件,每种零件可由不同供应商供给,由此看出供应商、项目、零件三者之间是多对多的联系,如图(b)所示。
例如,职工实体型内部具有领导与被领导的联系,即某一职工(干部)“领导”若干名职工,而一个职工仅被另外一个职工直接领导,因此这是一对多的联系。
两个实体型之间的联系度为 2,也称为二元联系;三个实体型之间的联系度为 3,称为三元联系;N个实体型之间的联系度为 N,也称为 N 元联系。
(3)联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1、1:n 或 m:n)。
(1)一个仓库可以存放多种零件,一种零件可以存放在多个仓库中,因此仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量。
(2)一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,因此仓库和职工之间是一对多的联系。
(3)职工之间具有领导与被领导关系,即仓库主任领导若干保管员,因此职工实体型中具有一对多的联系。
(4)供应商、项目和零件三者之间具有多对多的联系,即一个供应商可以供给若干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可由不同供应商供给。
职称如果没有与工资、福利挂钩,即没有需要进一步描述的特性,则根据准则(1)可以作为职工实体的属性
例2:在医院中,一个病人只能住在一个病房,病房号可以作为病人实体的一个属性; 如果病房还要与医生实体发生联系,即一个医生负责几个病房的病人的医疗工作,则根据准则(2)病房应作为一个实体。
(1)每张订单由订单号、若干头信息和订单细节组成。订单细节又有订货的零件号、数量等来描述。按照第二条准则,订单细节就不能作为订单的属性处理而应该上升为实体。一张订单可以订若干产品,所以订单与订单细节两个实体之间是 1:n 的联系。
(2)原订单和产品的联系实际上是订单细节和产品的联系。每条订货细节对应一个产品描述,订单处理时从中获得当前单价、产品重量等信息。
(3)工厂对大宗订货给予优惠。每种产品都规定了不同订货数量的折扣,应增加一个“折扣规则”实体存放这些信息,而不应把它们放在产品实体中。
各个局部应用所面向的问题不同,各个子系统的 E-R 图之间必定会存在许多不一致的地方,称之为冲突。
命名冲突可能发生在实体、联系一级上,也可能发生在属性一级上,通过讨论、协商等行政手段加以解决。
例如,图(a)中零件与产品之间存在多对多的联系“构成” ,图(b)中产品、零件与供应商三者之间还存在多对多的联系“供应” ,这两个联系互相不能包含,则在合并两个 E-R 图时就应把它们综合起来,如图(c)。
,Q_4= \sum Q_5。所以Q_3和Q_4是冗余数据,可以消去;并且由于Q_3消去,产品与材料间 m:n 的冗余联系也应消去。>
① 确定分 E-R 图实体之间的数据依赖。实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。
中的函数依赖,确定是否是冗余的联系,若是就把它去掉。由于规范化理论受到泛关系假设的限制,应注意下面两个问题:
按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间数据依赖。
(2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系,具体方法见7.3.3“概念结构设计”
(3)按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
(4)根据需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,确定是否要对某些模式进行合并或分解。
对于一个具体应用来说,到底规范化进行到什么程度,需要权衡响应时间和潜在问题两者的利弊才能决定。
水平分解:把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率。
假设有关系模式产品(产品号,产品名,规格,单价,生产车间,生产负责人,产品成本,产品合格率,质量等级),可以在产品关系上建立两个视图:
关系数据库物理设计的内容主要包括为关系模式选择存取方法(建立存取路径),以及设计关系、索引等数据库文件的物理存储结构。
根据应用要求确定对关系的哪些属性列建立索引、哪些属性列建立组合索引、哪些索引要设计为唯一索引
(1)如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)
(3)如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引
关系上定义的索引数并不是越多越好,系统为维护索引要付出代价,查找索引也要付出代价。例如,若一个关系的更新频率很高,这个关系上定义的索引数不能太多。因为更新一个关系时,必须对这个关系上有关的索引做相应的修改。
如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一,则此关系可以选择 hash 存取方法。
聚簇:为了提高某个属性(或属性组)的查询速。
米乐M6官网登录正版下载