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

本文主要是介绍两个月冲刺软考——关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法(例题讲解,看完必会),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.chinasem.cn/article/1125227

相关文章

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