【数据库原理 • 四】数据库设计和规范化理论

简介: 数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。 当前互联网+与大数据,一切都建立在数据库之上,以数据说话,首先需要聚集数据、分析数据和管理数据,数据库技术已成为各种计算机系统的核心技术。数据库相关知识也已成为每个人必须掌握的知识。

四、需求分析阶段


4.1 需求分析的任务

需求分析是整个数据库设计过程中最重要的步骤之一,是后续各阶段的基础。需求分析的主要任务是通过详细调查所要处理的对象,包括某个组织、某个部门、某个企业的业务管理等,充分了解原手工或原计算机系统的工作状况以及工作流程,明确用户的各种需求,生成业务流程图和数据流图,然后在此基础上确定新系统的功能,并撰写系统说明书。新系统不能只按当前应用需求来设计数据库,必须充分考虑今后可能的扩充和改变。


4.2 需求分析的步骤

调查、收集和分析用户要求的具体步骤如下:


1.调查组织机构情况


调查这个组织由哪些部门组成,各部门担当的职责是什么。


2.调查各部门的业务活动情况


调查各部门所需输入和使用的数据,如何加工处理这些数据,输出什么信息,输出到哪个部门,输出结果的格式等。


3.协助用户明确对新系统的各种要求


进一步明确用户对数据管理中的信息要求、处理要求、安全性与完整性要求。


4.确定新系统的边界


确定哪些功能由计算机完成或将来准备让计算机完成,哪些功能由人工完成。由计算机完成的功能就是新系统应该实现的功能。


4.3 需求分析的调查方法

根据不同的问题和条件,调查方法也可以不同。常用的调查方法有以下几种。


1.跟班作业


通过亲身参加业务工作来了解业务活动的情况,这种方法可以比较准确地了解用户的需求,但比较耗费时间。


2.开调查会


通过与用户座谈的方式来了解业务活动情况及用户需求。


3.请专人介绍


通过邀请熟悉业务的专业人士来了解业务活动情况。


4.询问


对调查中的某些问题,可以找专人询问。


5.设计调查表请用户填写


如果调查表设计合理,这种方法易于用户接受并且会很有效。


6.查阅记录


查阅与原系统有关的数据记录,包括原始的单据、报表等。


当需求分析完成后,最终产生阶段性的成果:系统需求说明书,包括数据流图、数据字典、数据表格、系统功能结构图和必要的说明。


4.4 数据流图

数据流图(Data Flow Diagram, 简记为DFD) 是用图形方式来表达系统的逻辑功能,以及数据在系统内部的逻辑流向和逻辑变换过程。任何一个系统都可以抽象为数据流图形式。


微信图片_20230527145426.png

数据流图的基本符号


→:箭头,表示数据流;

□ :方框,表示数据的源点或终点;

○ :圆或椭圆,表示加工或处理;

=:双杠,表示数据存储。


(1)数据流: 是数据在系统内传播的路径,因此由一组成分固定的数据组成。例如订票单由旅客姓名、年龄、单位、身份证号、日期、目的地等数据项组成。由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。


(2)数据源点或终点: 代表系统之外的实体,可以是人、物或其他软件系统。


(3)对数据的加工(处理): 是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。


(4)数据存储: 表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。


在画数据流图时须注意的原则


(1)一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同。

(2)保持数据守恒,即一个加工的所有输出数据流中的数据必须能从该加工的输入数据流中直接获得。

(3)每个加工必须既有输入数据流,又有输出数据流。

(4)所有的数据流必须以一个加工开始,或以一个加工结束。


数据流图的实例

微信图片_20230527145908.png

