数据库的三大范式及其重要性,详细易懂

目录

一.前言

[二. 三大范式](#二. 三大范式)

[2.1 第一范式(1NF)---列不可再分](#2.1 第一范式(1NF)---列不可再分)

[2.2 第二范式(2NF)---主键关系](#2.2 第二范式(2NF)---主键关系)

[2.3 第三范式(3NF)---外键关系](#2.3 第三范式(3NF)---外键关系)

三.为什么要遵循三大范式


一.前言

数据库是现代信息系统中的核心组成部分,它的设计和优化对系统的性能和数据完整性有着重要影响。在数据库设计中,三大范式是一种重要的规范,它可以帮助我们有效地组织和管理数据。本文将介绍数据库的三大范式,包括第一范式、第二范式和第三范式,并解释它们的重要性和应用场景。

二. 三大范式

2.1 第一范式(1NF)---列不可再分

第一范式是数据库设计中的基本要求,它要求每个数据表中的每个字段都是原子的,即不能再分解为更小的数据单元。这样可以避免数据冗余和数据更新异常的问题。

举例:

有以下一张表,当然这张表是不遵循第一范式的,因为列还可以再分

|----|------|-----|-------------|---------------|
| ID | name | sex | telphone | address |
| 1 | 张三 | 男 | 13155436923 | 湖南省长沙市岳麓区天顶街道 |

----问题:双十一要求查询哪个省份的纸巾买的最多??

我们是不是要根据前面的省份进行查询,如果地址是上方这样的话,我们就要进行截取,并且有些自治区等并不是前面三个字,所以就不是很方便,所以我们在淘宝等购物平台表设计是以下设计的:它会有一个地址表:

|----|----------|------|---------|------------------|
| ID | province | city | address | detailed-address |
| 1 | 湖南省 | 长沙市 | 岳麓区 | 天顶街道 |

我们在购物的时候填写地址也是先选择省份然后选择其它的,这样的表才符合数据库的第一范式

2.2 第二范式(2NF)---主键关系

第二范式要求数据表中的每个非主键字段完全依赖于主键,而不是依赖于其他非主键字段。这样可以避免数据冗余和更新异常的问题。

举例:

这个就是一个主键的约束,每一个表都有一个主键,有以下一张表

|---------|---------|-----|-------|----------|
| bid(主键) | bname | wid | press | data |
| 1 | 《中秋的起由》 | 1 | 张三出版社 | 1990-2-3 |

2.3 第三范式(3NF)---外键关系

第三范式要求数据表中的每个非主键字段都不依赖于其他非主键字段,而是直接依赖于主键。这样可以进一步减少数据冗余和更新异常的问题

举例:

第三范式,就是外键约束,比如下面两张表;

|---------|---------|---------|-------|----------|
| bid(主键) | bname | wid(外键) | press | data |
| 1 | 《中秋的起由》 | 1 | 张三出版社 | 1990-2-3 |

作者表的两个属性是依赖于作者ID而不是书籍ID

|---------|-------|-------------|
| wid(主键) | wname | wnationlity |
| 1 | 张三 | 中国 |

表设计如下

复制代码
CREATE TABLE books (
    bid INT PRIMARY KEY,
    bname VARCHAR(255),
    wid INT,
    press VARCHAR(255),
    data DATE,
    FOREIGN KEY (wid) REFERENCES authors(wid)
);

CREATE TABLE authors (
    wid INT PRIMARY KEY,
    wname VARCHAR(255),
    wnationality VARCHAR(255)
);

三.为什么要遵循三大范式

遵循三大范式有以下几个重要的原因:

  1. 数据的一致性:通过遵循三大范式,可以确保数据的一致性。数据存储在多个表中,每个表都有特定的目的和结构,这样可以避免数据冗余和不一致的问题。

  2. 数据的完整性:三大范式可以帮助我们保持数据的完整性。通过将数据分解为更小的、原子的数据单元,可以避免数据更新异常和数据丢失的问题。

  3. 数据的查询效率:遵循三大范式可以提高数据库的查询效率。通过将数据分解为多个表,可以减少数据的冗余,提高查询的速度和效率。

但是并不是所有的表,数据库都要符合三大范式,这个是根据自己的公司情况以及具体形势来决定,总之,是否符合三大范式取决于具体的业务需求和性能要求。在设计数据库时,需要根据实际情况综合考虑系统需求、性能要求、数据复杂性和系统扩展性等因素 ,并权衡范式的优劣。

相关推荐
NCIN EXPE1 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台1 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
lUie INGA1 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
极客on之路1 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家1 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE1 小时前
开启mysql的binlog日志
数据库·mysql
小糖学代码1 小时前
LLM系列:1.python入门:15.JSON 数据处理与操作
开发语言·python·json·aigc
yejqvow121 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
handler011 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
oLLI PILO1 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库