研究的问题
? 从数据库逻辑设计角度考虑如何构造一个好的数据库模式,研究关系规范化理论研究的实际背景。
? 讨论各种范式及可能存在的插入、删除等毛病,并直观地描述解决办法。 ? 讨论关系数据理论 ? 讨论函数依赖的推理规则 ? 研究模式等价的不同定义及模式分解算法
问题的提出
? 针对一个具体的问题,应该如何构造一个适合于它的数据模式,即应该构造几个关系模式,每个关系由哪些属性组成?
? 这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题。
关系,作为一个二维表,对它有一个最起码的要求:每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式。 ? 数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。
? 它是现实世界属性间相互关系的抽象,是数据内在的性质,是语义的体现。 ? 现在人们已经研究出了很多类型的数据依赖,其中最重要的是 函数依赖和多值依赖
建立一个数据库
? 学生(用学号SNO来描述) ? 系(用系名SDEPT描述)
? 系负责人(用其姓名MN描述) ? 课程(用课程名CNAME描述) ? 成绩(G)
于是得到一组属性
U={SNO,SDEPT,MN,CNAME,G}
? 一个系有若干学生,但一个学生只属于一个系 ? 一个系只有一名(正职)负责人
? 一个学生可以选修多门课程,每门课程有若干学生选修 ? 每个学生学习每一门课程有一个成绩
由上可知得到属性组U上的一组函数依赖: F={SNO?SDEPT,SDEPT?MN,(SNO,CNAME)?G} 由上可知得到属性组U上的一组函数依赖: F={SNO?SDEPT,SDEPT?MN, (SNO,CNAME)?G }
SNO CNAMG SDEPT 四个“毛病”
? 插入异常 ? 删除异常 ? 冗余太大 ? 更新异常 MN 第三章
解决之道:分解! 分解!! 再分解!!!
? S
(SNO,SDEPT,
S SG
SNO?SDEPT)
? SG(SNO,CNAME,G,
(SNO,CNAME)?G)
? DEPT
DEPT
(SDEPT,MN,
SDEPT?MN)
规 范 化
? 为了使数据库设计的方法走向完备,人们研究了规范化理论。
? 1971年,E.F.Codd就提出了这一理论。
函数依赖
? 定义1 设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系R,R中不可能存在两个元组在X上的属性值相等,
3