# 关系数据库设计理论
## 设计一个好的关系数据库系统，关键是要设计一个好的数据库模式（数据库逻辑设计问题）
## 数据库逻辑设计主要解决的问题
### 关系数据库应该组织成几个关系模式
### 关系模式中包括哪些属性
## “不好”的数据库设计
### 举例：为学校设计一个关系数据库
### 关系模式: UN(Sno,Cno,G,Sdept,MN)
* Sno:描述学生
*         Sdept:描述系名
*         MN:描述系主任
*         Cno:描述课程
*         G:描述学习成绩
* 根据对现实世界的分析,可得出:Sno,Cno是码
* 按照关系模式UN装入部分数据
###  
### 对数据库操作时,会出现以下问题
* 1. 数据冗余(系主任名的存储次数)
    *    数据重复存储:浪费存储空间,数据库维护困难(更新异常)
* 2. 插入异常(一个系刚成立)
    *    主码为空的记录不能存在与数据库,导致不能进行插入操作
* 3. 删除异常(一个系的学生全部毕业)
    *     删除操作后,一些相关信息无法保存在数据库中
### 要消除以上的“弊病”,把上面的关系数据库模式分解为三个关系模式
* S(Sno,Sdept)
*     SG(Sno,Cno,G)
*     Dept(Sdept,MN)
## 函数依赖
### 类似于变量之间的单值函数关系
###      Y=F(X),其中自变量X的值,决定一个唯一的函数值Y
### 在一个关系模式里的属性,由于它在不同元组里属性值可能不同,由此可以把关系中的属性看作变量
### 一个属性与另一个属性在取值上可能存在制约关系
### 函数依赖就是属性间的逻辑依赖关系
### 定义1 设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集.对于R(U)的任何一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称X函数决定Y,或Y函数依赖于X,记作:X  Y.
### X通常称为“决定因素”
### 几点说明
* 1. 函数依赖是语义范畴的概念.它反映了一种语义完整性约束,只能根据语义来确定一个函数依赖.
* 2. 函数依赖是指关系R模式的所有关系元组均应满足的约束条件,而不是关系模式中的某个或某些元组满足的约束条件
* 3. 函数依赖与属性间的联系类型有关
    * (1)若属性X和Y之间有“一对一”的联系,
    * (2)若属性X和Y之间有“多对一”的联系,
    * (3)若属性X和Y之间有“多对多”的联系,
* 4. 如果X   Y,并且Y不是X的子集,则称X   Y是非平凡的函数依赖;如果Y是X的子集,则称X   Y是平凡的函数依赖;
## 完全函数依赖与部分函数依赖
### 完全函数依赖
### 部分函数依赖
## 码的形式定义
### 候选码的两个性质
* 1. 标识的唯一性: 对于R(U)中的每一元组,K的值确定后,该元组就相应确定了.
* 2. 无冗余性: K是属性组的情况下,K的任何一部分都不能唯一标识该元组(定义中的完全函数依赖的意义) 
## 规范化
### 简介
* 用几个简单的关系去取代原来结构复杂的关系的过程叫做关系规范化.
* 规范化理论是研究如何把一个不好的关系模式转化为好的关系模式的理论
* 规范化理论是E.E.Codd在1971年首先提出的
* 规范化理论是数据库设计过程中的一个非常有用的辅助工具
### 范式
* 简介
    * 规范化理论是围绕着范式建立的.
    * 满足不同程度要求的约束集则称为不同的范式.
    * 如果一个关系满足某个指定的约束集,则称它属于某个特定的范式.
    * 较高层次的范式比较低层次的范式具有“更合乎要求的性质”
    * 一个低一级范式的关系模式,通过投影运算可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化.
    * 如果一个关系满足某个范式要求,则它也会满足较其级别低的所有范式的要求
* 范式层次
* 第一范式(1NF)
    * 定义5: 在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系,记作R∈1NF.
    * 数据库理论研究的是规范化关系.
    * 1NF规范化: 把非规范化关系规范提高到1NF关系模式的集合.
* 第二范式(2NF)
    * 定义6: 若关系模式R∈1NF,且每个非主属性都完全依赖于R的任意候选码,则关系模式R属于第二范式,记作R ∈2NF.
    * 2NF规范化是把1NF关系模式规范提高到变成2NF关系模式的集合.
    * 从1NF中消除非主属性对候选码的部分函数依赖,则获得2NF关系.
    * 举例:UN(Sno,Cno,G,SDN,MN)
* 第三范式(3NF)
    * 定义7: 若关系模式R∈2NF,且每个非主属性都不传递依赖于R的任意候选码,则R∈3NF.
    * 从2NF关系中,消除非主属性对码的传递依赖函数而获得3NF关系
    * R∈3NF,则每个非主属性既不部分依赖,也不传递依赖于R的任何候选码.
    * 3NF的规范化
* BCNF范式
    * 3NF的不完善性
        * 定义8: 若R∈1NF,且R中每个决定因素都是候选码,则R ∈BCNF.
        * 满足BCNF的关系将消除任何属性对候选码的部分依赖与传递依赖
        * 应用BCNF定义时,可直接判断1NF是否属于BCNF
        * BCNF规范化
*XMind: ZEN - Trial Version*