当前位置: 首页 > news >正文

sql专题 之 三大范式

文章目录

  • 背景
  • 范式介绍
    • 第一范式:属性不可再分
    • 第二范式
    • 第三范式
    • 注意事项
  • 为什么不遵循后续的范式
  • 数据库范式在实际应用中会遇到哪些挑战?

背景

  • 数据库的范式(Normal Form)是一组规则,用于设计数据库表结构以 减少数据冗余提高数据完整性
  • 范式的概念最早由埃德加·科德(Edgar F. Codd)提出,他是关系型数据库之父。
  • 范式是一系列的 设计规则

    从第一范式到更高的范式(如第二范式2NF、第三范式3NF、Boyce-Codd范式(BCNF)、第四范式4NF、第五范式NF等)。
    每个层次都建立在前一个层次的基础上,进一步消除数据冗余和依赖关系。

  • 范式虽然分为多个级别,但最常用的是前三个范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)

范式介绍

接下来我们会用一个学生信息存储表来举例来了解一下三大范式的规则。
这张表需存储:学生学号学生姓名考试分数分数等级考试科目手机号码 信息。

  • 初始表格 【表_0】 如下:
    在这里插入图片描述

第一范式:属性不可再分

First Normal Form,但是通常我们用“1NF”来表示

  • 定义

    如果一个表符合第一范式,么这个表中的每个字段都必须包含单一值,而不能是数组或者集合。
    即表中的每个属性都是原子的,不可再分割

  • 特点
    • 所有列的值都不可再分割,且没有重复的列
    • 每行都是唯一的
  • 示例解析

    【表_0】中,score列存储了分数和分数等级两个数据。

  • 缺点:
    • (1)如果需要求学生的总分时,还需要对数据进行切割,损耗了性能
    • (2)如果需要等级A的学生的总数时,只能进行模糊查询,损耗率性能
    • (3)不能按照分数或者分数等级进行分组排序
  • 优化:
    • 将分数和等级拆分成 score 和 score_level 两个字段。优化结果如下【表_1】
      在这里插入图片描述

第二范式

Second Normal Form,但是通常我们用“2NF”来表示

  • 定义

    在满足第一范式的基础上,消除部分依赖
    即,每个非主属性必须依赖于整个主键,而不能仅依赖于部分主键

  • 特点

    1、第二范式一定是第一范式,第一范式是基础
    2、非主属性不能依赖部分属性(没懂不要急,马上就要解释了)

  • 示例解释
    • 【表_1】中,学号(sno)+学科(subject)可以唯一的确定一列。所以【sno+subject】为主键。
      但是学生姓名(sname) 和 电话号码(phone)确是只依赖于sno存在的。
  • 缺点:
    • 数据产生了大量的冗余数据,会增加查询的耗时,也会增加数据一致性的维护成本

      假如学生有十门考试成绩,那么就会存储十份电话号码。
      如果某一个数据出现了不一致的情况,就会不确定正确的数据是哪个了

  • 优化:我们对表进行拆分成【个人信息表】 和【考试成绩表】
    在这里插入图片描述
    在这里插入图片描述

第三范式

Thrid Normal Form,但是通常我们用“3NF”来表示

  • 定义

    在满足第二范式的基础上,消除传递依赖,即非主属性不能依赖于其他非主属性

  • 特点

    所有非主属性都直接依赖于主键,而不能依赖于其他非主属性

  • 示例解释

    在上边的学生信息表中,score_level的取值依赖于score的值。
    如果 score >= 90,那么 score_level=“A”;
    如果71<= score <= 89,那么 score_level=“B”;
    如果 score <= 70,那么 score_level=“C”;

  • 优化:将score_level拆分出来成一个等级表,且该等级表不会改变
    (这里数字太多,我们就只写上边出现的数字吧)
    在这里插入图片描述
    在这里插入图片描述

    这里举例用分数不太恰当,感受不出第三范式的简洁来。
    我们可以这么理解,在公司中的员工考核,评价A+\A\A-,等级均为A;评价B+\B\B-,等级均为B;
    评价C+\C\C-,等级均为C;
    然后我们在等级表中,就只需要存储9条信息就可以了。对比与将考核等级仅满足第二范式,这样可以更清楚的了解等级的划分标准。

注意事项

  • 虽然三大范式是数据库的基本原则,但是在实际情况中也需要根据实际项目情况进行取舍,不要过度追求规范化

    过度规范化可能会导致数据表数量增多、关系变得更加复杂,从而增加查询和维护的难度

  • 如果是大数据量,如表里数据有2000w+,查询时需要关联多张表才能取到完整的数据,造成性能瓶颈。这时候我们可以在表中适当的冗余(用空间换时间~)
  • 所以,在设计数据库时需要根据实际需求进行灵活调整

