一句话,研究关系数据库理论就是为了设计出合适的关系模式,也即合适、高效的表
关系模式:关系模式就是对关系的描述,可以表示为
R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F)
所以在本章中把关系模式看作一个三元组 R < U , F > R R<U,F>
并且仅当U上的一个关系r满足F时,r称为关系模式R < U , F >的一个关系
数据依赖:数据依赖是一个关系内部属性与属性之间的一种约束关系。 这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。主要有两种类型的数据依赖
【例】建立一个描述学校教务的数据库,该数据库涉及的对象包括
假设用一个单一的关系模式Student来表示,则该关系模式的属性集合为
U = ( S n o , S d e p t , M n a m e , C n o , G r a d e ) U=(Sno,Sdept,Mname,Cno,Grade) U=(Sno,Sdept,Mname,Cno,Grade)
根据现实世界我们所熟知的,会有以下事实
这样的语义限制,将会导致属性上的函数依赖
记作:
F = ( S n o − > S d e p t ) F=(Sno−>Sdept) F=(Sno−>Sdept)
S d e p t − > M n a m e Sdept−>Mname Sdept−>Mname
( S n o , C n o ) − > G r a d e ) (Sno,Cno)−>Grade) (Sno,Cno)−>Grade)
下表是关系模式Student某一时刻的一个实例
我们说,这样的关系模式是失败的,因为它存在以下问题
函数依赖:如果X能确定Y(或者说Y依赖X,记作X->Y)那么就不可能存在两个元组,在X相同时Y却不同
如下在Student关系中,Sno确定Sdept,所以不可能出现两个相同的Sno却对应不同的Sdept
传递函数依赖:如果X是Y的非平凡函数依赖,且Y不是X的函数依赖,同时Y是Z的非平凡函数依赖,则称Z对X传递函数依赖,记作
注意,如果Y是X的函数依赖,则称Z直接依赖于X
其中:姓名,性别,期末分数都是非主属性
在范式之后,将求解候选码和第几范式放在一起
1NF:非主属性 部分依赖于 候选码
2NF:非主属性 完全依赖 任何一个候选码
3NF: 消除 非主属性 的部分依赖 和 传递依赖
或 关系中元素均为主属性 也是3NF
BCNF:3NF+在关系中,所有决定因子(箭头左侧)都是候选码本身(不可以是子集)