数据库的结构设计

若如初见. 提交于 2020-02-21 01:17:17

一、概述

数据模型的含义
是对客观事物及其联系的数据描述,即对现实世界(存在于人脑之外的客观世界)的模拟。例:桌子、笔等
在数据库中用数据模型来抽象、表示和处理现实世界中的数据和信息。
要将现实世界转变为机器能够识别的形式,必须经过两次抽象。

在这里插入图片描述数据模型的种类
概念数据模型
逻辑数据模型
物理数据模型

二、概念模型的设计

概念模型,它是按照用户的观点来对信息和数据建模,主要用于数据库设计,最常用的是实体联系模型。

1.相关概念:

(1)实体(Entity):客观存在并可以相互区别的事物。
例如:一个教师、一辆车、老师与学生的关系都是实体。
(2)属性(Attribute):实体所具有的特性称为实体的属性,一个实体由它的若干属性来体现。
例如:课程实体由课程编号、课程名称、课程类别等属性组成。
(3)码(Key):唯一确定实体的属性集称为码,例如:课程编号是课程实体的码。
(4)域(Domain):属性的取值范围称为该属性的域。
假若规定课程编号只能取四位整数,那么这就是课程编号的域,它的范围是1000到9999。
(5)实体集(Entity Set):具有相同属性和性质的实体的集合称为实体集。
例如:所有课程就是一个实体集。
(6)联系(Relationship):事物内部以及事物之间总是存在着某中联系,这些联系在概念模型中表现为实体内部的联系和实体之间的联系。

实体间的联系分为三类:
①一对一的联系(1:1)
如果对于实体集A中的每一个实体,在实体集B中至多有一个实体与它有关联,反之,亦成立,则实体集A与实体集B具有一对一的联系,用1:1表示。
例如:班长实体集与班级实体集是一对一的联系。

②一对多的联系(1:n)
如果对于实体集A中的每一个实体,在实体集B中可能有多个实体与它有关联,反之,如果对于实体集B中的每一个实体,在实体集A至多有一个实体与它有关联,则实体集A与实体集B具有一对多的联系,用1:n表示。
例如:班级实体集与学生实体集是一对多的联系。

③多对多的联系(m:n)
如果对于实体集A中的每一个实体,在实体集B中可能有多个实体与它有关联,反之,亦成立,则实体集A与实体集B具有一对多的联系,用m:n表示。
例如:教师实体集与课程实体集是多对多的联系。
在这里插入图片描述

2.概念模型

概念数据模型的含义
用于信息世界(现实世界在人脑中的反映)的建模,是现实世界到信息世界的第一次抽象,是数据库设计人员进行数据库设计的有力工具,也是设计人员和用户之间交流的语言。
在这里插入图片描述概念数据模型的表示方法
实体联系图(ER图):用于描述信息世界的概念数据模型。它通过画图将实体以及实体间的联系刻画出来,为客观事物建立概念数据模型。

3.ER图的基本要素

实体
是现实世界中任何可以被认识、区分的事物。
实体可以是人或物,可以是实际的对象,也可以是抽象的概念(如事物之间的联系)
在学校:学生、课程、教师、选课、班委等;
某企业集团:工厂、职工、产品等
属性
实体所具有的特性。
一个实体可以有若干属性来描述。
学生的属性:学号、姓名、年龄、性别、系、专业等;
产品的属性:产品编号、产品名、规格等
联系
现实世界中事物内部以及事物之间的联系。
在信息世界中反映为实体内部的联系和实体之间的联系。
实体内部的联系
两个实体间的联系
多个实体间的联系
类型:
一对一联系(简记成1:1) 例如:学生和座位
一对多联系(简记成1:n) 例如:班级和学生
多对多联系(简记成m:n) 例如:学生和课程

4.ER图的绘制

基本要素的表示方法:
长方形——实体
椭 圆——属性
菱 形——联系

说明:在相应的框内要写上实体名、属性名或联系名。

绘制方法:
实体与属性用直线相连
实体与联系用直线相连
联系与属性用直线相连

同时在菱形与矩形的连线上标上联系的类型。
(1:1、1:n、m:n)

在这里插入图片描述二元联系的ER图示例
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

5. ER图的设计实例

