关系数据库范式

数据库标准化(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)

Updated: