软件设计师27--规范化理论

软件设计师27--规范化理论

  • 考点1:规范化理论基本概念
    • 函数依赖
    • 规范化理论--Amstrong公理体系
    • 候选键
    • 主属性与非主属性
    • 例题:
  • 考点2:范式判断
    • 规范化理论
    • 规范化理论 - 范式
    • 例题:
  • 考点3:范式分解
    • 保持函数依赖分解
    • 无损分解
    • 模式分解-表格法
    • 无损分解 - 公式法
    • 例题:

考点1:规范化理论基本概念

函数依赖

设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X->Y。
关系模式:R(A,B,C)
依赖集1:{AB->C,A->C}
部分函数依赖:A可以确定C,(A,B)也可以确定C。(A,B)中的一部分(即A)可以确定C,称为部分函数依赖。
在这里插入图片描述
依赖集2:{A->B,B->C}
传递函数依赖:当A和B不等价时,A可确定B,B可确定C,则A可以确定C,是传递函数依赖
在这里插入图片描述
由:A->B,B->C,可得出A->C。此为传递函数依赖

规范化理论–Amstrong公理体系

关系模式R<U,F>来说有以下的推理规则:
A1.自反律(Reflexivity):若Y⊂ X⊂ U,则X→Y成立。
A2.增广律(Augmentation):若Z⊂ U且X→Y,则XZ→YZ成立。
A3.传递律(Transitivity):若X→Y且Y→Z,则X→Z成立。

根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
合并规则:由X→Y,X→Z,有X→YZ。(A2,A3)
伪传递规则:由X→Y,WY→Z,有XW→Z。(A2,A3)
分解规则:由X→Y及Z⊂ Y,有X→Z。(A1,A3)

候选键

候选键:唯一标识元组,且无冗余,任选一个为主键
外键:其他关系的主键
在这里插入图片描述
例1:给定关系R(A1、A2、A3)上的函数依赖集F={A1->A2,A3->A2,A2->A3,A2->A4},R的候选键关键字为(A)。

A、A1
B、A1A3
C、A1A3A4
D、A1A2A3

例2:关系模式P(A、B、C、D、E、F、G、H、I、J)满足下列函数依赖:FD={ABD->E,AB->G,B->F,C->J,CJ->I,G->H},求候选码?。

(ABCD)

例3:关系R(A、B、C)满足下列函数依赖:F={B->C,B->A,A->BC},关系R的候选关键字为(B)。

A、若X→Y,X→Z,则X->YZ为F所蕴涵
B、若X→Y,WY→Z,则XW→Z为F所蕴涵
C、若X->Y,Y->Z为F所蕴涵,则X->Z为F所蕴涵
D、若X->Y为F所蕴涵,且Z∈U,则XZ->YZ为F所蕴涵

主属性与非主属性

定义:组成候选码的属性就是主属性,其他的就是非主属性。

例:关系模式CSZ(CITY,ST,ZIP),其属性组上的函数依赖集为:F={(CITY,ST)->ZIP,ZIP->CITY},其中CITY表示城市,ST表示街道,ZIP表示邮政编码。
候选键为:(ST,CITY),(ST,ZIP)
主属性为:CITY,ST,ZIP

例题:

1、若给定的关系模式为R,U={A,B,C},F={AB->C,C->B},则关系R(B)。

A、有2个候选关键字AC和BC,并且有3个主属性
B、有2个候选关键字AC和AB,并且有3个主属性
C、只有一个候选关键字AC,并且有1个非主属性和2个主属性
D、只有一个候选关键字AB,并且有1个非主属性和2个主属性

2、给定关系模式R(U,F),其中:U为关系模式R中的属性集,F是U上的一组函数依赖。假设U=[A1,A2,A3,A4],F={A1->A2,A1A2->A3,A1->A4,A2->A4},那么关系R的主键应为(A)。函数依赖集F中的(C)是冗余的。

A、A1
B、A1A2
C、A1A3
D、A1A2A3

A、A1->A2
B、A1A2->A3
C、A1->A4
D、A2->A4