在这里插入图片描述若实体的属性太多,可如何简化ER图
可以先分别画出每一个实体及属性。
在这里插入图片描述然后,再画实体间的联系及联系的属性,并标明实体之间的联系类型
在这里插入图片描述
设计原则:先局部,后综合。
设计局部ER图。建立步骤
1、确定实体类型及属性。
2、确定联系类型及属性。
3、把实体类型和联系类型组合成局部ER图。
综合成全局ER图。合并步骤:
1、合并局部ER图,消除冲突(属性、结构、命名冲突),生成初步ER图。
2、消除初步ER图的数据冗余和联系冗余,生成基本ER图。

设计原则:消除冲突
①属性冲突属性域冲突,即属性值的类型、取值范围或取值集合不同。例如零件号,有的部门把它定义为整数,有的部门把它定义为字符型。例如年龄,某些部门以出生日期形式表示职工的年龄,而另一些部门用整数表示职工的年龄。属性取值单位冲突。例如,零件的重量有的以公斤为单位,有的以斤为单位,有的以克为单位。
②命名冲突同名异义,即不同意义的对象在不同的局部应用中具有相同的名字。异名同义(一义多名),即同一意义的对象在不同的局部应用中具有不同的名字。如对科研项目,财务科称为项目,科研处称为课题,生产管理处称为工程。命名冲突可能发生在实体、联系一级上也可能发生在属性一级上通过讨论、协商等行政手段加以解决
③结构冲突
同一对象在不同应用中具有不同的抽象。
例如,职工在某一局部应用中被当作实体,而在另一局部应用中则被当作属性。
解决方法:把属性变换为实体或把实体变换为属性,使同一对象具有相同的抽象。
同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同。
解决方法:使该实体的属性取各子系统的E-R图中属性的并集,再适当调整属性的次序。

建立步骤:
确定实体类型及属性。
本题已知有:商店、商品、顾客。
在这里插入图片描述在这里插入图片描述确定联系类型及属性。
“商店-商品”的联系是m:n
联系的属性有三项:
商店(编号)
商品(编号)
月销售量

联系的名称:销售
在这里插入图片描述

“商店-职工”的联系是m:n
联系的属性有四项:
商店(编号)
职工(编号)
月薪
聘期

联系的名称:聘用

在这里插入图片描述
把实体类型和联系类型组合成ER图。
在这里插入图片描述

6、小结

数据库系统
ER图的绘制
确定现实系统可能包含的实体。
确定每个实体的属性。
确定实体之间可能有的联系,并结合实际情况给每个联系命名。
确定每个联系的种类和可能有的属性。
画ER图,建立概念模型,完成现实世界到信息世界的第一次抽象。

对ER模型的理解
ER模型是人们认识客观世界的一种方法、工具。ER模型具有客观性和主观性两重含义。
ER模型是在客观事物或系统的基础上形成的,在某种程度上反映了客观现实,反映了用户的需求,因此ER模型具有客观性。
但ER模型又不等同于客观事物的本身,它往往反映事物的某一方面,至于选取哪个方面或哪些属性,如何表达则决定于观察者本身的目的与状态,从这个意义上说,ER模型又具有主观性。

二、关系数据模型设计

1、基本概念

