数据库系统概论(超详解!!!)第七节 关系数据库理论

news2024/11/24 19:49:22

1.问题的提出

关系数据库逻辑设计:

针对具体问题,如何构造一个适合于它的数据模式

针对一个具体问题,构造出一个适合于它的数据模式,即应该构造几个关系,每个关系由哪些属性组成等。

数据库逻辑设计的工具──关系数据库的规范化理论

关系模式由五部分组成,是一个五元组:R(U, D, DOM, F)

关系名R是符号化的元组语义

U为一组属性

D为属性组U中的属性所来自的域

DOM为属性到域的映射

F为属性组U上的一组数据依赖

由于D、DOM与模式设计关系不大,因此把关系模式看作一个三元组:R<U,F>

当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系

作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)

例:将下表改为第一范式

因为关系模式至少是1NF关系,即不包含重复组并且不存在嵌套结构,给出的数据集显然不可直接作为关系数据库中的关系

数据依赖: 是一个关系内部属性与属性之间的一种约束关系 。是现实世界属性间相互联系的抽象。 是数据内在的性质 ,是语义的体现。

数据依赖的主要类型:

函数依赖(Functional Dependency,简记为FD)

多值依赖(Multi-Valued Dependency,简记为MVD)

函数依赖普遍存在于现实生活中:

描述一个学生关系,可以有学号、姓名、系名等属性。 一个学号只对应一个学生,一个学生只在一个系中学习 “学号”值确定后,学生的姓名及所在系的值就被唯一确定。

Sname=f(Sno),Sdept=f(Sno)

即Sno函数决定Sname ,Sno函数决定Sdept 

记作Sno→Sname,Sno→Sdept

问题一:数据冗余

浪费大量的存储空间。 每一个系主任的姓名重复出现,重复次数与该系所有学生的所有选修课程成绩出现的次数相同。

问题二:更新异常

数据冗余 。更新数据时,维护数据完整性代价大。 某系更换系主任后,必须修改与该系学生有关的每一个元组。

问题三:插入异常

如果新成立了人工智能系,但该系尚无学生,则无法把这个系及其系主任的信息存入数据库。

问题四:删除异常

如果某个系的学生全部毕业了, 则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。

结论 :Student关系模式不是一个好的模式。 一个“好”的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。

原因 :由存在于模式中的某些数据依赖引起的。

解决方法: 用规范化理论改造关系模式来消除其中不合适的数据依赖

把这个单一的模式分成三个关系模式:

S(Sno,Sdept,   Sno→ Sdept);

SC(Sno,Cno,Grade, (Sno,Cno) → Grade);

DEPT(Sdept,Mname, Sdept → Mname);

这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。

2.规范化

1.函数依赖

1.函数依赖

设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。

函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。

函数依赖是语义范畴的概念,只能根据数据的语义来确定一个函数依赖。 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立。

2.平凡函数依赖与非平凡函数依赖

X→Y,但Y⊈X则称X→Y是非平凡的函数依赖

X→Y,但Y⊆X 则称X→Y是平凡的函数依赖

对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。 若不特别声明, 我们总是讨论非平凡函数依赖。

若X→Y,则X称为这个函数依赖的决定因素(Determinant)。

若X→Y,Y→X,则记作X←→Y。 若Y不函数依赖于X,则记作X↛ Y。

3.完全函数依赖与部分函数依赖

在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖。

若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖

4.传递函数依赖

在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。

注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。

例: 在关系Std(Sno, Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname

Mname传递函数依赖于Sno

2.码

设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。

如果U部分函数依赖于K,即K → U,则K称为超码(Surpkey)。候选码是最小的超码,即K的任意一个真子集都不是候选码。

若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。

主属性与非主属性 :包含在任何一个候选码中的属性 ,称为主属性(Prime attribute) 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)

全码:整个属性组是码,称为全码(All-key)

关系模式 :R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。

SC(Sno,Cno,Grade)中,Sno不是码 Sno是 S(Sno,Sdept,Sage)的码,则Sno是SC的外码

主码与外部码一起提供了表示关系间联系的手段

3.范式

范式是符合某一种级别的关系模式的集合。

关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。

范式的种类:    

各种范式之间存在联系:

某一关系模式R为第n范式,可简记为R∈nNF。

一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。

4.2NF

若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。

一个关系模式不属于2NF,会产生以下问题:

插入异常 :

如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。

删除异常:

如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。

修改复杂:

如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。

出现这种问题的原因 :

例子中有两类非主属性: 一类如Grade,它对码完全函数依赖。 另一类如Sdept、Sloc,它们对码不是完全函数依赖 。

解决方法: 用投影分解把关系模式S-L-C分解成两个关系模式

SC(Sno,Cno,Grade)

S-L(Sno,Sdept,Sloc)

SC的码为(Sno,Cno),SL的码为Sno,这样使得非主属性对码都是完全函数依赖了

5.3NF

设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z( Z⊈Y ), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。(非主属性不能传递依赖于码)

SC(Sno,Cno,Grade) S-L(Sno,Sdept,Sloc)

SC没有传递依赖,因此SC ∈ 3NF 。

S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno  →  Sloc。

因此, S-L ∈ 3NF 解决的办法是将S-L分解成 S-D(Sno,Sdept)∈ 3NF ,D-L(Sdept,Sloc)∈ 3NF

6. BCNF

BCNF(Boyce Codd Normal Form)由Boyce和Codd提出,比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

定义:设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。 换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。

BCNF的关系模式所具有的性质 :

所有非主属性都完全函数依赖于每个候选码

所有主属性都完全函数依赖于每个不包含它的候选码

没有任何属性完全函数依赖于非码的任何一组属性

如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。

对于不是BCNF的关系模式,仍然存在不合适的地方。 非BCNF的关系模式也可以通过分解成为BCNF。

3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。

一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。 3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。

7.多值依赖

设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。

平凡多值依赖和非平凡的多值依赖:     

若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。     

否则称X→→Y为非平凡的多值依赖。

多值依赖的性质

(1)多值依赖具有对称性。 即若X→→Y,则X→→Z,其中Z=U-X-Y

多值依赖的对称性可以用完全二分图直观地表示出来。

(2)多值依赖具有传递性。即若X→→Y,Y→→Z, 则       X→→Z -Y。

(3)函数依赖是多值依赖的特殊情况。即若X→Y,则           X→→Y。

(4)若X→→Y,X→→Z,则X→→YZ。

(5)若X→→Y,X→→Z,则X→→Y∩Z。

