第二章 数据库设计 2.1 概念模型表示方法
2.2 关系模式设计理论(逻辑模式) 2.3 数据库设计步骤 2.1 概念模型表示方法
1、概念模型的定义
概念模型是对显示世界的抽象反映,它不依赖于具体的计算机系统,是现实世界到机器世界的一个中间层次。
2、信息实体的概念
实体(Entity):客观存在并可以相互区分的事物。既可以是具体的
事物也可以是抽象的概念或者事物间的联系。
属性(Attribute):实体所具有的某一特征,一个实体可以由若干个属性来刻画。
键(Key):又称为码,唯一标识实体的属性集,也叫关键字。 域(Domain):某个(些)属性的取值范围。 联系(Relationship):两类
实体内部的联系,如组成实体的属性之间的联系。 实体之间的联系。 3、实体之间的联系 1对1联系
例子:部门 ------- 经理 1对多联系
例子:部门 ------- 职工 多对多联系
例子:项目 ------- 职工
4、概念模型的表示方法
概念模型反映实体型及其联系的结构形式
概念模型的表示方法最常用的是实体-联系方法,该方法是用E-R图来描述某一组织的概念模型。 5、ER模型的图形描述
使用长方形来表示实体型,框内写上实体名。
椭圆型表示实体的属性,并用无向边把实体和属性连接起来。 用菱形表示实体间的联系,菱形框内写上联系名,用无向边把菱形分别与有关实体相连接,在无向边旁标上联系的类型,若实体之间联系也具有属性,则把属性和菱形也用无向边连接上。
6、概念模型示例
举例:用E-R图表示某个工厂的物资管理的概念模型 实体有:
仓库:属性有仓库号、仓库面积、电话号码。 零件:属性有零件号、名称、规格、单价、描述。 供应商:属性有供应商号、姓名、地址、电话号、帐号。 项目:属性有项目号、预算、开工日期。 职工:属性有职工号、姓名、年龄、职称。 概念模型示例(续) 实体之间的联系如下:
一个仓库可以存放多种零件,一种零件可以存放在多个仓库中。某种零件在某个仓库中的数量用库存量描述。
一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作。
概念模型示例(续)
如果某个部门的概念模型中涉及的实体和实体属性较多,可以把实体及其属性在另一个图上画出
概念模型示例(续)
2.2 关系模式设计理论(逻辑模式)
1、“不好”的数据库设计 2、关系的完整性 3、数据的函数依赖 4、关系数据库的规范化理论 2.2.1 “不好”的数据库设计 示例:
考虑为管理职工的工资信息而设计一个关系模式。 把单位所具有的工资级别信息和职工工资信息进行保存。
关系数据库设计中存在的问题 问题:麻烦! 麻烦!! 好麻烦!!!
– 插入异常 :如果没有职工具有8 级工资,则8 级工资的工资数额就难以插入。
– 删除异常 :如果仅有职工赵明具有4 级工资,如果将赵明删除,则有关4 级工资的工资数额信息也随之删除了。
– 数据冗余 :职工很多,工资级别有限,每一级别的工资数额反复存储多次。
– 更新异常 :如果将5 级工资的工资数额调为620 ,则需要找到每个具有5 级工资的职工,逐一修改。 关系数据库设计中存在的问题
解决之道:分解! 分解!! 再分解!!!
示例2:
为学校设计一个关系数据库。
对数据库操作时,会出现以下问题 1. 数据冗余(系主任名的存储次数)
数据重复存储:浪费存储空间,数据库维护困难(更新异常) 2. 插入异常(一个系刚成立)
主码为空的记录不能存在与数据库,导致不能进行插入操作 3. 删除异常(一个系的学生全部毕业) 删除操作后,一些相关信息无法保存在数据库中 4.更新异常(修改系主任的名称) 需要逐一修改多次。
要消除以上的“弊病”,把上面的关系数据库模式分解为三个关系模式: 学生系别(学号,系别) 学生成绩(学号,课程,成绩) 系部信息(系别,系主任)
用以上三个结构简单的关系代替了原来的结构复杂的关系,从而得到的了“好的”关系数据库模式
“好的”关系数据库模式并不是在任何情况下都是最优的,要从实际的设计目标出发
2.2.2 关系的完整性
完整性约束是对要建立关联关系的两个关系的主键和外键设置约束条件。 实体完整性
– 主码的值不能为空的约束条件称为实体完整性。 – 主码中的任一属性都不可以为空。 – 实体完整性是针对基本表的。 参照完整性
– 如果关系R2的外键X与关系R1的主键相符,那么外键X的每个值必须在关系R1中主键的值中找到,或者取空值,称为参照完整性。 用户定义的完整性
– 用户针对具体的应用环境定义的完整性约束条件。
– 如S# 要求是8 位整数,SEX 要求取值为“ 男” 或“ 女” 。 2.2.3 数据的函数依赖
定义属性值间的相互关连,这就是数据依赖,它是数据库模式设计的关键。是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,类似于变量之间的单值函数关系。 Y=F(X),其中自变量X的值,决定一个唯一的函数值Y
在一个关系模式里的属性,由于它在不同元组里属性值可能不同,由此可以把关系中的属性看作变量
一个属性与另一属性在取值上可能存在制约关系,这种逻辑依赖关系就是属性间的函数依赖。
1函数依赖 定义:
对于R(U)任意可能的关系r,r中不能存在两个元组在X上的属性相等,而在属性Y上的属性不等,则称X函数确定Y或Y依赖于函数X 记作:X
Y
当Y不函数依赖与X,则记作:X Y
当XY,且Y
X,则记作:X
Y
举例:
职工号(A) 基本工资(B) 奖金(C) 051 390 50 052 420 50 053 390 80 A
B A
C B
A C
A
几点说明:
1:函数依赖是指关系模型R中所有的元组都要满足的约束条件,而不仅仅是某个或某些元组的特例. 2: 函数依赖与属性间的联系类型有关 若属性X和Y之间有“一对一”的联系, 则X
Y,Y
X,X
Y.
若属性X和Y之间有“多对一”的联系,
则XY,但YX.
若属性X和Y之间有“多对多”的联系, 则X与Y之间不存在任何函数依赖.
当确定函数依赖关系时,可从属性间的联系入手 2 传递函数依赖
定义:设X,Y,Z为关系模式R的互不相同的属性集合,如果X而Y
X,但Y
Z,则称Z传递函数依赖与X,记作X
Y,
tZ(t在箭头
上面中间).
例:学生信息(学号,课程,成绩,系别,系主任) 学号
系别,系别
学号,系别
系主任
则有学号t系主任(t在箭头上面中间)
3 完全函数依赖与部分函数依赖 定义:设X
Y是关系模式R(U)的一个函数依赖,当对X的每一个
Y,则Y对X的函数依赖是完全的,记作X
fY
真子集X‘,都有X’
(f在箭头上面中间);如果对X某个真子集X‘有X’X的函数依赖是部分的,记作X
Y,则称Y对
pY(p在箭头上面中间).
例:学生信息(学号,课程,成绩,系别,系主任) (学号,课程)(学号,课程)
f成绩(f在箭头上面中间) p系别(p在箭头上面中间)
2.2.4 关系数据库模式的规范化理论 1关系模式规范化设计
规范化理论是围绕着范式建立的.
满足不同程度要求的约束集则称为不同的范式.
如果一个关系满足某个指定的约束集,则称它属于某个特定的范式. 一个低一级范式的关系模式,通过投影运算可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化.
如果一个关系满足某个范式要求,则它也会满足较其级别低的所有范式的要求
范式要求
2 第一范式 定义
如果一个关系模型R的每个属性的域都只包含单一的值,则称R满足第一范式.
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
但是满足第一范式的关系模式并不一定是一个好的关系模式。 3 第二范式
例: 关系模式 学生信息(学号, 系别, 住址, 课程, 成绩),假设每个系的学生住在同一个地方。 函数依赖包括: (学号, 课程)学号 → 系别 (学号, 课程)学号→ 住址 (学号, 课程)系别 → 住址
P住址(P在箭头上面中间) P系别(P在箭头上面中间) f成绩(f在箭头上面中间)
“学生信息”的码为(学号, 课程) “学生信息”满足第一范式。
非主属性系别和住址部分函数依赖于码(学号, 课程)
(1) 插入异常
假设学号=95102,系别=信息,住址=N 的学生还未选课,因课程号是主属性,因此该学生的信息无法插入表中。 (2) 删除异常
假定某个学生本来只选修了3号课程这一门课。现在因身体不适,他连3号课程也不选修了。因课程号是主属性,此操作将导致该学生信息的整个元组都要删除。 (3) 数据冗余度大
如果一个学生选修10门课程,那么他的”系别”和”住址”值就要重复存储了10次。 (4) 修改复杂
例如学生转系,在修改此学生元组的”系别”值的同时,还可能需要修改“住处”。如果这个学生选修了K门课,则必须无遗漏地修改K个元组中全部“系别”、”住址”信息。 原因
”系别”和”住址”部分函数依赖于码。 解决方法
表分解为两个关系模式,以消除这些部分函数依赖 学生课程(学号, 课程, 成绩) 学生住址(学号, 系别, 住址) 函数依赖图:
定义:如果关系范式R满足第一范式,而且它的所有非主关键字属性完全依赖于整个关键字(也就是说,不存在部分依赖),则R满足第二范式,即R∈2NF 例:
学生信息(学号, 系别, 住址, 课程, 成绩) ∈1NF
学生信息(学号, 系别, 住址, 课程, 成绩) ∈2NF 学生课程(学号,课程,成绩) ∈ 2NF
学生住址(学号,系别,住址) ∈ 2NF 4 3NF
例:2NF关系模式:学生住址(学号,系别,住址)中 函数依赖: 学号→系别 系别→住址 学号→住址
“住址”传递函数依赖于“学号”,即学生住址中存在非主属性对码的
传递函数依赖。 函数依赖图:
解决方法
采用投影分解法,把SL分解为两个关系模式,以消除传递函数依赖: 学生系别(学号, 系别) 系别住址(系别, 住址)
“学生系别”的码为”学号”, “系别住址”的码为”系别”。 “学生系别”的码为”学号”, “系别住址”的码为”系别” 。
定义: 如果某关系模式满足第二范式,而且它的任何一个非主属性都不传递依赖于任何关键字,则R满足第三范式。 例
学生住址(学号,系别,住址) ∈ 2NF 学生住址(学号,系别,住址) ∈ 3NF 学生系别(学号, 系别) ∈ 3NF 系别住址(系别, 住址) ∈ 3NF
若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。 如果R∈3NF,则R也是2NF。
采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。 5 规范化
关系数据库的规范化理论是数据库逻辑设计的工具。
规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化 规范化
因篇幅问题不能全部显示,请点此查看更多更全内容