【MySQL进阶之路 | 高级篇】第二范式和第三范式

1. 第二范式

第二范式要求,在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。如果知道主键的所有属性的值,就可以检索到任何元组的任何属性的任何值。(要求中的主键,其实可以扩展替换为候选键)。

1). 例1:

成绩表(学号,课程号,成绩)关系中,(学号,课程号)可以决定成绩,但学号不能决定成绩,课程号也不能决定成绩,所以“(学号,课程号)--> 成绩”就是完全依赖关系。

2). 例2:

比赛表player_game,里面包含球员编号,姓名,年龄,比赛编号,比赛时间和比赛场地等属性,这里候选键和主键都为(球员编号,比赛编号),我们可以通过候选键来决定如下关系。

(球员编号,比赛编号)--> (姓名,年龄,比赛时间,比赛场地,得分)

但这个数据表不满足第二范式,因为数据表的字段之间还存在如下的关系:

(球员编号)--> (姓名,年龄)

(比赛编号)--> (比赛时间,比赛场地)

对于非主属性来说,并非完全依赖候选键。这种情况下会产生问题。

为了避免出现上述的情况,我们可以把球员比赛表设计为下面的三张表。

表名属性
球员player表球员编号,姓名和年龄等属性
比赛game表比赛编号,比赛时间和比赛场地等属性
球员比赛关系player_game表球员编号,比赛编号和得分属性

这样的话,每张数据表都符合第二范式,也就避免了异常情况的情况。

  • 1NF告诉我们字段属性需要是原子性的,而2NF告诉我们一张表就是一个独立的对象,一张表只表达一个意思。
  • 2NF要求实体的属性完全依赖主关键字。如果存在不完全依赖,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

2. 第三范式

第三范式是在第二范式的基础上,确保数据表中每一个非主键字段都和主键字段直接相关,也就是说,要求数据表中的所有非主键字段不能依赖于其他非主键字段,不存在传递依赖(即,不能存在非主属性A依赖于非主属性B,而非主属性B依赖于主键C的情况,即存在A->B->C的决定关系),通俗地讲,该规则的意思是所有非主键属性之间不能有依赖关系,必须相互独立。

这里的主键可以拓展为候选键。

举例1:

部门信息表:每个部门有部门编号,部门名称,部门简介等信息。

员工信息表:每个员工有员工编号,姓名,部门编号。列出部门编号后就不能将部门名称,部门简介等与部门有关的信息加入员工信息表中。

因为知道部门编号,就知道部门名称,部门简介,它们都是非主属性,且存在依赖关系。

第三范式不允许非主属性之间存在依赖关系。

符合3NF后的数据模型通俗的讲,2NF和3NF以这句话概括:每个非键属性依赖于键,依赖于整个键,并且除了键别无他物。

3. 小结

关于数据表的设计,有三个范式要遵循。

  1. 第一范式:确保每列保持原子性。数据库的每一列都是不可分割的原子数据项,不可再分的最小数据单元,而不能是集合,数组,记录等非原子数据项。
  2. 第二范式:确保每一列都和主键完全依赖。尤其是复合主键的情况下,非主键部分不应该依赖部分主键。
  3. 第三范式:确保每列都和主键列直接相关,而不是间接相关。

范式的优点:数据的标准化有助于 消除数据库中的数据冗余,3NF通常被认为在性能,扩展性和数据完整性方面达到最好的平衡。

范式的缺点:范式的使用,可能降低查询的效率。因为范式等级越高,设计出的数据表越来越多,越精细,数据的冗余度越低,进行数据查询的时候就可能需要关联多张表,这不但代价昂贵,也可能使一些索引策略无效。

范式只是提出了设计的标准,但实际设计数据表时,未必一定要符合这些标准。开发中,我们会为了性能和读取效率违反范式化的原则,通过增加少量冗余或重复的数据来提高数据库的性能,减少关联查询 ,join表的次数,实现空间换时间的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 基础练习 - Chapter 5(英文版)

Review Questions 5.1 How do structures in C and C differ? Answer: C structure member functions are not permitted but in C member functions are permitted. 5.2 What is class? How does it accomplish data hiding? Answer: A class is a way to bind the d…

自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感…

MySQL聚合函数(DQL)

先看一下我的表内容和数据,再做接下来的例子和讲解 1.聚合函数的基本语法 SELECT 聚合函数(表中的某个字段)FROM 表名; 2. 常见的聚合函数 举例 1.统计该企业的数量 select count(idcard) from emp; 2.统计该企业员工的平均年龄 select…

【论文精读】Fully Sparse 3D Occupancy Prediction

1 背景信息 团队:南京大学,上海人工智能实验室 时间:2023年12月 代码:https://github.com/MCG-NJU/SparseOcc 2 OCC预测存在的问题 2.1 dense 3D features 目前都是提取的密集3D特征,但是据统计,**90%*…

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外, 自Spring3.1开始,Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件…

