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

8.5.数据库基础技术-规范化

函数依赖

  • 函数依赖:给定一个X,能唯一确定一个Y,就称X决定(确定)Y,或者说Y依赖于X。
    例如:Y=X*X函数,此时X能确定Y的值,但是Y无法确定X的值,比如x=2,y=4,但是y=4无法确定x=2。
  • 函数依赖又可扩展以下两种规则:
    • 部分函数依赖:A可决定C,(A,B)也可决定C,既然A都可以决定C了,那么要不要B其实都无所谓了,所有这种就称之为部分函数依赖。
    • 传递函数依赖:当A和B不相同时,A可决定B,B可决定C,则A可决定C,是传递函数依赖;若A和B相同,则不存在传递了,A就可以直接就可决定C。
      在这里插入图片描述

函数依赖的公理系统

函数依赖的公理系统(Armstrong:阿姆斯特朗公理)是指一组用于推导和证明函数依赖的规侧和公理集合。设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则。

  • 自反律:对于任意属性集合X和Y,有Y⊆X⊆U,则X→Y被F逻辑蕴含。
    • 也就是说如果属性集Y属于X,则X可以决定Y,又可以说属性集X可以决定他的属性子集。
  • 增广律:对于任意属性集合X、Y和Z,如果X→Y,那么XZ→YZ。
    • 如果X→Y在F这个函数依赖集合中,另一属性(组)Z是属性集U中的元素,那么从F中可以推导出XZ函数决定YZ。
  • 传递律:对于任意属性集合X、Y和Z,如果X→Y且Y→Z,那么X→Z。

根据上述3条推理规则又可推出下述3条推理规则:

  • 合并律:对于任意属性集合X、Y和Z,如果X→Y和X→Z,那么X→YZ。
  • 分解律:对于任意属性集合X、Y和Z,如果X→YZ,则X→Y和X→Z。
  • 合成律:对于任意属性集合X、Y和Z,如果X→Y且Y→Z,那么XZ→YZ。

键与约束

  • 超键(码):能够唯一标识一条记录的属性或属性集。换句话说,超键中的属性组合可以保证每个元组在关系中都是唯一的。
    举例:假设我们有一个学生表,包含以下属性:学号、姓名、性别、出生日期,那么,以下属性集合都是超键:{学号}、{学号,出生日期}、{姓名,性别,出生日期,因为这些属性组合都可以唯一标识每个学生。
  • 候选键:超键中不包含任何冗余属性的超键。换句话说,候选键中的每个属性都是必需的,用于唯一标识元组。
    举例:在上面的例子中,{学号}是候选键,因为它是唯一标识学生的最小属性集合。如果我们设置姓名不能重复的话,那姓名也是一个候选键,但是{姓名,性别,出生日期这个组合就不是了,因为性别和出生日期冗余了,可以由姓名得到
  • 主属性:包含在任一候选码中的属性称主属性。换句话说,主属性是候选码所有属性的并集
    举例:在上面的例子中,如果姓名不能重复,那么主属性就是学号和姓名
  • 主键:从候选键中选取的一个属性或属性集合,作为表中元组的唯一标识符。
    举例:在上面的例子中,我们可以选择{学号}作为主键。
学号姓名性别年龄系别专业
20020612李辉20计算机软件开发
20060613张明18计算机软件开发
20060614王小玉19物理力学
20060615幸汉华17生物动物学
20060616赵静21化学食品化学

超键:能够唯一标识一条记录的属性或属性集。{学号}、{姓名}、{学号,姓名}、{学号,姓名,性别}…
候选键:能够唯一标识一条记录的最小属性集。{学号}、{姓名}
主属性:候选码所有属性的并集。{学号、姓名}

外键:是指一个表中的属性,它引用另一个表中的主键。外键用于建立表之间的关系。
实体完整性约束:即主键约束,主键值不能为空,也不能重复
参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空
用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到180之间。

案例

在这里插入图片描述
超键:包含雇员编号在内的任意组合,如果名字不允许重复,也可以是包含名字在内的任意组合
候选键:雇员编号,如果名字不允许重复,还有名字
主键:雇员编号从候选键中选择的最简单属性用于唯一标识一行记录)
外键:部门编号(在雇员表中指向部门表的主键用于两张表之间的联系)
主属性:雇员编号,姓名

范式

第一范式1NF

第一范式1NF:要求数据库表中的所有字段都是不可分割的原子值。通俗地说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:薪资被拆成了基本工资和补贴
在这里插入图片描述
例:用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩)
依赖关系(学号->学生姓名,学号->所在系,所在系>系主任姓名,(学号,课程号)->成绩)
在这里插入图片描述

第二范式2NF

