数据库关系模式分解 - 无损连接和保持函数依赖性

文章目录

  • 1 概述
    • 1.1 关系模式分解的好坏标准
  • 2 无损连接验证算法

1 概述

1.1 关系模式分解的好坏标准

  • 书上的算法太抽象了,咱不好理解,以下举例说明。
  • 一个关系可以有很多种分解方法,如何判断分解的好与坏呢?
    • ① 查询时的连接操作,是否会 丢失某些信息多出某些信息。这引出了 无损连接 的概念
    • ② 分解后的关系模式,是否 保持了原来的函数依赖。这是 保持函数依赖性 的问题

在这里插入图片描述

2 无损连接验证算法

关系模式 R( A 1 , A 2 , … … , A n A_1,A_2,……,A_n A1A2……An),它的函数依赖集 F,以及分解 ρ = { R 1 , R 2 , … … , R n } ρ=\{R_1,R_2,……,R_n\} ρ={R1R2……Rn}

矩阵法:

  • 构造一个 i 行 j 列 的表,第 i 行对应关系模式 R i R_i Ri,第 j 列对应属性 A j A_j Aj。如果 A j ∈ R i A_j ∈ R_i AjRi,则在第 i 行第 j 列上放元素 a j a_j aj,否则放元素 b i j b_{ij} bij
  • 重复考察 F 中的 每一个函数依赖,并修改表中的元素。如:取 F 中一个函数依赖 X -> Y,并在 X 列上寻找 元素相同的行,然后将这些行对应 Y 列的值,按下列情况的 顺序 进行修改
    • ① 如果其中有 a j a_j aj,则将 b i j b_{ij} bij 改为 a j a_j aj
    • ② 如果其中无 a j a_j aj,则全部改为 b i j b_{ij} biji 是这些行的行号最小值
  • 如果发现表中某一行变成了 a 1 , a 2 , … , a n a_1, a_2, …, a_n a1,a2,,an,则分解 ρ 具有无损连接性;反之,不具有无损连接性。

举例:

U = { A , B , C , D , E } U=\{A,B,C,D,E\} U={ABCDE}
F = { A → C , B → C , C → D , D E → C , C E → A } F=\{A→C, B→C, C→D, DE→C, CE→A\} F={AC,BC,CD,DEC,CEA}
ρ = { R 1 , R 2 , R 3 , R 4 , R 5 } ρ=\{R_1, R_2, R_3, R_4, R_5\} ρ={R1,R2,R3,R4,R5},其中 R 1 = A D , R 2 = A B , R 3 = B E , R 4 = C D E , R 5 = A E R_1=AD,R_2=AB,R_3=BE,R_4=CDE,R_5=AE R1=ADR2=ABR3=BER4=CDER5=AE

步骤1:构造 k行n列 的表…

R i R_i RiABCDE
AD a 1 a_1 a1 b 12 b_{12} b12 b 13 b_{13} b13 a 4 a_4 a4 b 15 b_{15} b15
AB a 1 a_1 a1 a 2 a_2 a2 b 23 b_{23} b23 b 24 b_{24} b24 b 25 b_{25} b25
BE b 31 b_{31} b31 a 2 a_2 a2 b 33 b_{33} b33 b 34 b_{34} b34 a 5 a_5 a5
CDE b 41 b_{41} b41 b 42 b_{42} b42 a 3 a_3 a3 a 4 a_4 a4 a 5 a_5 a5
AE a 1 a_1 a1 b 52 b_{52} b52 b 53 b_{53} b53 b 54 b_{54} b54 a 5 a_5 a5

步骤2:重复考察 F 中的每一个函数依赖…
在这里插入图片描述

步骤3:判断是否具有无损连接性

  • 通过观察发现,只有 BE 具有无损连接性

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

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

相关文章

类的六个构造函数相关干货

构造函数 特点 1.名字与类名相同 2.无返回值 3.对象实例化的时候编译器自动调用这个函数 4.构造函数可以重载(无参构造函数,拷贝构造等) 5.如果类中没有显式定义构造函数(深拷贝),则编译器会自动生成一个…

抖音阳哥:选品师项目究竟能不能算蓝海项目?

在当今这个信息爆炸的时代,短视频平台如抖音已经成为了人们获取信息、娱乐休闲的重要渠道。抖音上涌现出许多具有影响力的网红,他们不仅分享自己的生活点滴,还常常推荐一些创业项目或商业模式。其中,阳哥分享的选品师项目引起了广…

STM32H750片外QSPI下载算法文件(stldr)生成

STM32H750片外QSPI下载算法文件(stldr)生成 🌿相关篇《STM32H750片外QSPI启动配置简要》📌参考实现资料: https://github.com/lchnu/STM32H750XBH_ARTPIQSPI_W25Q64JV https://gitee.com/wangchief/H750_W25QXX ✨利…

风格迁移adaIN 和iT的adaLN

