数据库中的三大范式

简介: 数据库中的三大范式

一、范式的定义


什么是范式

范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,这就是我们俗称的范式。范式分成几个等级,一级比一级要求得严格。


简单归纳


第一范式(1NF):字段不可分;

第二范式(2NF):有主键,非主键字段依赖主键;

第三范式(3NF):非主键字段不能相互依赖。



二、第一范式 (1NF)


符合1NF的关系中的每个属性都不可再分

  • 通俗的理解为,数据库表的每一列都是不可再分的原子列,如下图所示就不符合1NF的要求

    也就是说,只要在关系型数据库中已经存在的数据表,一定是符合1NF的,如下图所示就符合1NF的要求

第一范式存在的问题


数据冗余过大

  • 每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系与对应的系主任的数据也重复多次

插入异常

  • 假如学校新建了一个系,但是暂时还没有招收任何学生,那么添加数据时,会将系名与系主任的数据单独地添加到数据表中,而没有添加学生列的数据,数据添加不合法

删除异常

  • 删除时会将整行的数据删除,假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(一个系所有学生都没有了,并不表示这个系就没有了)

修改异常

  • 假如李勇转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据


三、第二范式 (2NF)


第二范式必须满足第一范式。

第二范式是指每个关系必须有一个(有且仅有一个)数据项作为主键,其他数据项与主键一一对应,即其他数据项完全依赖于主键。由此可知单主属性的关系均属于第二范式。


四,第三范式(3NF


非主属性既不传递依赖于码,也不部分依赖于码。

理解:即在第二范式的基础上,消除了非主属性对码的传递依赖。

比如:

巴斯-科德范式(BCNF)


属于修正的第三范式,是防止主键的某一列会依赖于主键的其他列。当3NF消除了主属性对码的部分函数依赖和传递函数依赖称为BCNF。

特性:

1、所有主属性对每一个码都是完全函数依赖

2、所有主属性对每一个不包含它的码,也是完全函数依赖

3、没有任何属性完全函数依赖与非码的任何一组属性

举例:库存表(仓库名,管理员名,商品名,数量),主键为(仓库名,管理员名,商品名),这是满足前面三个范式的,但是仓库名和管理员名之间存在依赖关系,因此删除某一个仓库,会导致管理员也被删除,这样就不满足BCNF

相关文章
|
7月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
180 0
|
4月前
|
存储 数据库
数据库设计三范式
三范式设计的最终目的都是为了减少我们的工作量,所以说,尽管三范式是一种很好的指导规范,但在实际应用中,我们也不需要太局限在三范式中,更多的是应该从项目中出发,设计出合理的表结构。
|
1月前
|
存储 数据库
数据库设计三范式
数据库设计三范式
27 0
|
4月前
|
存储 算法 Java
数据库范式与设计原则
数据库范式与设计原则
72 0
|
5月前
|
存储 关系型数据库 数据库
关系型数据库设计范式:深入理解与实践
【7月更文挑战第20天】关系型数据库设计范式是数据库设计中的重要指导原则,它通过一系列规范来减少数据冗余、提高数据一致性和优化查询性能。在实际应用中,我们应该根据具体需求和数据特点,灵活选择和应用不同的范式级别,以构建高效、可靠和可扩展的数据库系统。同时,也需要注意范式设计带来的挑战和限制,根据实际情况进行权衡和调整。
|
5月前
|
存储 Java 数据库连接
数据库三范式详解及应用
数据库三范式详解及应用
|
5月前
|
存储 Java 数据管理
数据库三范式设计与规范化过程详解
数据库三范式设计与规范化过程详解
|
5月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
7月前
|
存储 关系型数据库 数据库
关系型数据库设计规范第一范式(1NF)
【5月更文挑战第14天】关系型数据库设计规范第一范式(1NF
237 8
下一篇
DataWorks