函数依赖
定义:设有关系模式R(U),X和Y是属性集U的子集,函数依赖是形为X→Y的一个命题,对任意R中两个元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],那么FD X→Y在关系模式R(U)中成立。X→Y读作‘X函数决定Y’,或‘Y函数依赖于X’。说的俗点就是:如果一个表中某一个字段Y的值是由另外一个字段或一组字段X的值来确定的,就称为Y函数依赖于X。函数依赖应该是通过理解数据项和企业的规则来决定的,根据表的内容得出的函数依赖可能是不正确的。
第一范式(1NF Normal Formate)
定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式。
第一范式的目标是确保每列的原子性,每列都是不可再分的最小数据单元(也称之为最小数据单元)
例如:
客人信息表(姓名、年龄、客人编号.....)
第二范式(2NF)
定义:如果关系模式R是第一范式,且每个非主属性完全函数依赖于候选键,那么就称R是第二范式。 简单的说,第二范式要满足以下的条件:首先要满足第一范式,其次每个非主属性要完全函数依赖与候选键,或者是主键。第二范式其目标是确保表中的每列都和主键相关。
例如:
客房表(房间号、客房描述、床位数......)
客房状态表(客房状态、客房状态名称.....)
第三范式(3NF)
定义:如果关系模式R是2NF,且关系模式R(U,F)中的所有非属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式了。
简单的说,第三范式要满足以下的条件:首先要满足第二范式,其次非主属性之间不存在函数依赖,也就是说要确保每列都和主键列直接相关。由于满足了第二范式,表示每个非主属性的函数都依赖于主键,如果非主属性之间存在了函数依赖,就会存在传递依赖,这样就不满足第三范式了
举个例子:
客人(客人姓名,身份证号,房间号,......)
客房(房间号,客房描述,客房类型编号....)
客房类型(客房类型编号,客房类型名称,床位数,价格...)
BC范式(BCNF)BC范式是第三范式的增强版,不过也有人说是直接从第一范式发展过来的,即每个属性,包括主属性或非主属性,都完全依赖于候选键,并且不存在传递依赖情况