这是一个飞机机票预订系统的数据流图,它反映的功能是:旅行社把预订机票的旅客信息 (姓名、年龄、性别、身份证号码、旅行时间、目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(附有应交的账款)。旅客在飞机起飞的前一天凭取票通知单交款取票,系统检验无误,输出机票给旅客。


4.5 数据字典

数据字典是系统中各类数据描述的集合,是对数据流图中包含的所有元素的定义的集合。


数据存放于物理数据库中,由数据库管理系统进行管理。数据字典有助于对这些数据进一步管理和控制,为设计人员和数据库管理员在数据库设计、实现和运行阶段控制有关数据提供一定的依据。

数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分。


(1)数据项是数据的最小组成单位,是不可再分的数据单位。包括项名、含义说明、别名、数据类型、长度、取值范围、与其他数据项的逻辑关系等。


(2)数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。包括数据结构名、说明、组成等。


(3)数据流是数据结构在系统内传输的路径。包括数据流名、说明、数据流来源、数据流去向、组成、平均流量、高峰期流量等。


(4)数据存储说明数据流中需要存储的数据,包括数据存储名、说明、流入数据流、流出数据流、组成、数据量、存取频度、存取方式等。


(5)处理过程的具体处理逻辑通常用判定表或判定树来描述。包括处理过程名、说明、输入数据流、输出数据流、处理简要说明等。


五、概念结构设计

5.1 概念结构设计方法

概念结构的设计方法通常有以下四种。


自顶向下: 先定义全局概念结构E-R模型的框架,再逐步细化。

自底向上: 先定义各局部应用的概念结构E-R模型,然后将它们集成,得到全局概念结构E-R模型。

逐步扩张: 先定义最重要的核心概念E-R模型,然后向外扩充,以滚雪球的方式逐步生成其他概念结构E-R模型,直至总体概念结构。

混合策略: 该方法采用自顶向下和自底向上相结合的方法,先自顶向下定义全局框架,再以它为骨架集成自底向上方法中设计的各个局部概念结构。


5.2 E-R设计方法的介绍

描述概念模型的有力工具是E-R模型。有关E-R模型的基本概念已经在第一章介绍过了,下面将用E-R模型来描述概念结构。


E-R方法是“实体—联系方法”(Entity-Relationship Approach)的简称。它是描述现实世界概念结构模型的有效方法。用E-R方法建立的概念结构模型称为E-R模型,或称为E-R图。


E-R图的三要素是实体、属性和联系


(1)实体: 用矩形框表示,框内标注实体名称。

微信图片_20230527145925.png

(2)属性: 用椭圆形框表示,框内标注属性名称。

微信图片_20230527145945.png

(3)联系: 用菱形框表示,框内标注实体之间的关系。有1:1,1:n和m:n三种联系类型。例如系主任领导系,学生选修课程,教师讲授课程,工人生产产品,这里“领导”、“选修”、“讲授”、“生产”表示实体之间的联系,可以作为联系名称。联系用菱形框表示,框内标注联系名称。

微信图片_20230527145948.png



E-R图的表示

微信图片_20230527145952.png

在E-R图的描述中,用矩形表示实体,用椭圆表示属性,用菱形表示联系。在各框图内标注它们的名称,它们之间用无向线连接,表示联系时需在线上标明属于哪种类型的联系。


5.3 局部概念结构设计

概念结构设计首先要根据需求分析得到的结果(数据流图、数据字典等)对现实世界进行抽象,设计各个局部E-R模型。在系统需求分析阶段,最后得到了多层数据流图、数据字典和系统分析报告。建立局部E-R模型,就是根据系统的具体情况,在多层的数据流图中选择一个适当层次的数据流图,作为设计局部E-R图的出发点,让这组图中每一部分对应一个局部应用。在前面选好的某一层次的数据流图中,每个局部应用都对应了一组数据流图,局部应用所涉及的数据存储在数据字典中。现在就是要将这些数据从数据字典中抽取出来,参照数据流图,确定每个局部应用包含哪些实体,这些实体又包含哪些属性,以及实体之间的联系及其联系类型。


微信图片_20230527150037.png

以工厂管理为例,描述局部E-R图的设计。从技术科获知,每种产品由多种零件组成,每种零件可用在不同的产品上,每种产品由一定数量的零件组成。从供应科获知,每种零件使用多种材料制成,每种材料也可应用在不同的零件上,每种零件在使用材料上有一个使用量;每个仓库可以存放多种材料,每种材料只能放在一个仓库里,每个仓库存放材料有一个库存量。


根据E-R图的建立过程:


第一步:确定实体类型

产品、零件、材料和仓库四个实体类型。


第二步:确定联系类型

产品和零件之间是m:n组成的联系,零件和材料之间是m:n使用的 联系,仓库和材料之间是1:m存放的联系。


第三步:确定实体类型和联系类型的属性。

在技术科中,产品实体的属性有:产品号、产品名、性能参数等。

在技术科中,零件实体的属性有:零件号、零件名、价格等。

在供应科中,零件实体的属性有:零件号、规格等。

在供应科中,材料实体的属性有:材料号、价格等。

在供应科中,仓库实体的属性有:仓库号、仓库名、地址等。


产品和零件之间m:n组成的联系属性是零件数,零件和材料之间m:n使用的联系属性是使用量,仓库和材料之间1:m存放的联系属性是库存量。


第四步,根据实体类型和联系类型画出局部E-R图


第五步,用下划线标注出实体的码。


微信图片_20230527150053.png


5.4 全局概念结构设计

全局概念结构设计的实质是把局部概念结构设计中所有的局部概念模型统一起来,形成一个完整的系统模型。

微信图片_20230527150110.png

全局E-R模型的建立过程如下:


1.合并


将局部概念模型整理合并成全局概念模型。

(1)先找出具有相同实体的两个E-R图。

(2)以该相同实体为基准进行合并。

(3)如果还有相同实体的E-R图,再次合并。

(4)这样一直下去,直到所有的具有相同实体的局部E-R图都被合并,从而得到全局的E-R图。


2.消除冲突


解决各种局部E-R图之间的冲突问题,生成初步E-R图。

(1)属性冲突


属性值的类型、取值范围及取值单位不一致造成的冲突。如:生日和年龄,厘米和米,学生编号的方式等。


(2)结构冲突


如在某局部E-R图中系主任是属性,而在另一个局部E-R图中系主任是实体等。


(3)命名(实体、属性、联系)冲突


同名异义:教室和宿舍均称为房间;

异名同义:如教材和课本。


将技术科和供应科的两个局部E-R图合并成全局E-R图

微信图片_20230527150123.png

一个好的全局E-R模型除了能准确、全面地反映用户功能外,还应满足下列条件:实体类型的个数尽可能少、实体类型所含属性的个数尽可能少、实体间联系的冗余最小。模型优化的目的是消除不必要的冗余,使其保持最小冗余度。


优化全局E-R模型的几个原则:


(1)实体类型的合并


(2)冗余属性的消除,如生日和年龄。


(3)冗余联系的消除


将下列所示的两个局部E-R图合并成一个全局E-R图,并进行优化。


微信图片_20230527150143.png

局部E-R模型设计完成之后,根据全局E-R模型的建立步骤,将上述两个局部E-R模型合并成全局E-R模型

微信图片_20230527150202.png



上例中对全局E-R模型进行优化,消除冗余,得到优化后的概念模型

微信图片_20230527150205.png



如一个图书借阅信息管理系统有如下信息:


每一个借书人可以借阅多本图书,每一本图书可以被多个借书人借阅;借书人每借阅一本图书都有一个借书日期和还书日期;每一个出版社可以出版多本图书,每一本图书只能在一个出版社出版。其中:


借书人的属性有:借书证号、姓名、单位、电话;

图书的属性有:图书编号、书名、位置;

出版社的属性有:出版社名、地址、邮编、电话。


我们根据需求画出E-R图,并在E-R图中注明实体的属性、联系的类型以及实体的码。

微信图片_20230527150210.png

六、逻辑结构设计

6.1 逻辑结构设计的步骤

数据库逻辑结构的设计过程

微信图片_20230527150546.png

6.2 E-R图向关系模型的转换原则

关系模型的逻辑结构是一组关系模式的集合,而E-R图则是由实体、实体的属性和实体之间的联系三个要素组成的。所以将E-R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转化为相应的关系模式,下面具体介绍转换的规则。


(1)一个实体类型转换为一个关系模式: 实体的属性就是关系的属性,实体的码就是关系的码。

微信图片_20230527150634.png

学生实体和课程实体分别转换成如下两个关系模式:

学生关系模式(学号,姓名,年龄,性别),学号为关系模式的主码。

课程关系模式(课程号,课程名,学分),课程号为关系模式的主码。


(2)一个m:n联系转换为一个独立的关系模式: 与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。

微信图片_20230527150634.png


将上述E-R模型转换为相应的关系模式,先将学生和课程两个实体转换为关系模式,再将这两个实体间的联系转换为关系模式,如下:

学生关系模式(学号,姓名,年龄,性别),学号为关系模式的主码。

课程关系模式(课程号,课程名,学分),课程号为关系模式的主码。

选课关系模式(学号,课程号,成绩),学号和课程号的组合码为关系模式的主码。


(3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并: 如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而该关系的码为n端实体的码。如果与n端对应的关系模式合并,则只需要将联系本身的属性和1端实体的码加入到n端对应的关系模式中即可。

微信图片_20230527150301.png



将上述E-R模型转换为相应的关系模式,先将班导师和学生两个实体转换为关系模式,再将这两个实体间的联系转换为关系模式,如下:


方法一:产生独立的关系模式


学生关系模式(学号,姓名,年龄,性别),学号为关系模式的主码。

班导师关系模式(职工号,姓名,性别,电话),职工号为关系模式的主码。

指导关系模式(学号,职工号),学号为关系模式的主码。


方法二:与n端对应的关系模式合并


学生关系模式(学号,姓名,年龄,性别,职工号),学号为关系模式的主码。

班导师关系模式(职工号,姓名,性别,电话),职工号为关系模式的主码。


(4)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并: 如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。

微信图片_20230527150737.png



将上述E-R模型转换为相应的关系模式,先将班级和班长两个实体转换为关系模式,再将这两个实体间的联系转换为关系模式,如下:


方法一:产生独立的关系模式


班级关系模式(班级号,人数),班级号为关系模式的主码。

班长关系模式(学号,姓名,性别,年龄),学号为关系模式的主码。

任职关系模式(班级号,学号),班级号为关系模式的主码,也可以选学号作为关系模式的主码。


方法二:与任意一端对应的关系模式合并


班级关系模式(班级号,人数),班级号为关系模式的主码。

班长关系模式(学号,姓名,性别,年龄,班级号),学号为关系模式的主码。

或者

班级关系模式(班级号,人数,学号),班级号为关系模式的主码。

班长关系模式(学号,姓名,性别,年龄),学号为关系模式的主码。


(5)三个或三个以上实体间的一个多元联系转换为一个关系模式: 与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。


(6)同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。


(7)具有相同码的关系模式可合并


例如

每个工厂生产多种产品,且每种产品可以在多个工厂中生产,每个工厂按照固定的计划数量生产产品;每个工厂聘用多名职工,且每个职工只能在一个工厂工作,工厂聘用职工有聘用期和工资。工厂的属性有工厂编号、厂名、地址,产品的属性有产品编号、产品名、规格,职工的属性有职工号、姓名。


(1)根据需求画出E-R图,并在E-R图中注明实体的属性、联系的类型以及实体的码。

微信图片_20230527150307.png



(2)将E-R图转换成关系模式,并用下画线标出每个关系模式的主码。


工厂(工厂编号 ,厂名,地址)

产品(产品编号 ,产品名,规格)

职工(职工号 ,姓名,工厂编号,工资,聘用期)

生产(工厂编号 ,产品编号 ,计划数量)=


6.3 数据模型的优化

数据模型的优化方法为:


(1)确定数据依赖。

(2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。

(3)按照数据依赖的理论对关系模式逐一进行分析,考查是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。

(4)按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。

(5)对关系模式进行必要的分解。


七、物理结构设计

数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法。所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。


数据库的物理设计通常分为两步:


首先,确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。

其次,对物理结构进行评价,评价的内容是系统的时间和空间效率。


7.1 确定物理结构

1.确定数据的存储结构


确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。这三个方面常常是相互矛盾的,例如消除一切冗余数据虽然能够节约存储空间,但往往会导致检索代价的增加,因此必须进行权衡,选择一个折中方案。


2.设计数据的存取路径


在关系数据库中,选择存取路径主要是指确定如何建立索引。例如,应把哪些域作为次码建立次索引,建立单码索引还是组合索引,建立多少个为合适,是否建立聚集索引等。


3.确定数据的存放位置


为了提高系统性能,数据应该根据应用情况将易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。


4.确定系统配置


DBMS产品一般都提供了一些存储分配参数,供设计人员和DBA对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的缺省值。但是这些值不一定适合每一种应用环境,在进行物理设计时,需要重新对这些变量赋值以改善系统的性能。


7.2 评价物理结构

数据库物理设计过程中需要对时间效率、空间效率、维护代价和各 种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对这些方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。


评价物理数据库的方法完全依赖于所选用的DBMS,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。如果该结构不符合用户需求,则需要修改设计。


八、数据库的实施

数据库的实施主要包括以下工作:用数据定义语言(DDL)定义数据库结构,组织数据入库,编制与调试应用程序,数据库试运行四个部分。


1.定义数据库结构


2.数据装载


3.编制与调试应用程序


4.数据库试运行**


九、数据库的运行和维护

在数据库运行阶段,对数据库经常性的维护工作主要是由DBA完成的,包括:


1.数据库的转储和恢复


2.数据库的安全性、完整性控制


3.数据库性能的监督、分析和改进


4.数据库的重组织和重构造


目录
相关文章
|
4月前
|
算法 关系型数据库 MySQL
【MySQL 解析】数据库的乐观锁和悲观锁实现原理
【1月更文挑战第11天】【MySQL 解析】数据库的乐观锁和悲观锁实现原理
|
4月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
88 2
|
4月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
76 0
|
14天前
|
存储 算法 搜索推荐
矢量数据库基础:概念、原理与应用场景
【4月更文挑战第30天】矢量数据库,处理高维向量数据的工具,应用于GIS、推荐系统、图像搜索及语义搜索。核心原理是将原始数据嵌入到高维空间,通过索引算法优化搜索性能。现代深度学习模型如Word2Vec提升向量表示准确性,KD-Tree、LSH等算法加速相似性搜索。随着技术发展,矢量数据库在数据科学领域的重要性日益增强。
|
21天前
|
存储 SQL 数据库
数据库库表结构设计:原理、实例与最佳实践
数据库库表结构设计:原理、实例与最佳实践
55 0
|
22天前
|
C#
【自考】之数据库系统原理
【自考】之数据库系统原理
15 0
|
2月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
285 1
|
3月前
|
存储 关系型数据库 数据库
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
|
3月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表4、数据库设计——2、数据库规范化(Normalization)——3、实体-关系模型(ER Modeling)
MySQL技能完整学习列表4、数据库设计——2、数据库规范化(Normalization)——3、实体-关系模型(ER Modeling)
60 0
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
301 0