QSqlRelationalTableModel 增删改查

QSqlRelationalTableModel 可以作为关系数据表的模型类,适用于三范式设计的表,主表中自动加载外键表中的名称。本文实现QSqlRelationalTableModel 为模型类,实现增删改查。 目录 0.表准备 1. 构建表格数据 声明变量 表格、数据模型、选择…

全球价值链贸易核算matlab程序(TIVA与WWZ分解方法大全)以及区域表链接方法

数据来源:基础数据来源于世界银行、国家统计局时间范围:2007年数据范围:国家与行业层面样例数据: 包含内容: 全部数据下载链接:https://download.csdn.net/download/samLi0620/89567902

Redis的操作以及SpringCache框架

目录 一.什么是Redis? 二.Redis的相关知识: 三.如何操作Redis? 1,常用命令: 2.Spring Data Redis (1) pom.xml 配置: (2)配置Redis数据源: …

麒麟V10安装nginx、mysql报错缺少包:error while loading shared libraries libssl.so.10

背景 启动nginx报错:error while loading shared libraries libssl.so.10 解决 查看nginx启动文件所依赖的动态链接库(即共享库或动态库) ldd nginx-1.22.1/sbin/nginx离线安装compat-openssl10包 将依赖包麒麟v10安装openssl10依赖包上…

QT6.6+Opencv 4.6.0完成摄像头显示以及捕获照片的功能

效果图提前展示,想试试再往下看: 在网上找了很久QT的摄像头打开方式,成功了,但是捕获照片一直不成功,我不知道是不是qt6版本的原因:这个多媒体窗口我安装没有效果 QT += multimediawidgets之前使用过python的opencv,于是想到可以使用opencv来显示摄像头以及捕获照片。…

C++完整的学生管理系统

实现功能 添加、删除、修改学生为学生添加、删除、修改成绩将数据保存在students.txt和grades.txt里 效果图&#xff08;部分功能&#xff09; 添加学生 添加成绩 源代码 这里就不分多个文件了 编译时在连接器命令行加入以下命令 -stdc11 #include <ios…

极客天成NVFile全闪存储加速千卡AIGC大模型训练平台

01 中国AI算力核心产业现状 随着人工智能技术的快速发展和广泛应用&#xff0c;AI算力已成为推动数字经济和科技创新的关键基础设施。2024年&#xff0c;中国AI算力核心产业规模持续扩大&#xff0c;在全球AI发展格局中占据重要地位&#xff0c;中国AI算力核心产业规模达到约…

LangChain的数据增强

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

Spring事务(1)

目录 一、事务回顾 1、什么是事务&#xff1f; 2、为什么需要事务&#xff1f; 3、事务的操作 二、Spring 中事务的实现 1、代码准备&#xff1a; &#xff08;1&#xff09;创建项目 spring-trans&#xff0c;引入 Spring Web&#xff0c;MyBatis&#xff0c;MySQL等依…

【C++】C++前言

目录 一.什么是C 1.1.面向过程&#xff1a; 1.2.面向对象&#xff1a; 二.C发展历史 三.C版本更迭 3.1.语法更新 3.2.关于C2X最新特性的讨论&#xff1a; 3.3.关于C23的一个小故事&#xff1a; 四.C参考文档&#xff1a; 五.C的重要性&#xff1a; 5.1.编程语言排行榜…

JESD204B学习与仿真

平台&#xff1a;vivado2018.3 芯片&#xff1a;xcku115-flva1517-2-i 场景&#xff1a;在高速ADC和DAC芯片中&#xff0c;有使用源同步的时钟和数据同步传输的方式&#xff0c;但是需要在逻辑内部对其进行校准。如果使用jesd204b接口传输数据&#xff0c;设计人员不需要了解…

《流程引擎原理与实践》开源电子书

流程引擎原理与实践 电子书地址&#xff1a;https://workflow-engine-book.shuwoom.com 第一部分&#xff1a;流程引擎基础 1 引言 1.1 流程引擎介绍 1.2 流程引擎技术的发展历程 1.3 相关产品国内外发展现状 1.4 本书的内容和结构安排 2 概念 2.1 基础概念 2.2 进阶…

MODBUS tcp学习总结

MODBUS TCP协议实例数据帧详细分析_modbus 帧结构-CSDN博客

Vuex看这一篇就够了

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Win11 改造

记录一些安装 win11 系统之后&#xff0c;对使用不习惯的地方&#xff0c;进行的个人改造 右键菜单 Hiyoung006/Win11Useable: 将Win11右键菜单及资源管理器恢复为Win10样式的脚本 切换到旧版右键菜单&#xff1a; reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34…