两个月冲刺软考——关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法(例题讲解,看完必会)

news2024/11/25 21:44:37

1. 数据库中的简单属性、多值属性、复合属性、派生属性

简单属性:指不能够再分解成更小部分的属性,通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。

多值属性:指一个属性可以有多个值。例如一个学生可能会有多个电话号码,这种情况下“电话号码”就可以被视为是多值属性。

复合属性:是由两个或多个简单属性组合而成的属性。例如:“家庭住址”记录了邮编、省、市、街道信息,则“家庭住址”这个属性就为复合属性。

派生属性:是指其值可以通过其他属性的值计算得出的属性。例如:一个“年龄”属性可以通过当前日期减去“出生日期”属性的值来计算得出。

2. 并发控制中事务的特性(ACID)

原子性(Atomicity):事务是原子的,要么做,要么都不做。

一致性(Consistency):事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。

隔离性(lsolation):事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其它事物都是不可见的。

持久性(Durability):一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也永久有效。

3. 三级模式结构

视图——用户视图——外模式

基本表——概念视图——模式(概念模式)

存储文件——内部视图——存储模式

外模式 与 概念模式 映射➡逻辑独立性

概念模式 与 内模式 映射➡物理独立性

4. 关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法

求属性的闭包:对于每一个函数依赖Y → Z(其中Y是属性集合,Z是单个属性),如果Y是X闭包的子集,那么将Z添加到X的闭包中。

遇到这种类型题,直接求四个选项的闭包即可:

候选关键字中的属性,可以推导出关系中的所有其他属性,且可能有多个候选关键字。

还有一个解法就是会发现题目中的函数依赖没有可以推出属性C的依赖,所以候选关键字中必定会含有属性C,故选D。


利用表格法来解题(举例):

  • 构造一个表格,其中行代表分解后的关系模式,列代表原始关系模式的所有属性。
  • 表格中的每个单元格,如果属性属于对应的关系模式,则填充为该属性的标记(例如a),如果不属于,则填充为b加上行号和列号的组合(例如b12)。
  • 根据函数依赖集F,逐步更新表格中的值。如果某个函数依赖的左侧属性在表格的某列中具有相同的值,那么将这个函数依赖的右侧属性在相同行中的值也更新为相同的值。
  • 如果在任何时候,表格中出现一行,其所有单元格都是属性标记(没有b),则说明分解是无损的。

假设我们有一个关系模式 R(A,B,C,D,E),并且我们有以下函数依赖集 F={A→B,C→D}F={A→B,C→D}。现在,我们将 R 分解为三个关系模式 R1(A,B),R2(B,C),和 R3(A,D)。我们要判断这个分解是否是无损的。

步骤 1:构造表格

我们首先构造一个表格,行表示分解后的关系模式,列表示原始关系模式的所有属性。在这个例子中,我们有 3 行 4 列:

ABCDE
R1a1a2b13b14b15
R2b21a2a3b24b25
R3a1b32b33a4b35

步骤 2:填值

  • 表格中的a1,a2,a3,a4表示这些属性直接来自分解模式的属性。
  • b13,b14,b21,b24,b32,b33表示这些属性不在当前行的分解模式中,但它们在其他分解模式中存在。

步骤 3:应用函数依赖

接下来,我们根据函数依赖集F来更新表格中的值:

  1. 应用 A→B:

    • 因为 a1 在 R1 和 R3 中,我们将 R3 中的 b32 更新为 a2。
  2. 应用 C→D:

    并没有出现含有相同元素的行,故结束

更新后的表格如下:

ABCDE
R1a1a2b13b14b15
R2b21a2a3b24b25
R3a1a2b33a4b35

步骤 4:检查是否无损

现在我们检查表格中是否有任何一行完全由 a 标记组成。在这个例子中,并没有任何一行是完全由a标记组成的,故不是无损连接分解。

两个月冲刺中级软件设计师,欢迎大家一起讨论交流,同时也希望各位大佬们指出错误,我这边及时修改。

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

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

相关文章

掌握EF Core:全方位面试指南,助你从初级到高级轻松晋级

一、前言 这份指南旨在帮助你为主要考察 Entity Framework Core (EF Core) 的面试做好准备,内容涵盖基础、中级和高级三个不同经验级别。每个级别包括10个高频面试题,附有解题思路和详细的解答示例。 二、基础级别 重点在于 EF Core 的基本概念和使用…

nginx源码编译

华子目录 准备下载nginx源码包关闭firewalld和selinux安装依赖环境 安装解压关闭nginx的debug功能执行./configure进行环境检测添加nginx系统用户使用make编译使用make install安装 进入到prefix指定的目录中查看启动nginx服务关闭nginx添加nginx环境变量卸载nginx 准备 下载n…

猫头虎 分享:Python库 SciPy 的简介、安装、用法详解入门教程

🐯 猫头虎 分享:Python库 SciPy 的简介、安装、用法详解入门教程 今天猫头虎带您深入探索SciPy,一个在数据科学和人工智能领域必不可少的Python库! 📝 摘要 在数据科学和人工智能领域,SciPy 是一个关键的…

【电脑小白】告别蓝屏恐慌:一步步教你排查和解决蓝屏问题,从此告别蓝屏烦恼!

在日常学习和工作中,电脑已经成为我们日常生活和工作中不可或缺的一部分。然而,电脑的蓝屏问题却成为许多朋友,尤其是电脑小白们的噩梦。一旦遭遇蓝屏,大多数人一时都会感到手足无措。 因此,本文将向各位朋友介绍遇到蓝…

迁移学习之领域泛化

对目标领域一无所知,并不是要适应到某一个特定的领域上的问题通常称为领域泛化。领 域泛化可又分成两种情况。一种情况是训练数据非常丰富,包含了各种不同的领域,测试数据 只有一个领域。如图1(a)所示,比如…

2024年8月30日(docker部署project-exam-system系统 并用Dockerfile构建java镜像)

一、回顾 1.使用harbao仓库 1. Python -- version 2. yum -y update 3. yum -y install python2-pip 4. pip install -- upgrade pip 20.3 -i https://mirrors.aliyun.com/pypi/simple 5. pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple 6. source do…

向量、数量积、向量积

目录 一、向量的定义二、向量是有序的数字列表三、向量的基本分类四、向量的运算律五、向量的基本运算1、向量加法2、向量乘法(数乘)3、向量减法4、点积(内积或数量积)5、叉积(外积或向量积)6、向量的模&am…

RTA-OS Port Guide学习(一)-基于S32K324 OS

文章目录 前言OS Port的安装Port CharacteristicsParameters of ImplementationConfiguration ParametersStack used for C-startup(SpPreStartOS)Stack used when idle (SpStartOS)Stack overheads for ISR activation (SpIDisp)Stack overheads for ECC tasks (SpECC)Stack o…

LLM的范式转移:RL带来新的 Scaling Law

从几周前 Sam Altman 在 X 上发布草莓照片开始,整个行业都在期待 OpenAI 发布新模型。根据 The information 的报道,Strawberry 就是之前的 Q-star,其合成数据的方法会大幅提升 LLM 的智能推理能力,尤其体现在数学解题、解字谜、代…

<Rust>egui学习之小部件(三):如何为窗口UI元件设置布局(间隔、水平、垂直排列)?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第三篇博…

TWRP 使用帮助 第三方Recovery

简介 TWRP 是国外安卓爱好者开发的一款工具全称为:Team Win Recovery Project。是一个由Omnirom开源团队中的Dees Troy主导开发,旨在打造最完美第三方recovery的开源项目。目前主要由包括Dees Troy在内的4个人共同维护。 主要作用包括刷机、备份、救砖 …

C++判断语句(基础速通)ac-wing

倍数 #include <iostream> using namespace std; int a, b; int main() {cin >> a >> b;if (a % b 0 || b % a 0) cout << "Sao Multiplos";else cout << "Nao sao Multiplos";return 0; }零食 #include <iostream>…

通用后台管理系统实战演示(Vue3 + element-plus)汇总篇一

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

菜鸟笔记-001 如何用JavaScript脚本在文字中实现向左或向右插入空格

这是一个网友在线上问我的一个问题&#xff1a; 如何用JavaScript脚本在文字中实现向左或向右插入空格 下图是在文字左边插入了1/2个空格的效果&#xff1a; 那么如何用javascript 实现向左向右插入空格&#xff1f; 其实这个功能&#xff0c;我在实际工作确实很少碰到&#xf…

【王树森】RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练(个人向笔记)

Stacked RNN&#xff08;多层RNN&#xff09; 1. 原理 多个全连接层可以堆叠&#xff0c;多个卷积层也可以堆叠。同理&#xff1a;RNN也可以堆叠形成多层RNN。 如下图所示&#xff1a;对于每一个时刻的输出 h t h_t ht​&#xff0c;它既会作为下一个时刻的输入&#xff0c;…

【C++ 第十八章】C++11 新增语法(1)

1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

2016年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(10 分) 【问题 2】(6 分) 【问题 3】(9 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Scrum 敏捷开发过程的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 Scrum 是一个增量…

C语言典型例题57

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.9 判断整数是否为素数 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.9 判断整数是否为素数//【数学知识】素数&#xff1a;一个大于1的自然数&#xff0c;如果只…

我从obsidian 转入 语雀 了

遇到的问题倒是不多&#xff0c;这里记录一下&#xff1a; 1. wiki链接转markdown 用vscode打开ob工作区文件夹&#xff0c;利用正则表达式&#xff0c;替换链接 \[\[(.*?)\]\][$1](../_resources/$1) 我的图片都存在_resources文件夹里 其中ob的json&#xff0c;还有插件的…

JavaEE:多线程代码案例(定时器)

文章目录 定时器介绍Java标准库中的定时器定时器的实现 定时器 介绍 除了之前说过的单例模式,阻塞队列,线程池以外,定时器也是我们日常开发中常用的代码~ 定时器相当于"闹钟".在现实生活中,当闹钟响时,我们就需要去完成一些事情. 同理,在代码中,也经常需要"闹…