3、给定关系模式R<U,F>,其中U为属性集,F是U上的一组函数依赖,那么Armstrong公理系统的伪传递律是指(B)。

A、A1
B、A1A2
C、A1A3
D、A1A2A3

考点2:范式判断

规范化理论

关系模式R(学生姓名,选修课程名,任课教师名,任课教师地址)

学生姓名选修课程名任课教师名任课教师地址
张三数学王一新五一路107号
李四数学王一新五一路107号
王五数学王一新五一路107号
赵六数学王一新五一路107号
……………………

关系模式R存在问题:

  1. 数据冗余
  2. 修改异常
  3. 插入异常
  4. 删除异常

规范化理论 - 范式

第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。
思考题:关系模式R(系名称,高级职称人数)是否满足1NF,如果不满足,应如何调整?

系名称高级职称人数
教授副教授
计算机系610
电子系35

调整为:系名称,教授人数,副教授人数,高级职称总人数

第二范式(2NF):当且仅当关系模式R是第一范式(1NF),且每一个非主属性完全依赖候选键(没有不完全依赖)时,则称关系模式R是第二范式。
思考题:关系模式SC(学号,课程号,成绩,学分),其中:(学号,课程号)->成绩,课程号->学分,会存在那些问题(从数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?
在这里插入图片描述
解析:

  1. 找候选键(学号,课程号)
  2. 找非主属性(成绩,学分)

调整为:(课程,学分)、(学号,课程号,成绩)

第三范式(3NF):当且仅当关系模式R是第二范式(2NF),且R中没有非主属性传递依赖于候选键时,则称关系模式R是第三范式。
思考题:学生关系(学号,姓名,系号,系名,系位置)各属性分别代表学号,姓名,所在系号,系名称,系地址。思考该关系模式会存在哪些问题(从数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?
在这里插入图片描述
解析:

  1. 找候选键(学号)
  2. 找非主属性
  3. 2NF
  4. 3NF

调整为:(系号,系名,系位置)、(学号,姓名,学号)

BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。
例:关系模式STJ(S,T,J)中,S表示学生,T表示老师,J表示课程。每一老师只教一门课程。每门课程有若干老师,某一学生选定某门课程,就对应一个固定老师。

T->J
SJ->T

  1. 候选键 SJ,ST
  2. 非主属性 没有
  3. 2NF 满足
  4. 3NF 满足

在这里插入图片描述
1NF ⊇ 2NF ⊇ 3NF ⊇ BCNF

范式属性不可再分非主属性部分函数依赖于候选键非主属性传递函数依赖于候选键函数依赖左侧决定因素包含候选键
1NF存在
2NF不存在存在
3NF不存在不存在不满足
BCNF不存在不存在满足

例题:

1、某公司数据库中的元件关系模式为P(元件号,元件名称,供应商,供应商所在地,库存量),函数依赖集F如下所示:F={元件号→元件名称,(元件号,供应商)→库存量,供应商→供应商所在地}
元件关系的主键为(B),该关系存在冗余以及插入异常和删除异常等问题。为了解决这一问题需要将元件关系分解(C),分解后的关系模式可以达到(C)。
A、元件号,元件名称
B、元件号,供应商
C、元件号,供应商所在地
D、供应商,供应商所在地

A、元件1(元件号,元件名称,库存量)、元件2(供应商,供应商所在地)
B、元件1(元件号,元件名称)、元件2(供应商,供应商所在地,库存量)
C、元件1(元件号,元件名称)、元件2(元件号,供应商,库存量)、元件3(供
应商,供应商所在地)
D、 元件1(元件号,元件名称)、元件2(元件号,库存量)、元件3(供应商,供应商所在地)、元件4(供应商所在地,库存量)

A、1NF
B、2NF
C、3NF
D、4NF

考点3:范式分解

保持函数依赖分解

设数据库模式ρ={R1,R2,…,Rk}是关系模式R的一个分解,F是R上的函数依赖集,ρ中每个模式Ri上的FD集是Fi。如果{F1,F2,…,Fk}与F是等价的(即相互逻辑蕴涵),那么称分解ρ保持FD。

例:设关系模式R(U,F),其中U={A,B,C,D,E},F={A->BC,C->D,BC->E,E->A},则分解ρ={R1(ABCE),R2(CD)}是否保持函数依赖?而分解ρ={R1(ABE),R2(CD)}是否保持函数依赖?

R1(ABCE) F1={A->BC,BC->E,E->A}
R2(CD) F2={C->D}
分解ρ={R1(ABCE),R2(CD)}保持函数依赖
分解ρ={R1(ABE),R2(CD)}不保持函数依赖

例:设关系模式R(U,F),其中U={A,B,C},F={A->B,B->C,A->C},则分解ρ={R1(AB),R2(BC)},是否保持函数依赖?

R1(AB)F1={A->B}
R2(BC)F2={B->C}

F={A->B,B->C => A->C}
解ρ={R1(AB),R2(BC)},保持函数依赖

无损分解

什么是有损,什么又是无损?
有损:不能还原
无损:可以还原

无损连接分解:指将一个关系模式分解成若干各关系模式后,通过自然连接等运算仍能还原到原来的关系模式

思考题:
有关系模式:成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号->姓名,课程号->课程名,(学号,课程号)->分数
若将其分解为:
成绩(学号,课程号,分数)
学生(学号,姓名)
课程(课程号,课程名)
请思考该分解是否为无损分解?

由于有:学号->姓名,所以:
成绩(学号,课程号,分数,姓名)
由于有:课程号->课程名,所以:
成绩(学号,课程号,分数,姓名,课程名)

模式分解-表格法

将一个具有函数依赖:学号->姓名,课程号->课程名,(学号,课程号)->分数的关系模式:成绩(学号,姓名,课程号,课程名,分数),分解为:成绩(学号,课程号,分数);学生(学号,姓名);课程(课程号,课程名)。
初始表如下:
在这里插入图片描述
根据学号->姓名,对上表进行处理,将第一行第二行属性改成符号√ ̄;然后考虑课程号->课程名,将第一行第四行属性改成符号√ ̄,得下表:
在这里插入图片描述
从上图中可以看出,第一行已全部为√ ̄,因此本次R分解是无损连接分解。

例:设R=ABC,F={A->B},则分解ρ1={R1(AB),R2(AC)}与分解ρ2={R1(AB),R3(BC)}是否都为无损分解?

ABC
R1(AB)×
R2(AC)×

分解ρ1={R1(AB),R2(AC)}保持函数依赖,并且无损分解

ABC
R1(AB)×
R3(BC)×

分解ρ2={R1(AB),R3(BC)}保持函数依赖,有损分解

无损分解 - 公式法

定理:如果R的分解为ρ={R1,R2},F为R所满足的函数依赖集合,分解ρ具有无损连接性的充分必要条件是:
R1∩R2->(R1-R2)或 R1∩R2->(R2-R1
其中,R1∩R2表示模式的交,为R1与R2中公共属性组成,R1-R2或R2-R1表示模式的差集,R1-R2表示R1中去除R1和R2的公共属性所组成。当模式R分解成两个关系模式R1和R2时,如果R1与R2的公共属性能函数决定R1中或R2中的其他属性,这样的分解就具有无损连接性。

例:设R=ABC,F={A->B},则分解ρ1={R1(AB),R2(AC)}与分解ρ2={R1(AB),R3(BC)}是否都为无损分解?

R1∩R2=A
R1-R2=B
R2-R1=C
ρ1={R1(AB),R2(AC)}为无损分解

R1∩R3=B
R1-R3=A
R3-R1=C
ρ2={R1(AB),R3(BC)}为有损分解

例题:

1、设关系模式R(U,F),其中:U={A,B,C,D,E},F={A->B,DE->B,CB->E,E->A,B->D}。(D)为关系模式R的候选关键字。分解(D)是无损连接,并保持函数依赖的。

A、AB
B、DE
C、DB
D、CE

A、ρ={R1(AC),R2(ED),R3(B)}
B、ρ={R1(AC),R2(E),R3(DB)}
C、ρ={R1(AC),R2(ED),R3(AB)}
D、ρ={R1(ABC),R2(ED),R3(ACE)}

A选项表格法为:

ABCDE
R1(AC)×××
R2(ED)×××
R3(B)××××

C选项表格法为:

ABCDE
R1(AC)×××
R2(ED)×××
R3(AB)×××

D选项表格法为:

ABCDE
R1(ABC)××
R2(ED)×××
R3(ACE)××

选项A不保持函数依赖,有损
选项B不保持函数依赖,有损
选项C不保持函数依赖,有损
选项D不保持函数依赖,无损

注:选项D并不完全正确,如果选项中没有正确答案的话,要选择最接近的答案

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的shell脚本之流程控制循环遍历

3 条件判断 4 流程控制语句 1&#xff09;if 语句 案例&#xff0c;用户输入用户名和密码&#xff0c;判断用户名是否是admin,密码是否是123,如果正确&#xff0c;则显示登录成功 首先我创建了shell文件&#xff0c;touch getpawer 其中getpawer 是我自己命的名 #!/bin/bas…

阿里云数据库服务器价格表查询,一键查询报价

阿里云数据库服务器价格表&#xff0c;优惠99元一年起&#xff0c;ECS云服务器2核2G、3M固定带宽、40G ESSD Entry云盘&#xff0c;优惠价格99元一年&#xff1b;阿里云数据库MySQL版2核2G基础系列经济版99元1年、2核4GB 227.99元1年&#xff0c;云数据库PostgreSQL、SQL Serve…

C语言 | Leetcode C语言题解之第5题最长回文子串

题目&#xff1a; 题解&#xff1a; char* longestPalindrome(char* s) {int lenstrlen(s),max0;int p0;for(int i0;i<len;i)//这种是判断奇数回文{int lefti-1,righti1;//left左边&#xff0c;right右边while(left>0&&right<len&&s[left]s[right]){/…

P1102 A-B 数对 (非二分,不开龙永远的痛,用map解决)

可是我真的会伤心 题目链接 思路&#xff1a;1.本来想的是暴力&#xff0c;两层循环模拟每个数。 2.后来想先把每个数字的个数求出来放在数组nums【】中&#xff0c;并把不重复的数字存到数组b&#xff0c;再两层循环b数组应该时间复杂度会好些&#xff0c;如果b数组中的两个数…

【VUE】ruoyi框架自带页面可正常缓存,新页面缓存无效

ruoyi框架自带页面可正常缓存&#xff0c;新页面缓存无效 背景&#xff1a; 用若依框架进行开发时&#xff0c;发现ruoyi自带的页面缓存正常&#xff0c;而新开发的页面即使设置了缓存&#xff0c;当重新进入页面时依旧刷新了接口。 原因&#xff1a;页面name与 getRouters …

配置启动nacos,保姆级教程

下载nacos 下载链接 https://github.com/alibaba/nacos/releases进去下拉&#xff0c;找到下载版本信息。 下载后如图所示。 配置数据库 在我们的conf文件夹中有一个nacos-mysql的数据库文件 我们需要导入数据库&#xff0c;可通过工具Navicat等进行导入。 会有一下几张表…

【基础篇】1.6 开发环境搭建

写在前面 学习STM32的开发&#xff0c;我们需要选选择合适型号&#xff0c;STM32开发板。通过前面的博客&#xff0c;我们知道它通常包含了微控制器、外设接口和必要的电路组件。 在搭建STM32开发环境时&#xff0c;开发者需要首先安装选定的IDE&#xff08;如Keil MDK&#…

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…

无极低码:免费版部署操作指南

无极低码 :https://wheart.cn 无极低码:免费试用版部署过程参照: 无极低码部署版操作指南 https://wheart.cn/so/home?m=index&id=ad614930-d936-11ee-8489-525400be6368 ” 。 下载完解压成后进行部署

C语言 分支控制——条件语句

目录 选择结构 单分支选择结构&#xff08;Single Selsction&#xff09; 双分支选择结构&#xff08;Double Selection&#xff09; 多分支选择结构&#xff08;Multiple Selsction&#xff09; 条件运算符和条件表达式 复合语句&#xff08;Compound Statement&#xff…

C++重载和模板

重载与模板 函数模板可以被另一个模板或一个普通非模板函数重载。 与往常一样&#xff0c;名字相同的函数必须具有不同数量或类型的参数。 如果涉及函数模板&#xff0c;则函数匹配规则会在以下几方面受到影响&#xff1a; 对于一个调用&#xff0c;其候选函数包括所有模板…

双机 Cartogtapher 建图文件配置

双机cartogtapher建图 最近在做硕士毕设的最后一个实验&#xff0c;其中涉及到多机建图&#xff0c;经过调研最终采用cartographer建图算法&#xff0c;其中配置多机建图的文件有些麻烦&#xff0c;特此博客以记录 非常感谢我的同门 ”叶少“ 山上的稻草人-CSDN博客的帮助&am…

计算机网络:数据链路层 - 点对点协议PPP

计算机网络&#xff1a;数据链路层 - 点对点协议PPP PPP协议的帧格式透明传输字节填充法零比特填充法 差错检测循环冗余校验 对于点对点链路&#xff0c;PPP协议是目前使用最广泛的数据链路层协议。比如说&#xff0c;当用户想要接入互联网&#xff0c;就需要通过因特网服务提供…

高分卫星助力台湾省花莲县地震应急救援

4月3日7时58分&#xff0c;在台湾省花莲县海域&#xff08;北纬23.81度&#xff0c;东经121.74度&#xff09;发生7.3级地震&#xff0c;震源深度12公里。接中国地震局地震预测研究所应急需求&#xff0c;国家航天局对地观测与数据中心&#xff08;以下简称“中心”&#xff09…

Kubernetes探索-Pod面试

本篇及此系列文章只针对面试相关问题做了简单总结&#xff0c;后续会出比较详细的系列文章.... 1. 创建Pod的底层逻辑 1&#xff09;创建单个Pod时&#xff1a;组件间的交互流程和描述如下图&#xff0c;该过程中controller-manager组件不工作。 流程描述 ① 客户端提交创建请…

揭开AI编程语言Mojo比Pyhon快6.8万倍的5个秘密!

最近&#xff08;2024年3月29日&#xff09;&#xff0c;号称比Python快6.8万倍的Mojo编程语言开源啦&#xff01;6.8万倍&#xff1f;你敢相信这个数字是真的吗&#xff1f;不过&#xff0c;就连Mojo官网都把这个结果贴了出来&#xff08;见下图&#xff09;&#xff0c;这就很…

怎样在Linux搭建NTP服务器

搭建 NTP&#xff08;Network Time Protocol&#xff09;服务器可以帮助你在局域网内提供时间同步服务&#xff0c;让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤&#xff1a; 安装 NTP 服务器软件&#xff1a; 在终端中执行以下命令安装 N…

Webpack部署本地服务器

Webpack部署本地服务器 目录 Webpack部署本地服务器目的认识模块热替换&#xff08;HMR&#xff09;什么是 HMRHMR 通过如下几种方式, 来提高开发的速度如何使用 HMRhost 配置 目的 完成自动编译 常用方式: webpack-dev-server webpack-dev-server 是一个用于开发环境的 Web 服…

Class类

1. Class类的理解 针对于编写好的 .java 源文件进行编译(使用 javac.exe)&#xff0c;会生成一个或多个 .class 字节码文件。接着&#xff0c;我们使用 java.exe 命令对指定的 .class 文件进行解释运行。这个解释运行的过程中&#xff0c;我们需要将 .class 字节码文件加载到内…

本地储存、jQuery

文章目录 1. 本地储存1. window.sessionStorage2. window.localStorage案例&#xff1a;记住用户名 2. jQuery入门jQuery 的概念jQuery 的入口函数jQuery 的顶级对象 $jQuery 对象和 DOM 对象 3. jQuery 常用API1. jQuery 选择器1.基础选择器2.层级选择器隐式迭代&#xff08;重…