MySQL之数据库三大范式

一、什么是范式?

范式是数据库遵循设计时遵循的一种规范,不同的规范要求遵循不同的范式。

(范式是具有最小冗余的表结构)
范式可以 提高数据的一致性减少数据冗余更新异常的问题

数据库有六种范式(1NF /2NF /3NF /BCNF /4NF /5NF

标题为什么是三大范式呢??

首先我们最常用的就是第一范式第二范式第三范式

并且数据库设计时只需遵循这三个范式即可。

二、 三大范式

第一范式**(1NF)**

-列都是不可再分
第一范式的目标是确保每列的原子性:如果每列都是不可再分 的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

第二范式(2NF)

-每个表只描述一件事情
首先满足第一范式,并且表中非主键列不存在对主键的部分依赖
第二范式要求每个表只描述一件事情

第三范式(3NF)

- 不存在对非主键列的传递依赖
第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖。
也就是
(要求每一列数据都和主键直接相关而不能间接相关)

优点:
  1. 减少数据冗余:避免相同数据在多个地方重复存储,减少存储空间需求。
  2. 确保数据一致性:通过消除传递依赖,减少因数据更新不一致导致的错误。
  3. 简化数据管理:使数据库结构更清晰,便于维护和扩展。

primary key(id)

id name sex_code sex_desc phone address
001 张三 0 17835201234 山西省运城市xx村
002 李四 0 17735204567 山西省吕梁市yy村
003 王五 1 18835207890 山西省太原市zz村

表中sex_desc依赖于sex_code,而sex_code依赖于id(主键),从而推出sex_desc依赖于id(主键);sex_desc不直接依赖于主键,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。

修改表使满足3NF后:

学生表(student)   primary key(id)

id name sex_code phone address
001 张三 0 17835201234 山西省运城市xx村
002 李四 0 17735204567 山西省吕梁市yy村
003 王五 1 18835207890 山西省太原市zz村

性别代码表(sexcode)   primary key(sex_code)

sex_code sex_desc
0
1

将原来的student表进行拆分后,两个表都满足3NF

三、三大范式的缺点

  1. **数据冗余消除过度:**三大范式的设计原则是尽量消除数据冗余,使每个数据项只在数据库中存储一次。然而,过度消除冗余可能导致数据库的关系复杂化,增加了查询和维护的复杂性。有时候,在某些情况下,一些冗余数据可能会提高查询性能或简化数据处理逻辑,但三大范式的设计原则不允许这种冗余存在。

  2. **查询性能受影响:**三大范式的设计原则使得数据库中的数据被分解为多个关系表,这样在进行复杂查询时需要进行多个表的连接操作。这样的查询操作可能会增加数据库的负载,导致查询性能下降。尤其是在大型数据库中,复杂的查询可能需要花费大量的时间来执行。

  3. **数据更新复杂:**三大范式的设计原则使得数据库中的数据被分解为多个关系表,这样在进行数据的插入、更新和删除操作时需要同时更新多个表。这样的操作可能会增加数据更新的复杂性,容易出现数据不一致的问题。同时,由于多表更新的复杂性,可能需要使用事务来保证数据的一致性,进一步增加了数据库的负载和复杂性。

  4. **数据完整性限制:**三大范式的设计原则强调数据的一致性和完整性,要求每个关系表中的数据项必须符合某种规范或约束条件。这些约束条件可能会限制某些特殊情况下的数据录入,使得数据库的灵活性受到了一定的限制。有时候,为了满足特定的需求,可能需要违反某些范式的设计原则。

  5. **难以理解和维护:**三大范式的设计原则使得数据库中的数据被分解为多个关系表,这样数据库的结构变得更加复杂。这对于数据库管理员和开发人员来说可能会增加理解和维护的难度。尤其是在数据库规模较大、关系较复杂的情况下,可能需要更多的时间和精力来理解和维护数据库的结构。

相关推荐
@insist12316 小时前
系统集成项目管理工程师-信息和文档管理
网络·数据库·软考·系统集成项目管理工程师·软考中项·软件水平考试
残 风17 小时前
PostgreSQL 存储机制详解
数据库·postgresql·开源·数据库开发
JacksonMx18 小时前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python
tachibana218 小时前
性能指标的口径选择
数据库·人工智能·架构·大模型·llm
机器人梦想家19 小时前
具身机器人视觉服务的异步回调与并发控制
数据库·算法·机器人
小妖同学学AI19 小时前
开源向量数据库的王者:Milvus 深度解析,专为 AI 应用打造的云原生搜索引擎!
数据库·开源·milvus
l12586520 小时前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus
一只鹿鹿鹿20 小时前
数据资产管理解决方案(Word文件)
大数据·数据库·安全·web安全·系统安全
2401_8949155320 小时前
Geo 优化源码部署实战:环境配置、参数调优完整指南
运维·服务器·数据库·tcp/ip·安全
FfHUCisI21 小时前
Golang database/sql 标准库基础
数据库·sql·golang