为什么不遵循后续的范式

  • 在实际应用中,数据库的设计并不需要达到BCNF级别,更不用说4NF\5NF。
    • 1、随着范式的提高,数据库的设计变得更复杂也更难维护
    • 2、高范式可能导致更多的连表查询,影响数据库的性能
    • 3、虽然存在更多范式,但实际中1NF、2NF、3NF常被提及和使用
      (虽然我们大学也学高数,但实际生活中买东西,我们并不需要去求导~😏😏😏)

数据库范式在实际应用中会遇到哪些挑战?

  • 1、设计复杂度高

    高范式的设计意味着更多的表和更复杂的表关系,增加了数据库的设计和理解难度

  • 2、性能下降

    高范式下查询因为要多表连接,会导效率下降,尤其在大数据和高并发访问的场景下尤为明显。

  • 3、存储空间更大

    因为数据不断拆分为多个表,会占用更多的存储空间

  • 4、数据一致性的维护

    在更改一个数据时,需要确保相关表中的数据都得更新

  • 5、插入、更新、删除异常

    在非常严格范式的要求下,如果要增加一条数据,需要先检查多个表。在更新或者删除时,也可能因为依赖关系而更新或者删除不成功

  • 6、数据冗余

    有时为了提升效率而故意引入冗余数据

相关文章:

sql专题 之 三大范式

文章目录 背景范式介绍第一范式&#xff1a;属性不可再分第二范式第三范式注意事项 为什么不遵循后续的范式数据库范式在实际应用中会遇到哪些挑战&#xff1f; 背景 数据库的范式&#xff08;Normal Form&#xff09;是一组规则&#xff0c;用于设计数据库表结构以 减少数据冗…...

node.js安装和配置教程

软件介绍 Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Goo…...

定时器输入捕获实验配置

首先&#xff0c;第一个时基工作参数配置 HAL_TIM_IC_Init( ) 还是一样的套路&#xff0c;传参是一个句柄&#xff0c;先定义一个结构体 Instance&#xff1a;指向TIM_TypeDef的指针&#xff0c;表示定时器的实例。TIM_TypeDef是一个包含了定时器寄存器的结构体&#xff0c;用…...

【C/C++】memcpy函数的使用

零.导言 当我们学习了strcpy和strncpy函数后&#xff0c;也许会疑惑整形数组要如何拷贝&#xff0c;而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数&#xff0c;可以按字节拷贝任意类型的数组&#xff0c;比如整形数组。 …...

spring-security(两种权限控制方式)

案例(写死的用户密码) package com.zking.security.service;import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.sp…...

【mongodb】数据库的安装及连接初始化简明手册

NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…...

【科普】卷积、卷积核、池化、激活函数、全连接分别是什么?有什么用?

概念定义作用/用途解释举例卷积 (Convolution)是一种数学操作&#xff0c;通过在输入数据&#xff08;如图片&#xff09;上滑动卷积核&#xff0c;计算局部区域的加权和。提取数据中的局部特征&#xff0c;例如边缘、角点等。卷积就像在图片上滑动一个小的窗口&#xff0c;计算…...

距离向量路由选择协议和链路状态路由选择协议介绍

距离向量路由选择协议&#xff08;Distance Vector Routing Protocol&#xff09;和链路状态路由选择协议&#xff08;Link-State Routing Protocol&#xff09;是两种主要的网关协议&#xff0c;它们用于在网络内部选择数据传输的最佳路径。下面分别介绍这两种协议&#xff1a…...

【AI大模型】大型语言模型LLM基础概览:技术原理、发展历程与未来展望

目录 &#x1f354; 大语言模型 (LLM) 背景 &#x1f354; 语言模型 (Language Model, LM) 2.1 基于规则和统计的语言模型&#xff08;N-gram&#xff09; 2.2 神经网络语言模型 2.3 基于Transformer的预训练语言模型 2.4 大语言模型 &#x1f354; 语言模型的评估指标 …...

ubuntu 22.04 server 安装 和 初始化 LTS

ubuntu 22.04 server 安装 和 初始化 下载地址 https://releases.ubuntu.com/jammy/ 使用的镜像是 ubuntu-22.04.5-live-server-amd64.iso usb 启动盘制作工具 https://rufus.ie/zh/ rufus-4.6p.exe 需要主板 支持 UEFI 启动 Ubuntu22.04.4-server安装 流程 https://b…...

大数据机器学习算法与计算机视觉应用03:数据流

Data Stream Streaming ModelExample Streaming QuestionsHeavy HittersAlgorithm 1: For Majority elementMisra Gries AlgorithmApplicationsApproximation of count Streaming Model 数据流模型 数据流就是所有的数据先后到达&#xff0c;而不是同时存储在内存之中。在现…...

