MYSQL学习笔记(个人)(第十五天)

作者:chenzhou__日期:2025/10/19

自学《数据库系统原理与应用》——— 黄宝贵、马春梅、禹继国 —— 清华大学出版社

关系规范化理论:

关系规范化的作用:

为了设计一个合理、可靠、简单、正确的关系数据库,形成了关系规范化理论。其包括两个方面的内容:1.数据依赖,研究属性之间的依赖关系;2.范式,是关系模式符合某种级别的标准。

1.问题的提出:

下面有个关系模式:
SCD(sno, sname, dname, office, cno, cname, score)

其中按照现实需求和实际应用,可得语义:
(1)一个学院有多名学生,一名学生只能属于一个学院。
(2)一个学院只有一处办公地点一处办公地点只能被一个学院使用。
(3)一名学生可以选修多门课程,一门课程可以被多名学生选修。
(4)每名学生选修每门课程都有一个成绩。
在SCD关系模式中填人部分数据,可得到该关系模式的具体实例,如表所示:

snosnamednameofficecnocanmescore
S1舟舟计算机学院C101C1计算机基础90
S1舟舟计算机学院C101C2数据库98
S3断弦计算机学院C101C2数据库85
S3断弦网络学院F301C3程序设计92
S3断弦网络学院F301C1计算机基础79
S5小维软件学院S201C1计算机基础64
S5小维软件学院S201C3程序设计92

在这个数据库当中存在异常,分为为:

1.数据亢余:

数据冗余就是某种信息在关系中重复存储多次。
在SCD关系中,学生的学号sno和姓名sname重复存储,其重复的次数等于该生选修的课程门数;课程号cno和课程名称cname重复存储,其重复的次数等于选修该门课程的学生的人数等等。

2.插入异常:

插人异常一般是指该插人的记录插不进去。
在SCD关系中,如果某个学生没有选修课程,那么该学生的信息就插不进去,如果某门课程没有被学生选修,该课程信息也插不进去。如果有新成立的学院,但是该学院没有学生,或是有学生但学生都没有选课那么该学院的信息也都插不进去。

3.删除异常:

删除异常是指不该删除的记录被删除。
在SCD关系中,如果某名学生只选修了一门课程,由于某种原因,该生连这门课程也不选修了,那么当删除该生的选修记录时,就会把该生的记录也删除。同理,如果某门课程只被一名学生选修,由于某种原因,该生不再选修这门课程,那么在删除该选修记录的同时就会把这门课的课程记录也删除。

4.更新异常:

更新异常是指由于更新不完全而导致数据不一-致。
在SCD关系中,如果更换某学院的办公地点那么该院有多少学生,修了多少门课,都要修改。如果漏掉了其中一条记承.就会出现该学院有两处办公地点的情况,和语义不相符,导致数据不一致。

2.问题的原因:

关系模式产生异常是因为它“包罗万象”,包含大量的属性,导致数据亢余。

3.问题的解决:

对上述关系模式进行分解,使每一一个关系模式表达的概念单一,属性间的数据依赖关系单纯化,从而消除这些异常。例如,SCD关系模式可以分解为以下四个关系模式:
PDepartment( dname ,office)
PStudent(sno, sname,dname)
PCourse( cno,cname)
SC(sno,cno,score)

PDepartment

dnameoffice
计算机学院C101
网络学院F301
软件学院S201

PStudent

snosnamesdept
S1舟舟计算机学院
S3断弦网络学院
S5小维软件学院

PCourse

cnocname
C1计算机基础
C2数据库
C3程序设计

PSC

snocnoscore
S1C190
S1C298
S3C285
S3C392
S3C179
S5C164
S5C392

函数依赖:

数据依赖是同一关系中属性间的相互依赖和相互制约,是语义的体现。
数据依赖有很多种,主要包括函数依赖(Functional Dependency, FD)、多值依赖(Multivalued Dependency ,MVD)和连接依赖(Join Dependency,JD)。

函数依赖的定义:

设R(U)是属性集U 上的关系模式,X、Y是∪的子集。若对于R(U)的任意一个可能的关系r,对于x的每一个具体的值,Y都有唯一的值与之对应 。则称x丽数确定Y或Y函数依赖于X,记作X->Y。
X称为函数依赖的决定因素,Y称为依赖因素。
在关系模式SCD中,对于每个学号sno的值,都有唯-的姓名sname 与之相对应,即当知道某个学生的学号时,就一定能唯一确定该生的姓名。因此,称sno丽数确定sname,或者称sname函数依赖于sno,记作sno->sname,其中sno是决定因素,sname是依赖因素。
(st:类似数学里函数的概念)

如果一个X,无唯一确定Y的话,就是Y不函数依赖于X,记作X-/->Y。若X->Y,同时Y->X,他们就是相互函数依赖,记作X\leftrightarrowY。

函数依赖的分类:

如果X->Y,同时Y是X的真子集,称X->Y是平凡的函数依赖,如果不是真子集,就是非平凡的函数依赖。

如果对于X的任何一个真子集X`,都有X`-/->Y,则称Y完全函数依赖与X,若存在X`->Y,则称Y部分函数依赖X。

若X->Y,Y不是X的真子集,且Y-/->X,Y->Z,则称Z传递函数依赖与X,记作-T->Z。

函数依赖的推理规则:

Armstrong公理系统:
设X、Y和Z是R(U)上的属性集,Armstrong公理系统有以下三条基本公理:
A1(自反性):如果Y ⊆ X,则X → Y。
A2(增广性):如果X → Y且Z ⊆ U,则XZ → YZ。
A3(传递性):如果X → Y且Y → Z,则X → Z。

Armstrong公理系统的推论:
B1(合并性):如果X → YZ且X → Z,则X → YZ。
B2(分解性):如果X → Y且X → Z,则X → YZ。
B3(结合性):如果X → Y且W → Z,则XW → YZ。
B4(伪传递性):如果X → Y且WY → Z,则XW → Z。

关系的规范化:

规范化:

一个关系模式符合的范式级别越低,越容易出现异常现象,所以关系规范化重点在把多于一个概念的关系”分离“,形成多个关系。

范式:

范式是符合某一种级别的关系模式的集合,是衡量关系模式规范化程度的标准,分为1NF,2NF,3NF,BCNF,4ND,5NF。

1NF(第一范式)

定义:数据库表的每一列都是不可再分的原子数据项,不能有嵌套的集合、数组或结构体等复杂数据类型。
判断方法
每一列的数据必须是单一值,不能是复合值。
例如,地址列应该包含具体的“城市”、“街道”、“门牌号”等单个字段,而不是一个包含所有地址信息的字符串。

非1NF表

IDNameAddress
1AliceNew York, Broadway Street
2BobLA, Hollywood Boulevard

1NF表

IDNameCityStreet
1AliceNew YorkBroadway Street
2BobLAHollywood Boulevard

2NF(第二范式)

定义:在满足1NF的基础上,所有非主属性完全依赖于整个主键,而不仅仅是主键的一部分。
判断方法
主键为单列时,表已经满足2NF。
主键为多列时,所有非主属性必须依赖于整个主键,而不是主键的某一部分。

非2NF表

OrderIDProductIDProductNameQuantityOrderDate
1101Laptop22023-10-01
2102Phone12023-10-02

2NF表

OrderIDProductIDQuantity
11012
21021
31011
ProductIDProductName
101Laptop
102Phone

3NF(第三范式)

定义:在满足2NF的基础上,所有非主属性不依赖于其他非主属性,只依赖于主键。
判断方法
需要检查表中的非主属性,确保它们之间没有依赖关系。
如果存在传递依赖,则需要分解表。

非3NF表

StudentIDStudentNameDepartmentDepartmentHead
1AliceCSProf. Smith
2BobEEProf. Jones

3NF表

StudentIDStudentNameDepartment
1AliceCS
2BobEE
DepartmentDepartmentHead
CSProf. Smith
EEProf. Jones

BCNF(Boyce-Codd范式)

定义:BCNF是比3NF更严格的范式,要求所有非平凡函数依赖的决定因素必须是候选键。
判断方法
检查表中的所有非平凡函数依赖,确保决定因素是候选键。
如果表中有非候选键的属性依赖于其他非候选键,则表不符合BCNF。

非BCNF表

CourseIDTeacherIDTeacherName
101T1Alice
102T2Bob

BCNF表

CourseIDTeacherID
101T1
102T2
TeacherIDTeacherName
T1Alice
T2Bob

4NF(第四范式)

定义:在满足BCNF的基础上,要求表中不存在多值依赖,即某些列值之间不存在多种独立选择关系。
判断方法
检查表中是否存在多值依赖,如果存在,则分解表以消除多值依赖。

非4NF表

EmployeeIDSkill1Skill2
1JavaPython
2C++Ruby

4NF表

EmployeeIDSkill
1Java
1Python
2C++
2Ruby

多值依赖

定义:多值依赖描述了表中某些列值之间的特殊关系,当一个列的值与另一些列的值之间存在多种独立选择时,就存在多值依赖。

数学表达:如果对于每个A的值,B有多个独立的值,那么称A多值依赖于B,记作A →→ B。

具有多值依赖的表

StudentIDCourseIDBookID
1101B1
1102B2
1103B3
2101B1
2102B2

分解后的表

StudentIDCourseID
1101
1102
1103
2101
2102
CourseIDBookID
101B1
102B2
103B3

MYSQL学习笔记(个人)(第十五天)》 是转载文章,点击查看原文


相关推荐


[嵌入式系统-136]:主流AIOT智能体软件技术栈
文火冰糖的硅基工坊2025/10/18

主流AIoT(人工智能物联网)智能体软件技术栈涵盖了硬件、通信、AI算法、安全防护等多个层面,其核心在于通过“感知-分析-决策-执行”的闭环架构,将物联网的连接能力与人工智能的认知能力深度融合。以下从技术架构、关键技术栈、应用场景三个维度进行解析: 一、技术架构:分层解耦与闭环控制 AIoT智能体的技术架构通常分为四层,每层承担特定功能并协同工作: 感知层 功能:通过传感器和终端设备采集环境数据(如温度、湿度、图像、声音等)。关键技术: 传感器技术:高精度、低功耗的传感器(


C#设计模式源码讲解
小张9992025/10/16

C#设计模式源码合集,包含23种设计模式完整源码,每个模式都有详细注释和实例代码。 不想打螺丝,转行做架构师       功能亮点: 1.创建型模式5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式 2.结构型模式7种:适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式 3.行为型模式11种:策略模式、迭代器模式、中介者模式、观察者模式、状态模式、模板方法模式、命令模式、职责链模式、访问者模式、解释器模式、备忘录模式 4.每个模式都配有详细注释和实


告别JS初学者噩梦:这样写流程控制和函数才叫优雅
良山有风来2025/10/15

你是不是也遇到过这样的场景? 面对一堆复杂的if-else嵌套,自己都看不懂昨天写的代码;想要复用某个功能,却只能笨拙地复制粘贴;代码越写越长,bug越改越多,最后连自己都不想维护... 别担心,今天这篇文章就是来拯救你的! 我将带你重新认识JavaScript的流程控制和函数封装,分享一些让代码变得更优雅、更易维护的实用技巧。读完本文,你将彻底告别“面条式代码”,写出既漂亮又实用的JavaScript代码。 流程控制:从混乱到清晰 先来看个真实案例。假设我们要根据用户等级显示不同的权益: //


无Dockerfile构建:云原生部署新姿势
10岁的博客2025/10/14

容器化安装新玩法:无 Dockerfile 构建与多环境部署 创新点解析 Buildpacks 免 Dockerfile 构建 通过云原生构建包自动分析代码类型(Python/Node.js/Java等)动态生成最优容器镜像,无需手动编写 Dockerfile示例命令:pack build my-app --builder=gcr.io/buildpacks/builder:v1 Kubernetes 多环境热切换 使用 Kustomize 实现同一应用的多环境配置覆盖环境差异抽象为覆盖


如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
IT橘子皮2025/10/12

基于 Spring Cloud Gateway 实现灰度发布,核心思路是通过定义路由规则,将特定流量导向新版本服务。下面我用一个表格汇总主要策略,然后提供具体配置示例和关键说明。 🎯 灰度发布策略概览 策略类型核心机制适用场景​基于请求头 (Header)​​检查请求头中的特定标识(如 X-Gray-Release: true)内部测试、指定体验用户​基于权重 (Weight)​​按配置的百分比随机分配流量到不同版本A/B测试、逐步放量​基于用


Go语言实战案例——进阶与部署篇:使用Docker部署Go服务
程序员爱钓鱼2025/10/11

在现代软件开发中,应用的可移植性和环境一致性至关重要。无论是在开发环境、测试环境还是生产环境,我们都希望 Go 项目能够快速部署、稳定运行。而 Docker 正是实现这一目标的关键工具。 本文将带你从零开始,实战演示如何使用 Docker 构建并部署一个 Go Web 服务。通过这个案例,你将学会将 Go 应用打包成轻量级容器镜像,并在任何地方一键运行。 一 为什么使用 Docker 部署 Go 服务 在未使用 Docker 之前,部署 Go 项目通常需要以下步骤: 1 安装 Go 环境 2


一款由网易出品的免费、低延迟、专业的远程控制软件,支持手机、平板、Mac 、PC、TV 与掌机等多设备远控电脑!
追逐时光者2025/10/9

前言 在多设备协同日益普及的今天,高效、流畅的远程控制已成为工作与生活的刚需。网易出品的这款免费远程控制软件,凭借低延迟、高画质与跨平台兼容性,轻松实现手机、平板、Mac、PC、TV 乃至掌机对电脑的远程操控,让自由办公与畅快娱乐触手可及。 工具介绍 网易UU远程是一款由网易出品的专业远程控制软件。支持手机、平板、Mac 、PC、TV 与掌机等多设备远控电脑,满足远程游戏、办公和协助需求。凭借高速直连和超低延迟,提供流畅的本地操控体验,支持真彩、 HDR 、4K、144 帧画面显示,支持远程开


基于数据挖掘的在线游戏行为分析预测系统
Python极客之家2025/10/8

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :)  1. 项目简介         随着在线游戏市场的快速增长,了解玩家行为对于提高用户留存率、优化游戏设计和提升用户体验变得至关重要。本项目旨在开发一个基于数据挖掘的在线游戏行为分析预测系统,利用先进的算法对玩家的行为数据进行分析,预测玩家的行为模式,并提供相应的优化建议。         该系统将涵盖数据收集、预处理、特征工程、模型训练、预测和结果展示等多个环节,旨在为游戏开发者和运营团队提供一个全面的玩家行为分析平台


前端读取文件夹并通过 SSH 上传:完整实现方案 ✅
excel2025/10/6

在 Web 应用中,除了单文件上传,很多时候我们还需要用户直接选择整个文件夹,并批量上传到远程服务器。典型场景包括:静态资源部署、文档归档、远程备份等。本文整合了 前端文件夹选择方案(webkitdirectory + File System Access API) 与 Node.js + node-ssh 后端上传,实现端到端的完整流程。 前端部分:选择文件夹并上传 前端的目标是让用户选择目录,遍历其中所有文件,并逐一上传到后端。 方案一:webkitdirectory 这是目前兼容度最好的


岚图汽车 x Apache Doris : 海量车联网数据实时分析实践
SelectDB技术团队2025/10/5

岚图汽车作为东风汽车集团旗下高端智慧新能源品牌,自 2019 年创立以来,以用户型科技企业为定位,构建了覆盖 SUV、MPV、轿车三大品类的产品矩阵。依托国务院国资委管理,世界 500 强东风集团五十多年的造车积淀与全产业链资源,岚图汽车坚持自研,打造了 ESSA 原生智能电动架构、中央集中式 SOA 电子电气架构等核心技术,旗下岚图 FREE+、梦想家、追光等车型凭借高品质与技术创新,成为最快实现累计产量突破 20 万辆的央国企新能源高端品牌。2025 年连续月销量破万,产品出口覆盖超 40

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0