面试突击:什么是三范式?它有什么用?

开发 前端
第一范式规定表中的每个列都应该是不可分割的最小单元。第二范式是在满足第一范式的基础上,规定表中的非主键列不存在对主键的部分依赖。第三范式是在满足第一范式和第二范式的基础上,规定表中的列不存在对非主键列的传递依赖。


作者 | 磊哥

来源 | Java面试真题解析(ID:aimianshi666)

转载请联系授权(微信ID:GG_Stone)

一、第一范式

第一范式规定表中的每个列都应该是不可分割的最小单元。比如以下表中的 address 字段就不是不可分割的最小单元,如下图所示:

其中 address 还可以拆分为国家和城市,如下图所示:


图片

这样改造之后,上面的表就满足第一范式了。

二、第二范式

第二范式是在满足第一范式的基础上,规定表中的非主键列不存在对主键的部分依赖,也就是说每张表只描述一件事情,比如以下订单表就不满足第二范式,它可以拆分为两张独立的表:订单表和商品表。

1、不满足第二范式的订单表

PS:上面的表可拆分为两张独立的表:订单表和商品表。

2、 满足第二范式的表

订单表:

商品表:

三、第三范式

第三范式是在满足第一范式和第二范式的基础上,规定表中的列不存在对非主键列的传递依赖。比如以下的订单表中的顾客名称就不符合第三范式,因为它存在了对非主键顾客编号的依赖,如下图所示:

修改之后(符合第三范式)的表结构如下:

总结

第一范式规定表中的每个列都应该是不可分割的最小单元。第二范式是在满足第一范式的基础上,规定表中的非主键列不存在对主键的部分依赖。第三范式是在满足第一范式和第二范式的基础上,规定表中的列不存在对非主键列的传递依赖。使用数据库三范式的优势是:表的结构更简单、优雅,表的逻辑和条理性更强,并且使用三范式可以很大程度的减少表中的冗余数据,很好的节省了数据库的存储资源。

责任编辑:姜华 来源: Java面试真题解析
相关推荐

2022-07-13 07:06:47

HTTPSHTTP协议

2022-02-16 22:37:00

流式SQLSQL数据库

2022-05-05 07:38:32

volatilJava并发

2023-09-19 16:37:47

网络

2022-01-24 07:01:20

安全多线程版本

2022-08-31 07:04:50

Bean作用域

2022-08-03 09:00:00

安全漏洞UPnP

2020-11-19 07:38:57

边缘计算

2022-03-02 07:36:37

池化技术Java线程池

2022-03-16 07:33:40

守护线程用户线程语言

2021-09-10 07:59:31

中断锁Java多线编程

2023-12-21 21:39:44

2022-09-07 07:05:25

跨域问题安全架构

2022-08-01 07:07:15

粘包半包封装

2022-07-27 07:36:01

TCP可靠性

2022-07-25 07:07:35

TCP客户端服务器

2017-03-20 15:50:55

以太网网络工业

2022-08-22 07:06:32

MyBatisSQL占位符

2021-02-18 07:55:27

数据湖存储数据

2022-02-08 07:02:32

进程线程操作系统
点赞
收藏

51CTO技术栈公众号