【代码随想录day25】【C++复健】491.递增子序列;46.全排列;47.全排列 II;51. N皇后;37. 解数独

491.递增子序列 本题做的时候除了去重逻辑之外&#xff0c;其他的也勉强算是写出来了&#xff0c;不过还是有问题的&#xff0c;总结如下&#xff1a; 1 本题的关键&#xff1a;去重 与其说是不知道用什么去重&#xff0c;更应该说是完全没想到本题需要去重&#xff0c;说明…...

AI智能识物(微信小程序)

AI智能识物&#xff0c;是一款实用的小程序。可以拍照智能识物&#xff0c;可识别地标、车型、花卉、植物、动物、果蔬、货币、红酒、食材等等&#xff0c;AI智能技术识别准确度高。 更新说明&#xff1a; 此源码为1.2.0版本。 主要更新内容&#xff1a;新增security.imgSec…...

游戏引擎学习第三天

视频参考:https://www.bilibili.com/video/BV1XTmqYSEtm/ 之前的程序不能退出&#xff0c;下面写关闭窗体的操作 PostQuitMessage 是 Windows API 中的一个函数&#xff0c;用于向当前线程的消息队列发送一个退出消息。其作用是请求应用程序退出消息循环&#xff0c;通常用于处…...

帝国CMS7.5仿模板堂柒喜模板建站网 素材资源下载站源码

环境要求&#xff1a;phpmysql、支付伪静态 本套模板采用帝国cms7.5版UTF-8开发&#xff0c;一款非常不错的高端建站源码模板&#xff0c; 适用于中小型网络建站工作室源码模板下载站&#xff0c;支持自定义设置会员组。 源码下载&#xff1a;https://download.csdn.net/down…...

聊一聊Spring中的自定义监听器

前言 通过一个简单的自定义的监听器&#xff0c;从源码的角度分一下Spring中监听的整个过程&#xff0c;分析监听的作用。 一、自定义监听案例 1.1定义事件 package com.lazy.snail;import lombok.Getter; import org.springframework.context.ApplicationEvent;/*** Class…...

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计&#xff08;MLE&#xff09; 二、最大后验估计&#xff08;MAP&#xff09; 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时&#xff0c;MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频&#xff1a; 贝叶斯解释“L1和L2正则化”&#xff…...

智谱AI视频生成模型CogVideoX v1.5开源 支持5/10秒视频生成

今日&#xff0c;智谱技术团队发布了其最新的视频生成模型 CogVideoX v1.5&#xff0c;并将其开源。这一版本是自8月以来&#xff0c;智谱技术团队推出的 CogVideoX 系列中的又一重要进展。 据了解&#xff0c;此次更新大幅提升了视频生成能力&#xff0c;包括支持5秒和10秒的视…...

算法(第一周)

一周周五&#xff0c;总结一下本周的算法学习&#xff0c;从本周开始重新学习许久未见的算法&#xff0c;当然不同于大一时使用的 C 语言以及做过的简单题&#xff0c;现在是每天一题 C 和 JavaScript&#xff08;还在学&#xff0c;目前只写了一题&#xff09; 题单是代码随想…...

Linux服务器进程的控制与进程之间的关系

在 Linux 服务器中&#xff0c;进程控制和进程之间的关系是系统管理的一个重要方面。理解进程的生命周期、控制以及它们之间的父子关系对于系统管理员来说至关重要。以下是关于进程控制、进程之间的关系以及如何管理进程的详细介绍&#xff1a; 1. 进程的概念 进程&#xff0…...

机器学习Housing数据集

import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import fetch_openml 设置Seaborn的美观风格 sns.set(style“whitegrid”) Step 1: 下载 Housing 数据集&#xff0c;并读入计算机 def load_housing_data(): housing …...

随着最新的补丁更新,Windows 再次变得容易受到攻击

SafeBreach专家Alon Leviev发布了一款名为 Windows Downdate的工具&#xff0c;可用于对Windows 10、Windows 11 和 Windows Server 版本进行降级攻击。 这种攻击允许利用已经修补的漏洞&#xff0c;因为操作系统再次容易受到旧错误的影响。 Windows Downdate 是一个开源Pyth…...

【Python】爬虫通过验证码

1、将验证码下载至本地 # 获取验证码界面html url http://www.example.com/a.html resp requests.get(url) soup BeautifulSoup(resp.content.decode(UTF-8), html.parser)#找到验证码图片标签&#xff0c;获取其地址 src soup.select_one(div.captcha-row img)[src]# 验证…...

dc-aichat(一款支持ChatGPT+智谱AI+讯飞星火+书生浦语大模型+Kimi.ai+MoonshotAI+豆包AI等大模型的AIGC源码)

