阅读指南
前言
最近学习数据库理论,刚好学到第六章的关于关系数据库极小函数依赖集的问题,此篇博客仅为记录学习,巩固知识点。在本篇中,会介绍什么是闭包,什么是极小函数依赖集以及极小函数依赖集的求法。如有问题,欢迎各位大佬指出——
闭包
在谈怎么样求最小函数依赖集之前,我们先来了解一下闭包的相关概念(主要是数据库这块涉及到的)。
在这里我们介绍两种,一种是函数依赖集 F F F的闭包,一种是属性集 X X X( X ⊆ U X⊆U X⊆U)关于 U U U上的函数依赖集F的闭包 X F + X_F{^+} XF+ 。
函数依赖集F的闭包
在关系模式 R < U , F > R<U,F> R<U,F>中为 F F F所逻辑蕴含的函数依赖的全体叫作 F F F的闭包,记为 F + F{^+} F+。
属性集关于函数依赖集的闭包
设 F F F为属性集 U U U上的一组函数依赖, X X X、 Y ⊆ U Y⊆U Y⊆U, X F + X_F{^+} XF+ = { A ∣ X → A A|X →A A∣X→A能由 F F F根据Armstrong公理导出}, X F + X_F{^+} XF+ 称为属性集 X X X关于函数依赖集 F F F的闭包。
说白了,这个闭包就是由一个(或一些)属性直接或间接推导出的所有属性的集合。
极小函数依赖集(最小覆盖)
定义
如果函数依赖集 F F F满足下列条件,则称 F F F是一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
- F F F中任意函数依赖的右部仅含有一个属性。
- F F F中不存在这样的函数依赖 X → A X →A X→A,使得 F F F与 F F F−{ X → A X →A X→A}等价。
- F F F中不存在这样的函数依赖 X → A X →A X→A, X X X有真子集 Z Z Z使得 F F F−{ X → A X →A X→A} ∪ \cup ∪{ Z → A Z→A Z→A}与 F F F等价。
解释
根据定义,我们知道,最小依赖集必须满足下面三个条件:
- 被决定因素最小化: F F F的最小函数依赖的右侧只能有一个属性。
- 决定因素最小化: F F F中不允许有这样的函数依赖:若函数依赖集中存在 A B → Y AB\rightarrow Y AB→Y,现对该依赖的左部进行化简,即删除 A A A,得 B → Y B\rightarrow Y B→Y;或删除 B B B,得 A → Y A\rightarrow Y A→Y。在经过化简后的函数依赖集与没有化简前的函数依赖集等价,这样的函数依赖是不允许存在 F F F中的。
- 函数依赖数目最小化: 现存的函数依赖集中去掉一个函数依赖 X → A X →A X→A,所得到的新的函数依赖集与原来的函数依赖集是等价的,这样的函数依赖是不允许存在 F F F中的。
应当指出, F F F的最小依赖集 F m F_m Fm不一定唯一,它与对各函数依赖 F D i FD_i FDi及 X → A X →A X→A中 X X X各属性的处置顺序有关。
通用算法
先插入一个推理规则:(由Armstrong公理系统的三条推理规则而得到的一个推理规则。)
分解规则: 由 X → Y X\rightarrow Y X→Y以及 Z ⊆ Y Z⊆Y Z⊆Y,可以得到 X → Z X\rightarrow Z X→Z。
分