第二范式:在1NF的基础上,要求数据库表中的每个非主属性完全依赖于某一个候选键
通俗地说,就是表中不能存在联合主键,按照定义,上面的学生表就不满足2NF,因为学号不能完全确定成绩(每个学生可以选多门课)。

解决方案:将学生表分解为:

  • 学生(学号,学生姓名,系编号,系名,系主任)
  • 选课(选课d,学号,课程号,成绩)。
    每张表均属于2NF。

第三范式3NF

第三范式:在2NF的基础上,要求数据库表中的每个非主属性不依赖于其它非主属性。也就是说,数据表中的每一列都和主键直接相关,而不依赖于其它列,即不能行在传递依赖

继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任和系名,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖,
解决方案:将学生表进一步分解为:

  • 学生(学号,学生姓名,系编号)
  • 系(系编号,系名,系主任)
  • 选课(选课id,学号,课程号,成绩)
    每张表都属于3NF。

BC范式BCNF

BC范式(BCNF):规范化数据库设计的一种方法,它对关系型数据库中的表进行分解,其符合第三范式(3NF),同时尽量避免数据冗余和不一致性,提高数据的可靠性和完整性。

假设仓库管理关系表(仓库ID,存储物品ID,管理员ID,数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。此关系模式已经属于了3F,那么这个关系模式是否存在问题呢?我们来看以下几种操作:

  • 删除异常:当仓库被清空后,所有”存储物品D”和”数量”信息被删除的同时,”仓库ID”和”管理员D”信息也被删除了。
  • 插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。
  • 更新异常:如果仓库换了管理员,则表中所有行的管理员D都要修改。

解决方案:把仓库管理关系表分解为二个关系表;

  • 仓库管理:(仓库ID,管理员ID);
  • 仓库:(仓库ID,存储物品ID,数量)。
    这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

练习题

给定关系模式R(U,F),U={A,B,C,D,F={AB→C,CD一B。关系R(),且分
别有()。
A.只有1个候选关键字ACB
B.只有1个候选关键字BCD
C.有2个候选关键字ACD和ABD
D.有2个候选关键字ACB和BCD

A.0个非主属性和4个主属性
B.1个非主属性和3个主属性
C.2个非主属性和2个主属性
D.3个非主属性和1个主属性

答案C A
候选关键字的求法:根据依赖集,找出从未在右边出现过的属性(有出度没有入度),必然是候选键之一,以该属性为基础,根据依赖集依次扩展,看能香遍历所有属性,将无法遍历的加入候选键中。
在这里插入图片描述

设有关系模式R(E,N,M,L,Q),其函数依赖集为F={E一→N,EM一→Q,M一L)。则
关系模式R达到了(),该关系模式()
A.1NF
B.2NF
C.3NF
D.BCNF

A.无需进行分解,因为已经达到了3NF
B.无需进行分解,因为已经达到了BCNF
C尽管不存在部分函数依赖,但还存在传递依赖,所以需要进行分解
D.需要进行分解,因为存在冗余、修改操作的不一致性、插入和删除异常

答案A D
有联合主键EM,不满足2NF
在这里插入图片描述

相关文章:

8.5.数据库基础技术-规范化

函数依赖 函数依赖:给定一个X,能唯一确定一个Y,就称X决定(确定)Y,或者说Y依赖于X。 例如:YX*X函数,此时X能确定Y的值,但是Y无法确定X的值,比如x2,y4,但是y4无法确定x2。函数依赖又可扩展以下两…...

于博士Cadence视频教程学习笔记备忘

标签:PCB教程 PCB设计步骤 cadence教程 Allegro教程 以下是我学习该视频教程的笔记,记录下备忘,欢迎大家在此基础上完善,能回传我一份是最好了,先谢过。 备注: 1、未掌握即未进行操作 2、操作软件是15.…...

8.3.数据库基础技术-关系代数

并:结果是两张表中所有记录数合并,相同记录只显示一次。交:结果是两张表中相同的记录。差:S1-S2,结果是S1表中有而S2表中没有的那些记录。 笛卡尔积:S1XS2,产生的结果包括S1和S2的所有属性列,并且S1中每条记…...

【Vue3】vue模板中如何使用enum枚举类型

简言 有的时候,我们想在vue模板中直接使用枚举类型的值,来做一些判断。 ts枚举 枚举允许开发人员定义一组命名常量。使用枚举可以更容易地记录意图,或创建一组不同的情况。TypeScript 提供了基于数字和字符串的枚举。 枚举的定义这里不说了…...

组合求和2

题目描述: Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target. Each number in candidates may only be used once in the combinati…...

Apple Maps现在可在Firefox和Mac版Edge浏览器中使用

Apple Maps最初只能在 Windows 版 Safari、Chrome 浏览器和 Edge 浏览器上运行,现在已在其他浏览器上运行,包括 Mac 版 Firefox 和 Edge。经过十多年的等待,Apple Maps于今年 7 月推出了新版地图应用的测试版,但只能在有限的浏览器…...

基于嵌入式Linux的数据库

数据库 数据库是在数据库管理系统和控制之下,存放在存储 介质上的数据集合。 基于嵌入式的数据库 基于嵌入式linux的数据库主要有SQlite, Firebird,Berkeley DB,eXtremeDB Firebird是关系型数据库,功能强大,支持存储过 程&…...

C# 使用LINQ找出一个子字符串在另一个字符串中出现的所有位置

一、实现步骤 遍历主字符串,使用IndexOf方法查找子字符串的位置。如果找到了子字符串,记录其位置,并且从该位置的后面继续查找。重复上述步骤直到遍历完整个字符串。 二、简单代码示例 using System; using System.Collections.Generic; usi…...

YOLOv8添加MobileViTv3模块(代码+free)

目录 一、理由 二、方法 (1)导入MobileViTv3模块 (2)在ultralytics/nn/tasks.py的函数parse_model中修改 (3)在yaml配置文件中写入 (4)开始训练,先把其他梯度关闭&…...

从概念到落地:全面解析DApp项目开发的核心要素与未来趋势

随着区块链技术的迅猛发展,去中心化应用程序(DApp)逐渐成为Web3时代的重要组成部分。DApp通过智能合约和分布式账本技术,提供了无需信任中介的解决方案,这种去中心化的特性使其在金融、游戏、社交等多个领域得到了广泛…...

仓颉编程入门 -- 泛型概述 , 如何定义泛型函数

泛型概述 , 如何定义泛型函数 1 . 泛型的定义 在仓颉编程语言中,泛型机制允许我们定义参数化类型,这些类型在声明时不具体指定其操作的数据类型,而是作为类型形参保留,待使用时通过类型实参来明确。这种灵活性在函数和类型声明中…...

SOC估算方法之(OCV-SOC+安时积分法)

一、引言 此方法主要参考电动汽车用磷酸铁锂电池SOC估算方法这篇论文 总结: 开路电压的测量需要将电池静止相当长的一段时间才能达到平衡状态进行测量。 安时积分法存在初始SOC的估算和累积的误差。 所以上述两种方法都存在一定的缺陷,因此下面主要讲…...

指针(下)

文章目录 指针(下)野指针、空指针野指针空指针 二级指针**main**函数的原型说明 常量指针与指针常量常量指针指针常量常量指针常量 动态内存分配常用函数**malloc****calloc****realloc****free** **void**与**void***的区别扩展:形式参数和实际参数的对应关系 指针…...

C# 浅谈IEnumerable

一、IEnumerable 简介 IEnumerable 是一个接口,它定义了对集合进行迭代所需的方法。IEnumerable 接口主要用于允许开发者使用foreach循环来遍历集合中的元素。这个接口定义了一个名为 GetEnumerator 的方法,该方法返回一个实现了 IEnumerator 接口的对象…...

mmdebstrap:创建 Debian 系统 chroot 环境的利器 ️

文章目录 mmdebstrap 的一般性参数说明 📜mmdebstrap 的常见用法示例 🌈使用 mmdebstrap 的注意事项 ⚠️ 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然&am…...

【Linux SQLite数据库】一、SQLite交叉编译与移植

SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎,它提供了功能齐全的数据库解决方案。SQLite 几乎可以在所有的手机和计算机上运行,它被嵌入到无数人每天都在使用的众多应用程序中。此外,SQLite 还具有稳定…...

每天写两道(数组篇)移除元素、

27.移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&#…...

Unity 使用 NewtonSoft Json插件报错

JsonReaderException: Unexpected character encountered while parsing value: . Path , line 0, position 0. 通过断点发现,头有一串ZWNBSP,这个是BOM格式的JSON。在文件下看不到。 解决方法:改编码格式,Remove BOM....

k8s 部署 Mysqld_exporter 以及添加告警规则

最近监控 mysql 数据库,用了 pmm-server、pmm-client 发现监控是真的不太好用,还是用回 prometheus 吧。 部署mysqld_exporter k8s 部署最新版本的 mysqld_exporter,支持的数据库版本 MySQL >5.6、MariaDB > 10.3。 先在数据库创建用…...

基于STM32开发的智能农业环境监测系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 农田环境监测温室环境控制常见问题及解决方案 常见问题解决方案结论 1. 引言 智能农业环境监测系统通过集成多种环境传感器,实时监测土壤湿度、温度…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...