dc-aichat 一款支持ChatGPT智谱AI讯飞星火书生浦语大模型Kimi.aiMoonshotAI豆包AI等大模型的AIGC源码。全网最易部署&#xff0c;响应速度最快的AIGC环境。PHP版调用各种模型接口进行问答和对话&#xff0c;采用Stream流模式通信&#xff0c;一边生成一边输出。前端采用EventS…...

检索增强生成

检索增强生成 检索增强生成简介 检索增强生成&#xff08;RAG&#xff09;旨在通过检索和整合外部知识来增强大语言模型生成文本的准确性和丰富性&#xff0c;其是一个集成了外部知识库、信息检索器、大语言模型等多个功能模块的系统。 RAG 利用信息检索、深度学习等多种技术…...

操作系统--进程

2.1.1 进程的概念、组成、特征 进程的概念 进程的组成 进程的特征 总结 2.1.2 进程的状态与转换,进程的组织 创建态、就绪态 运行态 阻塞态 终止态 进程状态的转换 进程的组织 链式方式 索引方式 2.1.3 进程控制 如何实现进程控制? 在下面的例子,将PCB2的是state设为1和和把…...

abap 可配置通用报表字段级日志监控

文章目录 1.功能需求描述1.1 功能1.2 效果展示2.数据库表解释2.1 表介绍3.数据库表及字段3.1.应用日志数据库抬头表:ZLOG_TAB_H3.2.应用日志数据库明细表:ZLOG_TAB_P3.3.应用日志维护字段配置表:ZLOG_TAB_F4.日志封装类5.代码6.调用方式代码7.调用案例程序demo1.功能需求描述 …...

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换&#xff08;warp&#xff09;。 该函数根据 ECC 标准 ([78]) 估计最优变换&#xff08;warpMatri…...

PGMP-串串0203 项目集管理绩效域战略一致性

1.项目集管理绩效域 2.战略一致性 战略一致性包含内容商业论证BC项目集章程项目集路线图环境评估项目集风险管理策略 前期formulation sub-phaseplanning sub-phase组织的战略计划项目集风险管理策略项目集管理计划商业论证BC项目集章程项目集路线图环境评估...

HiveMetastore 的架构简析

HiveMetastore 的架构简析 Hive Metastore 是 Hive 元数据管理的服务。可以把元数据存储在数据库中。对外通过 api 访问。 hive_metastore.thrift 对外提供的 Thrift 接口定义在文件 standalone-metastore/src/main/thrift/hive_metastore.thrift 中。 内容包括用到的结构体…...

浙江三建建设集团有限公司网站/郑州seo关键词自然排名工具

在网页中做渐变色一直是个比较痛苦的事情&#xff0c;又是图片又是背景&#xff0c;现在好了&#xff0c;找了下搜索引擎终于发现其实样式表是可以实现渐变的效果的&#xff0c;以前一直都不知道&#xff0c;诶。 1、从左到右的渐变&#xff1a;style"FILTER:progid:D…...

济南网站建设认可搜点网络能/单页网站排名优化

prefork模式&#xff1a;Apache在启动之初&#xff0c;就预先fork一些子进程&#xff0c;然后等待请求进来。之所以这样做&#xff0c;是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程&#xff0c;在一个时间点内&#xff0c;只能处理一个请求。 优点&#xff1a;…...

哪里专业做网站/如何建立网站 个人

pubsub&#xff0c;即订阅发布&#xff0c;在vue和react中常常被用于任意组件间的传值。 例如&#xff1a;订阅报纸&#xff1a; 1&#xff0c;交钱&#xff0c;说好地址&#xff0c;订阅哪一种报纸 2&#xff0c;邮递员送报纸 本文主要简述pubsub的基本使用流程。 1.在终端…...

推广平台软件/兰州网络推广优化服务

import export 这两个家伙对应的就是es6自己的module功能。 我们之前写的Javascript一直都没有模块化的体系&#xff0c;无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小工程&#xff0c;再用一种简单的方法把这些小工程连接在一起。 这有可能导致两个问题&…...

网页开发设计公司/广州seo营销培训

1114. Family Property 题目大意 给定每个人的家庭成员和其名下的房产&#xff0c;请你统计出每个家庭的人口数、人均房产套数和面积。首先在第一行输出一个家庭个数。随后按照下列格式输出每个家庭的信息&#xff1a;家庭成员的最小编号、家庭人口数、人均房产套数、人均房产…...

dreamweaver网站建设教程/软文网站名称

显卡天梯图就是显卡的性能排行榜&#xff0c;目前显卡主要有Nvidia(英伟达)和AMD(超微半导体)两大品牌。我们都知道&#xff0c;显卡性能决定了电脑的图像处理能力。对于喜欢玩游戏的电脑用户来说&#xff0c;处理器和显卡是用户最关心的电脑硬件&#xff0c;一块好的显卡对于游…...