逻辑数据模型
含义:是用户从数据库所看到的数据模型。
用概念数据模型表示的数据必须转化为逻辑数据模型表示的数据,才能在DBMS中实现。
类型(四种)
关系模型(最常用
SQL Server采用的是关系数据模型
层次模型
网状模型
面向对象模型

关系数据模型的含义
用二维表格结构表示实体以及实体之间的联系的数据模型。
完成信息世界到机器世界的第二次抽象。

在这里插入图片描述
关系数据模型的二维表结构
在这里插入图片描述
说明:
一个关系就是一张二维表,二维表的名称就是关系名
但关系和二维表是有区别的。

关系应具备的性质
关系中每一个属性值都是不可分解的。
关系中不允许出现相同的行。
关系中不允许出现相同的列。
关系中没有行序、没有列序。

关系模型中的一些术语
关系:即表,一个关系对应一张表
元组:表中的一行(除去表头)即为一个元组,也称一条记录,一个元组 对应一个实体。
属性:表中的一列即为一个属性,给每一个属性起一个名即称属性名。
主码:表中的某个属性组,它可以唯一确定一个元组,也称主键,每一个关系都有并且只有一个主键。
域:属性的取值范围,例:“性别”属性的域是(“男”,“女”)。
分量:元组中的一个属性值。
例:学号“001”就是一个分量。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述参照关系和被参照关系:在关系数据库中可以通过外部关键字使两个关系关联,这种联系通常是一对多(1:n)的,其中主(父)关系(1方)称为被参照关系,从(子)关系(n方)被称为参照关系。

2、将ER图转化为关系模式/表

基本概念
关系模式的含义
对关系的信息结构及语义限制的描述。

关系模式的表示方法
用关系名和包含的属性名的集合表示。
例如:学生(学号,姓名,性别,年龄,系编号)

表的含义
用二维表格表示的一个关系。

关系模式与关系的区别
关系模式是对关系结构的定义,是对关系“型”的描述。关系是二维表格,是对“值”的描述
一般说来,关系模式是相对稳定、不随时间变化的。关系是随时间动态变化的,关系中的数据在不断更新。
例如:在学生表中,由于学生的入学、退学和毕业等原因,学生关系是经常变化的,但其结构以及对数据的限制是不会改变的。
说明:关系模式和关系往往统称为关系

转换方法:
将实体及实体间的联系转换为关系模式 。
3.转换原则
一个实体型转换为一个关系模式。
实体的名就是关系的名。
实体的属性就是关系的属性。
实体的码作为关系的码。
例:学生(学号,姓名,性别,年龄,专业)
对于实体间的联系则有不同的情况。如下:
在这里插入图片描述
1)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
在这里插入图片描述2)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
例:根据以下E-R图写关系模型:
在这里插入图片描述3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
在这里插入图片描述4)三个或三个以上实体间的一个多元联系转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
在这里插入图片描述应用举例:
实例1:将下图转化为关系模式,并写出主关键字和外关键字。
在这里插入图片描述

解答:转化为关系模式
教师(教师号,姓名,性别,年龄,职称,专业)
主关键字:教师号
学生(学号,姓名,性别,年龄,籍贯,专业)
主关键字:学号
课程(课程号,课程名,学时,学分,课程类型)
主关键字:课程号
选课(学号,课程号,分数)
主关键字:学号+课程号 外关键字:学号、课程号
授课(教师号,课程号)
主关键字:教师号+课程号 外关键字:教师号、课程号
指导(教师号,学生号,时间,地点)
主关键字:教师号+学生号 外关键字:教师号、学生号

在这里插入图片描述第一种方法:(1:n,联系形成的关系独立存在)
本题中有3个实体,可得到3个关系模式。
本题中有2联系,可得到2个关系模式
工厂(工厂编号,厂名,地址)
主键:工厂编号
产品(产品编号,产品名,规格)
主键:产品编号
职工(职工号,姓名)
主键:职工号
生产(工厂编号,产品编号,计划数量)
主键:工厂编号+产品编号
外键:工厂编号、产品编号
聘用(工厂编号,职工号,聘期,工资)
主键:工厂编号+职工号
外键:工厂编号、职工号

第二种方法(1:n,联系形成的关系与N端对象合并)
本题中有3个实体,可得到3个关系模式。
本题中有2联系,因合并,只有1个关系模式
工厂(工厂编号,厂名,地址)
主键:工厂编号
产品(产品编号,产品名,规格)
主键:产品编号
职工(职工号,姓名,工厂编号,聘期,工资)
主键:职工号
外键:工厂编号
生产(工厂编号,产品编号,计划数量)
主键:工厂编号+产品编号
外键:工厂编号、产品编号

3、小结

关系数据模型的基本概念
关系 、记录(元组)、属性和属性值 、域
主关键字(主码/主键)、外部关键字(外码 /外键)
主表和从表

将ER图转化为逻辑数据模型(用表或关系模式来描述),完成信息世界到机器世界的第二次抽象。

三、数据库设计过程和关系的规范化

1、数据库的设计过程

按规范设计法可将数据库设计分为六个阶段:系统需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、物理设计阶段、数据库实施阶段、数据库运行与维护阶段。

前两个阶段是面向用户的应用要求,面向具体的问题;中间两个阶段是面向数据库管理系统;最后两个阶段是面向具体的实现方法。
前四个阶段可统称为“ 分析和设计阶段”,后两个阶段称为“实现和运行阶段”。

