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

相关推荐
正在走向自律2 分钟前
FastGPT高并发登录故障根治方案:50人并发报错、PostgreSQL、MongoDB数据库深度优化手册
数据库·mongodb·postgresql
姜穆澜3 分钟前
时空数据处理全攻略
数据库
OceanBase数据库官方博客12 分钟前
深度拆解seekdb:AI Native Database 的技术架构与核心能力
数据库·人工智能·架构
爱吃鱼的喵️24 分钟前
云数据库怎么选?主流云厂商横向对比与选型指南
数据库·阿里云·云计算
维克兜率天25 分钟前
4.3.2.1 日常监控:上线只是开始
服务器·数据库·python·区块链·php·量化
AIGS00143 分钟前
工艺参数散在Excel和纸质文件里,能不能统一管、随查随用
服务器·数据库·excel·经验沉淀·知识管理·工艺知识·本体语义
裕晟资质规划43 分钟前
军工保密资质二级申报的四个可量化硬条件:条文位置、数值口径与西安配套企业实务要点
java·服务器·网络·数据库·算法
子非鱼a1 小时前
【WEB】October 2019 Twice SQL Injection
数据库·sql
Elastic 中国社区官方博客1 小时前
Elasticsearch:ES|QL 搜索教程
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
喂自己代言1 小时前
从 0.7 秒到 11 毫秒:OceanBase 一条慢 SQL 的三连坑优化实战
数据库·sql·oceanbase