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

目录

一.前言

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

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

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

相关推荐
段一凡-华北理工大学17 分钟前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
落苜蓿蓝18 分钟前
Java 循环中对象复用导致属性覆盖?从 JVM 内存模型讲解原因
java·jvm·python
weixin_4407841121 分钟前
Android基础知识汇总
android·java·android studio
布鲁飞丝23 分钟前
从零实现富文本编辑器#-浏览器选区与编辑器选区模型同步
java·前端·编辑器
半桶水专家25 分钟前
SQL Server DML 操作语句完全指南
数据库·sqlserver
Irene199135 分钟前
Oracle 连接避坑指南:环境+配置+账号
数据库·oracle
不在逃避q38 分钟前
一步一步学习使用LiveBindings()TListView进阶使用(),打造天气预报程序
服务器·数据库·学习
2401_8734794042 分钟前
IPv6支持不足怎么办?用双栈兼容IP离线库实现平滑过渡
数据库·网络协议·tcp/ip·ip
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(二十八):顶栏统一战争——从1个页面异常到31个页面全量对齐
数据库·人工智能·uni-app
吴声子夜歌1 小时前
MongoDB 8.0——可视化管理工具
数据库·mongodb