数据库之六大范式详解_数据库范式-CSDN博客

前言:数据库系统原理的基本内容。

img

1. 第一范式1NF

数据项不可分,强调原子性。

如下图不为第一范式:

img

而下图为第一范式:

公司名称 地址 商品名称 商品数量 电话
刘晨 19

2. 第二范式2NF

若某关系R属于第一范式,且每一个非主属性完全依赖于任何一个候选码,则关系R属于第二范式。

以下是一个符合第二范式的示例表格:

学生ID (主键) 学生姓名 课程ID (主键) 课程名称 成绩
1 小明 101 数学 85
2 小红 102 英语 78
3 小华 101 数学 90

在上面的表格中,每个非主属性(例如课程名称和成绩)都完全依赖于整个主键(学生ID和课程ID),不存在部分依赖性。

接下来是一个不符合第二范式的示例表格:

订单号 (主键) 顾客姓名 产品名称 产品价格
1 张三 手机 3000元
2 李四 手机 3000元
3 王五 电视 5000元

在上面的表格中,产品价格只依赖于产品名称,而不是整个主键(订单号和产品名称)。这样的设计存在部分依赖性,不符合第二范式。为了符合第二范式,可以将产品价格移至另一个表格,确保每个非主属性完全依赖于候选键。

3. 第三范式3NF

一个表在第三范式下,任何非主属性必须完全依赖于主属性,而不能依赖于其它非主属性。

下面是一个符合第三范式的表格示例:

学生ID (Primary Key) 姓名 年龄 班级 (Foreign Key)
1 小明 18 1
2 小红 17 2
3 小华 18 1

在上面的示例中,每个学生的姓名和年龄直接依赖于学生ID,班级信息直接依赖于班级ID,不存在非主属性依赖于其他非主属性的情况,因此符合第三范式。

现在来看一个不符合第三范式的表格示例:

订单号 (Primary Key) 产品名称 客户ID (Foreign Key) 客户姓名 客户地址
1 商品A 101 张三 北京市
2 商品B 102 李四 上海市
3 商品C 101 张三 北京市

在上面的示例中,客户姓名和客户地址这两个属性依赖于客户ID,而不是直接依赖于订单号。这样就存在了非主属性(客户姓名和客户地址)依赖于其他非主属性(客户ID)的情况,因此不符合第三范式。

4. BC范式BCNF

在BC范式中,一个表中的每个非主属性都必须完全依赖于候选键,而不是依赖于其他主属性。

以下是一个符合BC范式的表格:

订单号 (主键) 顾客ID (候选键) 产品ID (候选键) 产品名称 顾客姓名
1 101 201 手机 张三
2 102 202 电视 李四
3 103 201 手机 王五

在上面的表格中,每个非主属性(例如产品名称和顾客姓名)都完全依赖于整个候选键(顾客ID和产品ID),不存在部分依赖性或传递依赖性。

接下来是一个不符合BC范式的示例表格:

学生ID (主键) 学生姓名 课程ID (候选键) 课程名称 成绩
1 小明 101 数学 85
2 小红 102 英语 78
3 小华 101 数学 90

在上面的表格中,成绩是一个非主属性,它仅依赖于课程ID,而不是整个候选键(学生ID和课程ID)。这样的设计存在部分依赖性,不符合BC范式。为了符合BC范式,可以将成绩移到另一个表格中,并通过外键与原始表格关联,确保每个非主属性完全依赖于候选键。

5. 第四范式4NF

在第四范式中,一个表中的多值依赖被视为不合规范的,需要进行规范化处理,以确保每个非主属性完全依赖于候选键。

以下是一个符合第四范式的示例表格:

学生ID (主键) 学生姓名 课程ID (主键) 课程名称 成绩
1 小明 101 数学 85
1 小明 102 英语 78
2 小红 101 数学 90
3 小华 101 数学 88

在上面的表格中,每个非主属性都完全依赖于整个主键,而且不存在多值依赖。

接下来是一个不符合第四范式的示例表格:

订单号 (主键) 顾客姓名 产品名称 产品颜色
1 张三 手机 黑色, 白色
2 李四 电视 彩色
3 王五 电脑 灰色, 白色

在上面的表格中,产品颜色是一个多值属性,它依赖于产品名称,而不是整个主键(订单号和产品名称)。这样的设计存在多值依赖,不符合第四范式。为了符合第四范式,可以将产品颜色移至另一个表格,并通过外键与原始表格关联,确保每个非主属性完全依赖于候选键。

6. 第五范式5NF

在第五范式中,一个表中的每个非主属性都必须完全依赖于候选键,而且没有任何连接依赖性或多值依赖性。

以下是一个符合第五范式的示例表格:

顾客ID (主键) 产品ID (主键)
101 201
102 202
103 201

在上面的表格中,每个非主属性(顾客ID和产品ID)都完全依赖于整个候选键(顾客ID和产品ID),不存在连接依赖性或多值依赖性。

接下来是一个不符合第五范式的示例表格:

订单号 (主键) 顾客姓名 产品名称 产品颜色
1 张三 手机 黑色, 白色
2 李四 电视 彩色
3 王五 电脑 灰色, 白色

在上面的表格中,产品颜色是一个多值属性,它存在多值依赖性,不符合第五范式。为了符合第五范式,可以将产品颜色移到另一个表格中,并通过外键与原始表格关联,确保每个非主属性完全依赖于候选键,且没有任何连接依赖性或多值依赖性。

7.总结

  1. 第一范式 (1NF):
    • 目标:确保每个单元格中只包含一个值,消除重复的数据。
    • 特点:表中的每个字段都是不可再分的原子值。
  2. 第二范式 (2NF):
    • 目标:消除部分函数依赖,确保表中的每个非主属性完全依赖于候选键。
    • 特点:所有非主属性都完全依赖于候选键,没有部分函数依赖。
  3. 第三范式 (3NF):
    • 目标:消除传递依赖,确保表中的每个非主属性都不传递依赖于其他非主属性。
    • 特点:每个非主属性只依赖于候选键,而不是依赖于其他非主属性。
  4. 巴斯-科德范式 (BCNF):
    • 目标:消除主属性对候选键的部分依赖,确保表中的每个主属性都不部分依赖于候选键。
    • 特点:表中的每个主属性都必须是超键,即候选键的超集。
  5. 第四范式 (4NF):
    • 目标:消除多值依赖,确保表中的每个非主属性都不对候选键的任何一部分产生依赖。
    • 特点:表中的每个非主属性都不应该对候选键的任何一部分产生依赖。
  6. 第五范式 (5NF):
    • 目标:消除连接依赖性和多值依赖性,确保表中的每个非主属性都完全依赖于候选键。
    • 特点:表中的每个非主属性都必须完全依赖于候选键,而且没有任何连接依赖性或多值依赖性。