1.系统需求分析阶段
  需求分析的目标是通过对用户的调查研究,了解用户的数据要求和处理要求并形成说明书。需求说明书是该阶段的成果,也是今后设计的依据。
2.概念结构设计阶段 (概念模型E-R图)
  概念设计的目标是对需求说明书提供的所有数据和处理要求进行抽象与综合处理,按一定的方法构造反映用户环境的数据及其相互联系的概念模型,该模型独立于任何DBMS软件和硬件,是面向现实世界的用户数据模型,极易为用户所理解。
3.逻辑结构设计阶段 (逻辑模型-关系模型)
逻辑设计是将上一步所得到的概念模型转换为某个DBMS所支持的数据模型,并对其进行优化。
4.物理设计阶段 (库、表)
物理设计是为逻辑数据模型建立一个完整的能实现的数据库结构,包括存储结构和存取方法。
5.数据库实施阶段
根据物理设计的结果把原始数据装入数据库,建立一个具体的数据库并编写和调试相应的应用程序。应用程序的开发目标是开发一个可依赖的有效的数据库存取程序,来满足用户的处理要求。
6.数据库运行与维护阶段
这一阶段主要是收集和记录实际系统运行的数据,数据库运行的记录用来提高用户要求的有效信息,用来评价数据库系统的性能,进一步调整和修改数据库。在运行中,必须保持数据库的完整性,并能有效地处理数据库故障和进行数据库恢复。

2、关系的完整性规则

定义
是对关系的某种约束条件。
目的
用于保证关系数据库中数据的正确性和可靠性。
类型
实体完整性规则
参照完整性规则(引用完整性规则 )
域完整性规则(用户自定义完整性规则)

1、实体完整性规则
规则要求:
在任何关系的任何一个元组中,主键的值不能为空值、也不能取重复的值。
**目的:**用于保证数据库表中的每一个元组都是唯一的。

请思考:下面的关系是否违反实体完整性规则?
在这里插入图片描述2.域完整性规则(用户定义完整性规则)

规则要求
由用户根据实际情况,定义表中属性的取值范围
例如:性别只能是男和女、年龄不能为负值、成绩在0—100之间等。

目的
用于保证给定字段中数据的有效性,即保证数据的取值在有效的范围内。

3.参照完整性规则(引用完整性规则)

规则要求:
“不引用不存在的实体”。即:不允许在一个关系中引用另一个关系中不存在的元组。
目的
用于确保相关联的表间的数据保持一致。

请思考:下面两个关系是否违反参照完整性规则?
在这里插入图片描述说明
从表的“系编号(外键)”的取值只能为两种情况:
若取非空值,则它必须是主表中存在的值。
取空值(null)。表明尚未给学生分配专业。Null不等于0或空字符串。

3、函数依赖

概念
函数依赖
是指关系中各属性或属性组之间的相互依赖关系。它是关系规范化的理论基础。
函数依赖的定义
给定一个关系模式R,X和Y都是R的属性或属性组,对于X的每个确定值在任何时刻Y只有一个确定的值与之对应,则称“X函数决定Y”,或称为“Y函数依赖于X”,X称为决定因素,记为:X→Y。

函数依赖的类型
完全函数依赖
部分函数依赖
传递函数依赖

完全函数依赖
定义
如果属性Y函数依赖于复合属性X,且不与X的任何子集函数相依赖,则称“Y完全函数依赖于X”。
示例
有如下的关系模式:
生产(工厂编号,产品编号,计划数量)

“工厂编号+产品编号” →“计划数量”,是完全函数依赖。

部分函数依赖(局部依赖)
定义

对于一个函数依赖:X→Y,如果存在Z∈X(Z属于X),且有Z→Y成立,则称“Y部分函数依赖于X”。
示例
有如下的关系模式
SCD(学号,姓名,课程号,成绩,系名,系主任)
主码为复合码:学号+课程号
“姓名、系名、系主任”与主码是部分函数依赖

传递函数依赖

定义
在关系模式中,如果X→Y(不能Y→X),Y→Z,若存在X→Z ,则称“Z传递依赖于X”。
示例
有如下的关系模式
SD(学号,姓名,系名,系主任)

“学号→系名,系名→系主任”,则系主任传递依赖于学号。

4、关系的规范化

在关系数据库的设计过程中,对于同一个问题,选用不同的关系模式,其性能的优劣是大不相同的,为了区分关系模式的优劣,人们常常把关系模式分为各种不同等级的范式。
概念和范式的类型
类型
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)……

关系规范化的概念
将低级范式转换为若干个高级范式过程。

第一范式(1NF)
指数据库表的每一列都是不可再分割的基本数据项;
第一范式是在同一个表中,同类字段不允许重复出现;
在一个字段内也不允许存放多个数据项。
第一范式是对关系的最低要求。
示例:判断哪一张表是1NF?

在这里插入图片描述在这里插入图片描述例2:判断以下数据是否满足第一范式?
在这里插入图片描述第一范式可能存在的问题:
数据冗余:如各位老师的信息重复。
插入异常:如果要插入刘老师的个人信息,但刘老师未开课,会造成缺关键字“学号”、“课程号”。
删除异常:当要删除 课程号=“C3” 的元组,会丢失李老师的信息。
修改量大。

第二范式(2NF)
定义
如果关系模式R为第一范式,且R中每个非主属性完全函数依赖于R的主码(复合码),则称R为2NF模式。
示例
下列关系模式是1NF,是否是2NF?为什么?
SCD(学号,姓名,课程号,成绩,系名,系主任)
主码为复合码:学号+课程号

不是。因为:“姓名、系名、系主任”与主码是部分函数依赖(即:只依赖于学号)

解决方法:消除部分函数依赖。

分解为2NF的方法:
把关系模式中对主码完全函数依赖的非主属性与决定它们的主码放在一个关系模式中。
把对主码部分函数依赖的非主属性和决定它们的主属性放在一个关系模式中。
检查分解后的新模式,如果仍不是2NF,则继续按照前面的方法进行分解,直到达到要求。

关系模式SCD的分解结果如下:
SC(学号,课程号,成绩)
SD(学号,姓名,系名,系主任)

第三范式(3NF)
定义
如果关系模式R为第二范式,且R中每个非主属性都不传递函数依赖于R的某个候选码,则称R为3NF模式。
示例
下列关系模式是2NF,是否为3NF?为什么?
SD(学号,姓名,系名,系主任)

不是。因为:学号→系名,系名→系主任,存在传递依赖关系。

解决方法:消除传递函数依赖。

分解为3NF的方法:
把直接对主码函数依赖的非主属性与决定它们的主码放在一个关系模式中。
把造成传递函数依赖的决定因素连同被它们决定的属性放在一个关系模式中。
检查分解后的新模式,如果不是3NF,则继续按照前面的方法进行分解,直到达到要求。

关系模式SD的分解结果如下:
SD(学号,姓名,系名)
SD(系名,系主任)

各范式之间的关系
在这里插入图片描述

5、综合应用

实例:假设某商业集团数据库中有1个关系模式R(商店编号,商品编号,数量,部门编号,负责人)。如果规定:
(1)每个商店的每种商品只在一个部门销售。
(2)每个商店的每个部门只有一个负责人。
(3)每个商店的每种商品只有一个库存数量。
写出关系模式R的基本函数依赖集
找出关系模式R的候选码。
关系模式R最高已经达到第几范式?为什么?
如果R不属于3NF,请将R分解成3NF。

分析与解答: 基本的函数依赖有: (商店编号+商品编号) → 部门编号 (商店编号+部门编号) → 负责人 (商店编号+商品编号) → 数量
由题意,上面的函数依赖可知“商店编号”是主属性,商品编号也是主属性,由这两个属性,可以确定关系元组的所有属性,所以R的候选码是:商店编号+商品编号。
R(商店编号,商品编号,数量,部门编号,负责人) 最高已达到2NF。因为负责人是码的传递依赖。
要达到3NF,必须消除非主属性对码的传递依赖。对R分解后的两个模式如下:
R1(商店编号,商品编号,数量,部门编号)
R2(部门编号,负责人)

6、小结

关系的完整性规则
实体完整性/参照完整性/域完整性
范式的类型
1NF、2NF、3NF
各范式间的关系:
1NF中的每个属性值是不可再分的,它是关系模式的最低要求。
消除1NF中的部分函数依赖,可转换为2NF。
消除2NF中的传递函数依赖,可转换为3NF。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!