目录
- 关系名R是符号化的元组语义
- U为一组属性
- D为属性组U中的属性所来自的域
- DOM为属性到域的映射
- F为属性组U上的一组数据依赖(关系内部属性与属性之间的一种约束关系,主要分函数依赖和多值依赖)
由于D、DOM与模式设计关系不大,本博客中把关系模式看作一个三元组:R<U,F>
一、问题提出
数据库设计的不好可能导致多个问题:冗余,修改异常,插入异常,删除异常
数据依赖与冗余
数据依赖是关于诸属性值之间内在相关性的陈述,它规定了关系模式的合法关系实例所必须满足的条件,可分为函数依赖和多值依赖
依赖和冗余是密不可分的:承认某种数据依赖,就能发现关系中的某些冗余;而不承认数据之间的依赖关系,也没理由认为某些信息是多余的
冗余的产生原因和处理总是联系在一起
二、函数依赖
2.1定义
字母表开头的大写字母 A,B,…,H表示单个属性
字母表尾部的大写字母 U,V,…,Z一般表示属性集,也可能是由单个属性构成的集合。U常用于表示关系的全部属性组成的集合
串接表示并。A1A2…An表示集合 {A1,A2,…,An},XY是 X Y的缩写,若 A是单个属性,X是属性集,则 XA或 AX表示 X
{A}
R表示关系模式
r 表示关系,它是关系模式 R的某个实例
2.2函数依赖类型
2.2.1函数依赖
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y
解释:若在一张表中,属性或属性组X确定,必定能确定属性Y的值,则称Y函数依赖于X,记做X->Y
举例:在学生表ST中通过学号能唯一确定一个姓名,则姓名函数依赖于学号
学生表ST
学号 | 姓名 | 性别 |
---|---|---|
1 | 张三 | 男 |
2.2.2平凡函数依赖与非平凡函数依赖
定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖,否则若X包含Y则必有X→Y,称此X→Y为平凡函数依赖
举例:在学生表ST中,学号总能函数决定它本身,记作“学号→学号”,此为平凡函数依赖。(学号,性别)->性别与(学号,性别)->学号也是平凡函数依赖
通常,我们主要讨论的是非平凡函数依赖:如学生表ST中学号函数决定的其他属性都是非平凡函数依赖
2.2.3完全函数依赖与部分函数依赖
1、完全函数依赖
定义:设X,Y是关系R的两个属性集合,X' 是X的真子集,存在X→Y,但对每一个X' 都有X' !→Y,则称Y完全函数依赖于X
解释:在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X' → Y 不成立,那么我们称 Y 对于 X 完全函数依赖
举例:在成绩表SG中,成绩完全函数依赖于(学号,CID(课程号))
成绩表SG
学号 | CID(课程号) | 成绩 |
---|---|---|
1 | 1 | 80 |
2、部分函数依赖
定义:设X,Y是关系R的两个属性集合,存在X→Y,若X' 是X的真子集,存在X' →Y,则称Y部分函数依赖于X
解释:假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X
举例:学生表ST中(学号,姓名)->性别,但是存在学号->性别,所以称性别部分依赖于(学号,姓名)
2.2.4传递函数依赖
定义:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X
解释:假如 Z 函数依赖于 Y,且 Y 函数依赖于 X (严格来说还有一个X 不包含于Y,且 Y 不函数依赖于Z的前提条件),那么我们就称 Z 传递函数依赖于 X
举例:关系S1(学号,系名,系主任),学号 → 系名,系名 → 系主任,并且系名 !→ 学号,所以学号 → 系主任为传递函数依赖
2.3函数依赖的推导
2.3.1 Armstrong公理
自反律:如果 Y X
U,则 X->Y成立
增广律:如果 X->Y成立,并且 Z
U,则 XZ->YZ成立
传递律:如果 X->Y和 Y->Z成立,则 X->Z成立
附加的推理规则
合并规则:如果 X->Y和 X->Z成立,则 X->YZ成立
伪传递规则:如果 X->Y和 WY->Z成立,则 WX->Z成立
分解规则:如果 X->Y成立,并且 Z
Y,则 X->Z成立