(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。

8.4NF

关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。

4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。

第四范式首先要求是第三范式,且在关系模式中,至多只有一个多值事实。

如果一个关系模式是4NF, 则必为BCNF。

9.5NF

第五范式,如果在保证信息正确的前提下,每个表都不能拆分成两个或多个表(每个表都有一个主键,且是原表主键的真子集),则称此表属于第五范式。

例如,销售关系表(销售代理、制造公司、产品名称)就不符合第五范式,因为这此表可以分解成以下三个表:关系表1(销售代理、制造公司),关系表2(销售代理、产品名称),关系表3(制造公司,产品名称)。

第五范式的好处是可以减少数据重复,而且数据库中的数据量越大,其作用就越显著。

10.规范化小结

在关系数据库中,对关系模式的基本要求是满足第一范式。

规范化程度过低的关系不一定能够很好地描述现实世界 .可能存在插入异常、删除异常、修改复杂、数据冗余等问题。 解决方法就是对其进行规范化,转换成高级范式。

一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。

关系数据库的规范化理论是数据库逻辑设计的工具。

规范化的基本思想 :是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”。 即采用“一事一地”的模式设计原则 ,让一个关系描述一个概念、一个实体或者实体间的一种联系。 若多于一个概念就把它“分离”出去。 因此 规范化实质上是概念的单一化。

不能说规范化程度越高的关系模式就越好。 必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。 上面的规范化步骤可以在其中任何一步终止。

3.数据依赖的公理系统

对于满足一组函数依赖F的关系模式   R <U,F>,其任何一个关系r,若函数依赖X→Y都成立(即r中任意两元组t、s,若t[X]=s[X],则 t[Y]=s[Y]),则称F逻辑蕴涵X →Y。

Armstrong公理系统

一套推理规则,是模式分解算法的理论基础

用途: 求给定关系模式的码 ,从一组函数依赖求得蕴涵的函数依赖。

推理:

设U为属性集总体,F是U上的一组函数依赖, 于是有关系模式R <U,F >。对R <U,F> 来说有以下的推理规则:

A1 自反律(reflexivity rule):若Y  X  U,则X →Y 为F所蕴涵。

A2 增广律(augmentation rule):若X→Y为F所蕴涵,且Z  U,则XZ→YZ 为F所蕴涵。

A3 传递律(transitivity rule):若X→Y及Y→Z为F所蕴涵,则X→Z 为F所蕴涵。

根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:  

合并规则(union rule): 由X→Y,X→Z,有X→YZ。  

伪传递规则(pseudo transitivity rule): 由X→Y,WY→Z,有XW→Z。  

分解规则(decomposition rule):由X→Y及Z属于Y,有X→Z。

小结

规范化理论为数据库设计提供理论的指南和工具

仅仅是指南和工具

并不是规范化程度越高,模式就越好

必须结合应用环境和现实世界的具体情况合理地选择数据库模式

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

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

相关文章

Omnity 进展月报 | 2024.4.1-4.30

Omnity 大事摘要 1、Octopus 官宣升级为 Omnity。 2、Omnity 4月28号正式上线&#xff0c;实现BTC 和 ICP 之间跨链转账 Runes 资产。 3、为庆祝上线&#xff0c;以符文 HOPE•YOU•GET•RICH 为资产&#xff0c;发红包快速触达大量用户&#xff0c;体验跨链服务。 4、Omni…

kubebuilder(6)webhook

operator中的webhook也是很重要的一块功能。也是相对比较独立的模块&#xff0c;所以放在后面讲。 webhook是一个callback&#xff0c;注册到k8s的api-server上。当某个特定的时间发生时&#xff0c;api server就会查询注册的webhook&#xff0c;并根据一些逻辑确认转发消息给…

抖音小店是什么?它和直播带货有什么区别和联系?一篇详解!

大家好&#xff0c;我是电商糖果 在网上大家都说抖音的流量大&#xff0c;在抖音做电商比较赚钱。 可是有很多人对抖音电商并不了解。 甚至搞不懂抖音小店是什么&#xff1f;它和直播带货的区别和联系也不清楚。 下面&#xff0c;糖果就来给大家好好解答一下这个问题。 抖音…

Educational Codeforces Round 165 (Div. 2) A~E

A.Two Friends (思维) 题意&#xff1a; 小 A A A想开一个派对。他有 n n n个朋友&#xff0c;他希望至少有 2 2 2个朋友参加他的派对。 i i i 这个朋友最好的朋友是 p i p_i pi​ 。所有的 p i p_i pi​ 都是不同的&#xff0c;对于每一个 i ∈ [ 1 , n ] i \in [1, n] …

HTTP深度指南:协议结构、请求方法与状态码

详解HTTP HTTP教程HTTP消息结构HTTP状态码HTTP和HTTPS HTTP教程 HTTP&#xff08;超文本传输协议&#xff0c;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议。* HTTP是一个基于TCP/IP通信协议来传递数据的&#xff08;HTML文…

【源码】[完美接单]亲测双端获取通讯录、相册、短信定位源码

源码介绍 无hb源码&#xff0c;需要反编译。 此款修复了逻辑&#xff0c;现在全部能获取。包括华为鸿蒙。 安卓可获取&#xff1a;短信定位相册通讯录 IOS可获取&#xff1a;定位相册通讯录 源码截图 CD&#xff1a;获取方式联系小编 微信&#xff1a;uucodes 公众号&…

7天精通Web APIs——-Bom操作(理论+实战)(第五天)

一、window对象 1.1 window对象和bom的关系 首先理解dom和bom之间的关系 显然bom的范围比较大 bom的全称为浏览器对象模型 window是bom的核心对象&#xff0c;window里面有很多属性和方法&#xff0c;用于实现浏览器与 JavaScript 代码之间的交互。作为 JavaScript 的全局对…

Vue中使用$t(‘xxx‘)实现中英文切换;

&#xff08;原文链接&#xff09; 介绍 {{$t(key)}} &#xff1a;是VueI18n插件提供的函数&#xff0c;主要用于根据当前语言环境返回对应的翻译文本&#xff0c;以便在页面上显示多语言内容。 key&#xff1a;作为参数传递给函数$t()的字符串&#xff0c;用于指定需要翻译的…

快速入门 Postman Mock Server 的使用

Postman 作为一个功能强大的 API 开发工具&#xff0c;凭借 Mock Servers 功能&#xff0c;使得开发者能够轻松而高效地模拟服务器环境&#xff0c;加快开发与测试进程。 启动 Mock Servers 服务 当你在 Postman 中创建一个新的项目时&#xff0c;系统默认并不会显示 Mock Se…

Python爬虫之selenium,有验证码模拟登录

一. 前言 在学习Selenium之前&#xff0c;通过request.get()或者.post(),很难获取网站所加载的动态数据&#xff0c;通过Selenium强大的自动化功能、多浏览器支持、跨平台支持等优点&#xff0c;让我轻松获取一些之前很难获取的数据&#xff0c;这次的案例也是结合之前的所学知…

Window server 2012搭建FTP

禁止废话&#xff0c;直接上图 &#xff01;&#xff01;&#xff01; 注意&#xff1a;如果点击角色添加保存&#xff1a; Server Manager Error - Server Manager is collecting inventory data. Wizard will be available after data collection finishes 解决方案&#x…

Baidu Comate——让软件研发更高效、更智能

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 一、Baidu Co…

JAVA链表相关习题2

1.反转一个单链表。 . - 力扣&#xff08;LeetCode&#xff09; //2在1前面 //1在3前面 //ListNode curhead.next //head.nextnull(翻转后头节点变为最后一个节点) // while(cur ! null) { //记录 当前需要翻转节点的下一个节点 ListNode curNext cu…

9、String类型和基本数据类型转换(Java)

String类型和基本数据类型转换 1、基本数据类型转String类型2、String类型转基本数据类型⭐ 1、基本数据类型转String类型 Java中String类型是字符串类型&#xff0c;是用 “ ” 双引号括起来的内容&#xff0c;所以基本数据类型转String类型直接&#xff0b;“ ”即可。&…

损失一件外套?

2024/05/07&#xff0c;晴 碎碎念一波&#xff01; 早上洗漱完要出门时&#xff0c;发现自己昨天穿的外套不见了&#xff01;&#xff01;&#xff01;外套上身效果很不错&#xff0c;买了1年多穿的频率非常高&#xff0c;现在丢了还真挺可惜。 衣服口袋有一个耳机&#xff0…

stm32单片机遇到的问题(持续更新)

flymcu下载问题一直显示连接&#xff0c;实际是连接不上 参考&#xff0c;软件一键下载电路等 使用flymcu下载程序过程中&#xff0c;检测两个地方**&#xff0c;第一&#xff0c;两个boot引脚在下载和硬件运行不同的连接方式** BOOT1x&#xff0c;BOOT00&#xff1a;最常用的模…

六西格玛备考攻略:无从下手?一文让你豁然开朗

当你决定备考六西格玛时&#xff0c;可能会感到有些无从下手。毕竟&#xff0c;这是一个涉及多个领域和方面的综合性考试&#xff0c;需要掌握的知识点和技能也非常广泛。但是&#xff0c;只要你有一个清晰的学习计划和一些有效的备考方法&#xff0c;就能够顺利地通过考试。以…

hadoop学习---基于Hive的教育平台数据仓库分析案例(三)

衔接第一部分&#xff0c;第一部分请点击&#xff1a;基于Hive的教育平台数据仓库分析案例&#xff08;一) 衔接第二部分&#xff0c;第二部分请点击&#xff1a;基于Hive的教育平台数据仓库分析案例&#xff08;二) 学生出勤模块&#xff08;全量分析&#xff09;&#xff1a…

Offer必备算法36_贪心算法三_七道力扣题详解(由易到难)

目录 ①力扣455. 分发饼干 解析代码 ②力扣553. 最优除法 解析代码 ③力扣45. 跳跃游戏 II 解析代码1_动态规划 解析代码2_贪心 ④力扣55. 跳跃游戏 解析代码 ⑤力扣134. 加油站 解析代码 ⑥力扣738. 单调递增的数字 解析代码 ⑦力扣991. 坏了的计算器 解析代码…

Adnroid 异常开机半屏重启代码分析

K1/K2包括家教机H9/H10&#xff0c;异常重启的时候都会开机动画都会出现半屏现象&#xff1a; 为了造这个现象&#xff0c;用eclipse把system_process stop掉就可以看到现象了&#xff1a; 由于开机动画是由SurfaceFlinger服务启动&#xff0c;出现异常会调用SurfaceFling…