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

目录

一.前言

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

[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. 数据的查询效率:遵循三大范式可以提高数据库的查询效率。通过将数据分解为多个表,可以减少数据的冗余,提高查询的速度和效率。

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

相关推荐
2402_8575893623 分钟前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰1 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer1 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良1 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
vvvae12341 小时前
分布式数据库
数据库
哎呦没2 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
Kalika0-02 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
雪域迷影2 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
编程、小哥哥2 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring