数据库最小函数依赖求法 附相关习题及解析

2023-12-31 19:20

本文主要是介绍数据库最小函数依赖求法 附相关习题及解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先我们给出最小函数依赖的定义

如果函数依赖集F满足下列条件,则称F为最小函数依赖集或最小覆盖。
① F中的任何一个函数依赖的右部仅含有一个属性;
② F中不存在这样一个函数依赖X→A,使得F与F-{X→A}等价;
③ F中不存在这样一个函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价。

可能我们大多数开始看的时候,都会觉得的很绕口,其实很简单,就是有一些字母 X 和函数依赖集 F,你可以找到一个最小的函数依赖集,它的所有函数依赖的箭头右边都只有一个字母,且不影响把箭头右边的字母都推出来,并且左边的字母数量也是最少,没法再删减了

算法

  1. 右部最小化:即把所有的右边不是单个属性的依赖变为单个属性。
  2. 求谁挡谁:把这个依赖删除,看左边属性的闭包能否包含右边的属性,就是把他挡住,看没了他还行不行。
  3. 左部最小化:对于函数依赖,如果左边不是单个属性,那我们挡住一个属性,看其他的属性还能推出来右边的属性吗,可以的话就删掉他,不可以的话就保留。

我们来看个例题:

关系模式R(U,F)中,U={A,B,C,D,E,G},F={B→D,DG→ C,BD→E,AG→B,ADG→BC};求F的最小函数依赖集。

  1. 右部最小化

    ADG→BC拆解成ADG→B、ADG→C

    得新函数依赖集:

    F = {B→D,DG→C,BD→E,AG→B,ADG→B,ADG→C}

  2. 求谁挡谁

在这里插入图片描述
3. 左部最小化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

习题:设F={C→A, CG→D, CG→B, CE→A, ACD→B}, 求最小函数依赖集。(11分)

答案:

(1)右部最小化:函数依赖集F满足右部最小化;
(2)求谁挡谁:CE→A可去掉,CG→B可去掉,所以可得F1={C→A, CG→D, ACD→B};
(3)左部最小化:可将ACD→B用CD→B取代。

所以F的最小函数依赖集为{C→A, CG→D, CD→B}

这篇关于数据库最小函数依赖求法 附相关习题及解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/556929

相关文章

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

java中的HashSet与 == 和 equals的区别示例解析

《java中的HashSet与==和equals的区别示例解析》HashSet是Java中基于哈希表实现的集合类,特点包括:元素唯一、无序和可包含null,本文给大家介绍java中的HashSe... 目录什么是HashSetHashSet 的主要特点是HashSet 的常用方法hasSet存储为啥是无序的

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li