数据库三大范式

数据库三大范式

在数据库设计中,范式是一种规范化的设计方法,它可以帮助我们避免数据冗余和不一致性。目前,数据库中比较常用的范式有三种,分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。本文将介绍这三种范式,并举例说明。

1. 第一范式(1NF)

第一范式是最基本的范式,它要求关系中的每个属性都是原子性的,即不可再分。换句话说,每个属性都应该是一个单一的值,而不是多个值的组合。例如,一个学生表中的“姓名”属性应该是单一的值,而不是由姓和名组成的值。

2. 第二范式(2NF)

第二范式是在第一范式的基础上进一步规范化的范式。它要求关系表中的每个非主键属性都完全依赖于主键,而不是依赖于主键的一部分。例如,一个订单表中的“订单金额”属性应该依赖于订单号,而不是依赖于订单中的某个商品。

3. 第三范式(3NF)

第三范式是在第二范式的基础上进一步规范化的范式。它要求关系表中的每个非主键属性都不依赖于其他非主键属性。换句话说,每个非主键属性都应该直接依赖于主键。例如,一个学生表中的“年龄”属性应该直接依赖于学生的学号,而不是依赖于学生所在的班级。

区别

第二范式:2NF 设R为任一给定关系,若R为 1NF,且其所有非主属性都 完全函数依赖 于候选关键字,则R为 第二范式。

第一范式到第二范式的 过程:消除第一范式的 部分函数依赖 的过程。

第三范式:3NF 设R为任一给定关系,若R为 2NF,且其每一个非主属性都 不传递函数依赖 于候选关键字,则R为 第三范式。

第二范式到第三范式的 过程:消除第二范式的 传递函数依赖 的过程。

举例说明

假设有一个订单表,包含以下属性:订单号、客户号、客户姓名、商品号、商品名称、商品数量、商品单价、订单金额。该表的主键是订单号和商品号。

如果按照第一范式来设计该表,每个属性都应该是原子性的,即不可再分。因此,我们需要将客户姓名、商品名称和商品单价这些属性分别拆分成单独的属性。

如果按照第二范式来设计该表,我们需要保证每个非主键属性都完全依赖于主键。因此,我们需要将订单金额和商品数量属性从订单表中移除,并创建一个新的表来存储订单金额,该表的主键为订单号和商品号。

如果按照第三范式来设计该表,我们需要保证每个非主键属性都不依赖于其他非主键属性。因此,我们需要将客户姓名、商品名称和商品单价这些属性从订单表中移除,并创建新的表来存储这些属性。

posted @ 2024-04-19 18:44  木头左  阅读(65)  评论(0编辑  收藏  举报