软件设计师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并不完全正确,如果选项中没有正确答案的话,要选择最接近的答案

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

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

相关文章

第14章 数据结构与集合源码

一 数据结构剖析 我们举一个形象的例子来理解数据结构的作用&#xff1a; 战场&#xff1a;程序运行所需的软件、硬件环境 战术和策略&#xff1a;数据结构 敌人&#xff1a;项目或模块的功能需求 指挥官&#xff1a;编写程序的程序员 士兵和装备&#xff1a;一行一行的代码 …

基于opencv的猫脸识别模型

opencv介绍 OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发&#xff0c;以BSD许可证授权发行&#xff0c;可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及…

【前端面试3+1】11 http和https有何不同及https的加密过程、数组有哪些方法及作用、tcp三次握手四次挥手、【分发饼干】

一、http和https有何不同&#xff1f;https的加密过程 1、不同&#xff1a; HTTP和HTTPS的主要区别在于安全性。HTTP是超文本传输协议&#xff0c;是一种用于传输数据的协议&#xff0c;但是传输的数据是明文的&#xff0c;容易被窃听和篡改。而HTTPS是在HTTP基础上加入了SSL/T…

【ORB-SLAM3】Ubuntu20.04 使用 RealSense D435i 运行 ORB-SLAM3 时遇到的一些 Bug

【ORB-SLAM3】使用 RealSense D435i 跑 ORB-SLAM3 时遇到的一些 Bug 1 hwmon command 0x80( 5 0 0 0 ) failed (response -7 HW not ready)2 No rule to make target /opt/ros/noetic/lib/x86_64-linux-gnu/librealsense2.so, needed by ../lib/libORB_SLAM3.so 1 hwmon comman…

力扣108. 将有序数组转换为二叉搜索树

Problem: 108. 将有序数组转换为二叉搜索树 文章目录 题目描述思路复杂度Code 题目描述 思路 根据二叉搜索树中序遍历为一个有序序列的特点得到&#xff1a; 1.定义左右下标left&#xff0c;right分别指向有序序列的头尾&#xff1b; 2.每次取出left和right的中间节点mid&…

电脑上怎么压缩图片?三个处理方法介绍

随着我们现在使用图片的地方越来越多&#xff0c;我们处理图片的情况也比较多了&#xff0c;通过压缩图片大小可以使图片文件更小&#xff0c;从而减少存储空间和带宽的使用&#xff0c;同时也可以提高加载速度和性能。良好的图片压缩可以有效地减少文件大小&#xff0c;同时保…

深入浅出 -- 系统架构之单体架构

单体架构&#xff08;Monolithic Architecture&#xff09; 单体架构的定义 单体架构&#xff08;Monolithic Architecture&#xff09;是一种传统的软件架构模式&#xff0c;将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。在单体架构中&#xff0c;所有的功…

JSP

概念&#xff1a;Java Server Pages&#xff0c;Java服务端页面 一种动态的网页技术&#xff0c;其中既可以定义HTML、JS、CSS等静态内容&#xff0c;还可以定义Java代码的动态内容 JSP HTML Java 快速入门 注&#xff1a;Tomcat中已经有了JSP的jar包&#xff0c;因此我们…

【yy讲解PostCSS是如何安装和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Coursera上托福专项课程01:TOEFL Reading and Listening Sections Skills Mastery 学习笔记

TOEFL Reading and Listening Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-reading-listening-sections-skills-mastery 这门课的笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 TOEFL Reading and Listening …

AI绘图:Stable Diffusion ComfyUI局部重绘与智能扩图全面教程

前言 在数字艺术创作中&#xff0c;局部重绘和智能扩图是两个非常重要的功能。局部重绘允许我们在保留原有图像的基础上&#xff0c;对特定区域进行修改或创新。而智能扩图则能够帮助我们在图像的边缘添加新的元素&#xff0c;从而扩展图像的内容。本文将详细介绍如何在Stable…

卷积篇 | YOLOv8改进之引入全维度动态卷积ODConv | 即插即用

前言:Hello大家好,我是小哥谈。ODConv是一种关注了空域、输入通道、输出通道等维度上的动态性的卷积方法,一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度…

深入理解C/C++的内存管理

在C和C中&#xff0c;高效的内存管理是编写性能优化和资源高效利用程序的关键。本文将深入探讨C/C内存管理的各个方面&#xff0c;包括内存的分布、C语言和C中的动态内存管理方式&#xff0c;以及new和delete操作符的使用 C/C内存分布 C和C程序的内存可以分为以下几个区域&…

Transformer学习: Transformer小模块学习--位置编码,多头自注意力,掩码矩阵

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Transformer学习 1 位置编码模块1.1 PE代码1.2 测试PE1.3 原文代码 2 多头自注意力模块2.1 多头自注意力代码2.2 测试多头注意力 3 未来序列掩码矩阵3.1 代码3.2 测试掩码 1 …

简约轻量-失信录系统源码

失信录系统-最新骗子收录查询系统源码 首页查询&#xff1a; 举报收录页&#xff1a; 后台管理页&#xff1a; 失信录系统 V1.0.0 更新内容&#xff1a; 1.用户查询,举报功能 2.界面独立开发 3.拥有后台管理功能 4.xss,sql安全过滤 5.平台用户查询 6.用户中心&#xff08;待完…

Flume进阶学习!

本文图片来自于8.flume实时监控文件hdfs sink使用演示_哔哩哔哩_bilibili Apache Flume 的启动过程及其配置文件和脚本 在官网下载的Flume的压缩包中&#xff0c;.lib文件有大量的jar包&#xff0c;按道理说只有.lib文件就可以运行Flume程序了。只不过需要java -jar命令还要加…

第16章 网络编程

一 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在 Java 的本机安装系统里&am…

C++:递增递减运算符(16)

递增递减就是自加1或者自减1 &#xff0c; 但是还有前置递增&#xff0c;后置递增&#xff0c;前置递减&#xff0c;后置递减&#xff0c;两者的区别也大有不同&#xff0c;接下来就去看一下过程 a1 b1baa2 b2a1 b1baa2 b1a2 b2b--aa1 b1a2 b2ba--a1 b2 递增 前置递增 #includ…

JAVA基础03-scanner,输出,循环,if的使用以及eclipse的安装

目录 scanner的使用 if语句的使用 eclipse的使用 switch语句的使用 输出方法的使用 循环语句 scanner的使用 实现用户数据的交互&#xff0c;用户通过终端输入数据 注意&#xff1a;使用Scanner需要导包 在程序开头加上&#xff1a;import java.util.Scanner; //由于S…

IDEA修改jdk版本

项目的版本 实际版本和想要版本要对应起来 模块版本jdk1 源jdk版本2 如果报错 无效的发行版本 看一下pom文件中的編譯版本