数据库三大范式

本文详细介绍了数据库设计中的三个规范化形式——第一范式(1NF)、第二范式(2NF)及第三范式(3NF)。从基本定义出发,阐述了每个范式的要求及应用场景,并通过实例解释了如何消除数据冗余和提高数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1NF(第一范式):

第一范式(1NF)设置了一个有组织的数据库非常基本的规则:

定义所需要的数据项,因为它们成为在表中的列。放在一个表中的相关的数据项。

确保有数据没有重复的组。

确保有一个主键。

数据库表的每一列都是不可分割的基本数据项。 如“电话号码”这个属性可以继续被分割为“办公电话”、“手机号码”等属性,在第一范式的语义下不应该被作为单独的一列出现。

2NF(第二范式):

必须先满足第一范式。 数据库表中的每一行必须可以被唯一的区分,即每一行中有一个唯一标识将这行与其他行区分出来,这个唯一标识就是我们常说的主键。在2NF的语义下,所有非主键的字段都要依赖主键。比如在学生表中我们用学生id作为主键,那么当我们需要查询一个学生的时候,通过他的id号应该可以唯一地定位到这个学生,会并且只会查出一行。

3NF(第三范式):

表满足以下条件时就是第三范式:

满足第二范式

所有非主字段都是依赖于主键

必须先满足第二范式。非主键字段都与主键字段有直接依赖关系,不存在传递依赖。可以理解为非主键字段只依赖主键字段,而不依赖其它的非主键字段。

比如员工表的字段构成为:员工id(主键),姓名,性别,年龄,所属部门,部门经理姓名,部门电话。

这里所有的非主键字段并不是直接依赖于主键“员工id”, 可以看到“部门经理姓名”和“部门电话”这两个属性依赖于“所属部门”,而“所属部门”又依赖于主键“员工id”,这就是传递依赖,这里可将该员工表的表结构改成:员工id(主键),姓名,性别,年龄,部门名称

单独提出部门表结构为:部门名称(主键),部门经理id ,部门电话

参考博客:http://www.open-open.com/lib/view/open1404791721950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值