MySQL之数据库三大范式

ops/2024/12/15 0:55:11/

一、什么是范式

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

范式是具有最小冗余的表结构)

范式可以 提高数据的一致性减少数据冗余更新异常的问题

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

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

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

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

二、  三大范式

第一范式(1NF)

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

 

第二范式(2NF)

-每个表只描述一件事情

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

 

第三范式(3NF)

- 不存在对非主键列的传递依赖

第三范式定义是,满足第二范式并且表中的列不存在对非主键列的传递依赖。
也就是(要求每一列数据都和主键直接相关而不能间接相关)
优点:
  1. 减少数据冗余:避免相同数据在多个地方重复存储,减少存储空间需求。
  2. 确保数据一致性:通过消除传递依赖,减少因数据更新不一致导致的错误。
  3. 简化数据管理:使数据库结构更清晰,便于维护和扩展。

primary key(id) 

idnamesex_codesex_descphoneaddress
001张三017835201234山西省运城市xx村
002李四017735204567山西省吕梁市yy村
003王五118835207890山西省太原市zz村

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

修改表使满足3NF后:

学生表(student)   primary key(id)

idnamesex_codephoneaddress
001张三017835201234山西省运城市xx村
002李四017735204567山西省吕梁市yy村
003王五118835207890山西省太原市zz村

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

sex_codesex_desc
0
1

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

三、三大范式的缺点

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

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

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

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

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


http://www.ppmy.cn/ops/141960.html

相关文章

手机使用笔记

文章目录 配置一键换机 手机玩的很菜,做个笔记,有时自己找着方便。 配置 怕手机的配置不够,要不要弄顶配。 实际如果不玩游戏,根本遇不到性能瓶颈,现在的芯片都这么强,应对办公和多开早就轻轻松松。 随便…

我在广州学 Mysql 系列之 数据“表”的基本操作

ℹ️大家好,我是😆练小杰,今天主要讲得是Mysql数据表的基本操作内容~~ 昨天讲了“Mysql 数据“库“的基本操作”~~ 想要了解更多🈶️MYSQL 数据库的命令行总结!!! “真相永远只有一个”——工藤…

根据契约进行分析--录像店案例研究01

Richard Mitchell 著,zhen_lei 译 本文包括录像店案例研究的一些片段,用来说明根据契约进行分析的原理。本文假定读者已经从其它渠道学习了一些关于根据契约进行分析的方法。 完整的一套模型可以写成一本书。这些选择的片段用来说明开发的某些方面&…

【计算机视觉】医疗图像关键点识别

1. CNN 1.1. 设备参数 1.2. 代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms from tqdm import tqdm import os import cv2 import numpy as np import time im…

java和go语言的优劣

Java 和 Go 是两种非常流行的编程语言,各自拥有独特的特性和优势。它们在不同的应用场景中表现出色,选择哪种语言取决于具体的项目需求、团队技能以及个人偏好。下面我们将从多个维度对比 Java 和 Go 的优劣,帮助您更好地理解这两种语言的特点…

前端成长之路:HTML(1)

每个网页都会有一个基本的结构标签&#xff08;也称为骨架标签&#xff09;&#xff0c;页面内容也是在这些基本标签上书写。 基本结构标签&#xff08;骨架标签&#xff09; <html></html>标签是HTML标签&#xff0c;是页面中最大的标签&#xff0c;被称为根标签…

渗透测试工具 -- SQLmap安装教程及使用

随着网络安全问题日益严峻&#xff0c;渗透测试成为了保护信息安全的重要手段。而在渗透测试的众多工具中&#xff0c;SQLmap凭借其强大的自动化SQL注入检测和利用能力&#xff0c;成为了网络安全专家必备的利器。那么&#xff0c;你知道如何高效地使用SQLmap进行漏洞扫描吗&am…

又细又长的马尾:tail

英语里边有一个单词 tail&#xff0c;意为“尾巴”&#xff0c;这应当是众所周知的事情了。 不过&#xff0c;tail 这条尾巴&#xff0c;并不简单&#xff0c;因为它还是一个词根&#xff0c;也就是说 tail 其实是自由词素。 事实上&#xff0c;tail 最初来自 马尾 这样一个概…