关系数据库范式
数据库标准化(Database Normalization)
通过生成一组关系模式,使得我们存储信息时避免不必要的冗余,并且让我们可以方便地获取信息。
数据冗余带来的问题
-
浪费数据库的存储空间。
-
可能会导致插入异常(Insertion Anomaly):插入新行时会插入多余的数据。
-
可能会导致删除异常(Deletion Anomaly):某些数据集被删除时,与其相关的数据集也被删除。
-
可能会导致更新异常(Updation Anomaly):某个信息被修改时,需要重复更新多行。
第一范式(First Normal Form)
如果一个域的元素被认为是不可分的单元,则称该域是原子的(atomic)。如果一个关系模式 R 的所有属性的域都是原子的,则称 R 属于第一范式(First Normal Form,1 NF)。第一范式能够提高关系模式的可扩展性。
具体来说,第一范式具有 4 个基本原则:
-
表中每个列上的值都是原子的。
-
表中同一列上的值具有相同的类型。
-
表中每个列的名字是唯一的(相同的名字会导致获取数据时出现异常)。
-
表中每行数据的存放顺序无关紧要(在 SQL 查询中,可以用任何次序获取数据)。
第二范式(Second Normal Form)
如果一个关系模式 R 属于第一范式,并且非主属性(Non-prime Attribute)完全函数依赖(Full Functional Dependency)于主属性(Prime Attribute),则称 R 属于第二范式(Second Normal Form,2 NF)。也就是说,属于第二范式的关系模式 R 中不存在部分依赖(Partial Dependency)。
第三范式(Third Normal Form)
如果一个关系模式 R 属于第二范式,并且不包含非主属性(Non-prime Attribute)对主属性(Prime Attribute)的传递依赖(Transitive Dependency),则称 R 属于第三范式(Third Normal Form,3 NF)。
BC 范式(Boyce-Codd Normal Form)
如果一个关系模式 R 属于第三范式,并且对于任意函数依赖 X -> Y,X 都是 R 中的主属性(Prime Attribute),则称 R 属于 BC 范式(Boyce-Codd Normal Form,BCNF / 3.5 Normal Form)。
各种依赖的比较
-
函数依赖(Functional Dependency):
属性/属性集 X -> 属性/属性集 Y
(通过 X 能确定 Y) -
部分依赖(Partial Dependency):
部分主属性(Part of Prime Attribute) -> 非主属性(Non-prime Attribute)
-
传递依赖(Transitive Dependency):
非主属性(Non-prime Attribute) -> 非主属性(Non-prime Attribute)
-
BCNF 中不存在的依赖(Not in BCNF):
非主属性(Non-prime Attribute) -> 主属性(Prime Attribute)