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

目录

一.前言

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

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

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

相关推荐
zcmodeltech17 分钟前
智慧城市沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的园区-城市-数字孪生联动方案
服务器·数据库·人工智能·stm32·嵌入式硬件·信息可视化·智慧城市
ashiho24 分钟前
【Redis】原理篇 3w字详解
数据库·redis·缓存·bootstrap
2601_9657984732 分钟前
Why Most WordPress Themes Break Elementor and How I Fixed It
数据库·人工智能·php
雨辰AI41 分钟前
人大金仓 K8s 密评合规加固|国密全链路加密 + 权限收敛容器化落地(三级密评直通版)
java·云原生·容器·kubernetes·政务
郑州光合科技余经理6 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
码哥DFS9 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck10 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
long31610 小时前
MySQL 学习练习(配套 01 入门资料)
数据库·学习·mysql
Pluchon10 小时前
Java个人综合项目——萌部落社区V2.0
java·python·spring·spring cloud·postman·idea