文章目录 BN、LN、IN、GN的区别![](https://img-blog.csdnimg.cn/direct/d38c005616f145cba2aa1c4c2e046be0.png)图像风格迁移adaINDiT adaLN BN、LN、IN、GN的区别 BatchNorm:batch方向做归一化,算NxHxW的均值,对小batchsize效果不好&#x…

「Kafka」Kafka基础知识入门介绍(三)

「Kafka」Kafka基础知识入门介绍(三) 一、消息主题1. 创建主题 二、生产数据1. 命令行模式2. Java代码模式 三、消费数据1. 命令行模式2. Java代码模式 「Kafka」Kafka理论知识解读(一) 「Kafka」Kafka安装和启动(二&a…

【kotlin】利用by关键字更加方便地实现装饰器模式

关于kotlin中的by关键字的用法,kotlin官方文档属性委托这一节讲得很清楚。 简单来说就是这样的,假设存在一个接口Component如下: interface Component {fun method1(): IntArrayfun method2(a: Int)fun method3(a: Int, str: String) }那么对…

React-性能优化的手段

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-性能优化的手段 目录 React 性能优化的手段有哪些? 一、是什么 二、如何做…

【汇编语言】流程转移和子程序

【汇编语言】流程转移和子程序 文章目录 【汇编语言】流程转移和子程序前言一、“转移”综述二、操作符offset三、jmp指令jmp指令——无条件转移jmp指令:依据位移进行转移两种段内转移远转移:jmp far ptr 标号转移地址在寄存器中的jmp指令转移地址在内存…

Vue3种常用插槽的使用

插槽总结 &#xff1a; 插槽的作用&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件间通信的方式&#xff0c;适用于 父组件 > 子组件 。分类&#xff1a;默认插槽、具名插槽、作用域插槽 1、默认插槽 父组件中&#xff1a; <Category>…

鸿蒙HarmonyOS应用 - ArkUI组件

ArkUI组件 基础组件 Image 声明Image组件并设置图片源 网络权限&#xff1a;ohos.permission.INTERNET Image(scr: string | PixelMap | Resource)// 1. string&#xff1a;用于加载网络图片&#xff0c;需要申请网络权限 Image("https://xxx.png")// 2. PixelMap…

一线实战,一次底层超融合故障导致的Oracle异常恢复

背景概述 某客户数据由于底层超融合故障导致数据库产生有大量的坏块&#xff0c;最终导致数据库宕机&#xff0c;通过数据抢救&#xff0c;恢复了全部的数据。下面是详细的故障分析诊断过程&#xff0c;以及详细的解决方案描述&#xff1a; 故障现象 数据库宕机之后&#xff0c…

粤嵌—2024/4/24—删除有序数组中的重复项 ||

代码实现&#xff1a; 方法一&#xff1a;双指针 int removeDuplicates(int *nums, int numsSize) {int l 0, r 0;while (r < numsSize) {if (r > 1 && nums[r] nums[l - 1] && nums[r] nums[l - 2]) {r;} else {nums[l] nums[r];l;r;}}return l; }…

ONES 功能上新|ONES Wiki 新功能一览

支持在 ONES Wiki 页面中使用分栏进行横向排版&#xff0c;丰富排版方式&#xff0c;帮助用户以更丰富的版式展示内容。 应用场景&#xff1a; 页面的布局对内容的阅读有很大的影响。当页面中有图文混排的需求时&#xff0c;可以通过分栏来组织页面结构&#xff0c;以更清晰、更…

Docker容器概念介绍与基本管理

前言 在软件开发和部署环境中&#xff0c;使用 Docker 等容器技术可以帮助团队实现快速、一致、可靠的应用程序部署&#xff0c;提高开发效率和应用程序的可移植性。 目录 一、虚拟化产品介绍 1. 云服务模型 1.1 IaaS 1.2 PaaS 1.3 SaaS 1.4 DaaS 2. 产品介绍 2.1 虚…

14 JavaScript学习:条件语句

JavaScript条件语句 JavaScript中的条件语句主要用于根据条件执行不同的代码块。以下是对JavaScript条件语句概念的详细解释和分类&#xff1a; if语句&#xff1a; 单个if语句&#xff1a;最简单的条件语句&#xff0c;根据条件判断是否执行特定的代码块。if…else语句&#x…

【机器学习与实现】机器学习概述

目录 一、机器学习的基本概念和方法&#xff08;一&#xff09;基本概念&#xff08;二&#xff09;机器学习的一般过程举例&#xff08;三&#xff09;样本和参数估计 二、机器学习的步骤总结&#xff08;一&#xff09;机器学习的主要步骤&#xff08;二&#xff09;样本及样…

C++并发编程

基本介绍 线程 C98标准没有直接提供原生的多线程支持 在C98中&#xff0c;并没有像后来的C11标准中那样的<thread>库或其他直接的多线程工具 然而&#xff0c;这并不意味着在C98中无法实现多线程。开发者通常会使用平台特定的API&#xff08;如Windows的线程API或POSI…

vue3中的ref、isRef、shallowRef、triggerRef和customRef

1.ref 接受一个参数值并返回一个响应式且可改变的 ref 对象。 ref 对象拥有一个指向内部值的单一属性 .value property &#xff0c;指向内部值。 例&#xff1a;此时&#xff0c;页面上的 str1 也跟着变化 <template><div><button click"handleClick&quo…

严厉打击侵犯知识产权行为!法院公开审理假冒半岛超声炮知产刑事案件

随着医美行业的蓬勃发展&#xff0c;一些不法分子利用消费者对变美的渴望&#xff0c;制售假冒半岛超声炮&#xff0c;严重侵犯了消费者的合法权益&#xff0c;也破坏了医美市场的健康发展。为了维护市场秩序&#xff0c;保障消费者权益&#xff0c;各地相关监管部门持续加大监…

QT从入门到实战x篇_22_番外1_Qt事件系统

文章目录 1. Qt事件系统简介1.1 事件的来源和传递1.2 事件循环和事件分发1.2.1 QT消息/事件循环机制1.2.1.1 机制解释1.2.1.2 两个问题 1.2.2 事件分发 2. 事件过滤基础2.1 什么是事件过滤器&#xff08;Event Filter&#xff09;&#xff1f;2.2 如何安装事件过滤器 3. 事件过…