数据库函数依赖关系 关系数据库理论

介绍

依赖理论关注如何构建良好的关系数据库模式,以及当模式有缺陷时如何改进它。

功能依赖

关系 R 上的函数依赖 (FD) 是 R 的两个元组通过其属性相关的关系。

如果他们在其他属性上达成一致,那么他们必须就

此函数依赖关系正式标记为

, 并且说

功能决策

如果确定关系 R 的每个实例都使给定的函数依赖项为真,则称关系 R 满足函数依赖项 f。这是对 R 声明的约束,而不仅仅是对 R 的特定实例的约束。

函数依赖中的函数是什么意思?

之所以称为“函数”依赖,是因为在这个规则中,有一个针对值列表的函数(对于列表中的每个值

),每个属性都会生成一个唯一的值B。这个函数不同于数学中常见的函数,因为这个规则是不能计算的,也就是说后面的属性不能根据前面的属性集来计算,只能通过观察关系来得到结果。

分解规则:可以使用一组 FD

(i=1,2,…m)替换 FD

组合规则:您可以使用一个FD

更换FD套件

(i=1,2,…,m)

平凡函数依赖:如果关系上的约束对所有关系实例都成立,并且与其他约束无关,则称为平凡函数依赖。平凡函数依赖是指一类函数依赖:

,在

简单依赖规则:FD

相当于

其中 C 是集合 B 中的属性,但不在集合 A 中

传递规则:如果关系 R 中的 FD

如果两者都正确,则 FD

这在 R 中也适用

关系的关键

如果满足以下条件,则考虑一个或多个属性集{

} 是关系 R 的关键。

1 这些属性函数决定了关系的所有其他属性。换句话说,关系 R 不可能有两个不同的元组具有相同的

价值

2 在 {

},没有函数可以确定R的所有其他属性。也就是说,密钥必须是最小的

超级键

包含键的属性集称为超键。超键满足键的第一个条件,但不满足第二个条件。

关闭属性

假设

是属性集,S是FD集,则S下的属性集为

的闭包是满足以下条件的属性集 B,即满足 S 中所有 FD 的每个关系也满足

、属性集

关闭

计算一组属性的闭包的算法

输入:属性集合

,FD 集合 S

输出:

1 如果必要的话,分解S中的FD,使得每个FD在其右侧只有一个属性。

2 假设 X 是一组属性,即闭包。首先,将 X 初始化为

3 反复寻找此类FD:

, 以便

在 X 中,但 C 不在 X 中;如果找到,则将 C 添加到 X 并重复该过程。由于集合 X 只能增长,并且任何关系模型中的属性都是有限的,因此当没有元素可以添加到 X 时,此步骤结束。

4 当不再有可见属性时,集合 X 为

计算闭包可以轻松确定某些函数依赖关系是否存在。例如,如果相对于 FD 集合 S,

,我们很容易判断FD可以导出

,但不能推断

闭包和钥匙

注意当且仅当

是关系的超键,

是这个关系的所有属性的集合。只有这样,

该功能决定了所有其他属性。

这是关系的关键吗?你可以先检查一下

是否包含关系的所有属性,然后检查是否存在

删除属性后的集合 X

包含关系的所有属性。

函数依赖的闭包集

给定一组 FD S,任何等价于 S 的 FD 集合都称为 S 的基。为了避免基集的增多,只考虑 FD 右侧为单一属性的基集。满足以下三个条件的基集 B 称为关系的最小基。注意,最小基不一定是唯一的。

1 B 中的所有 FD 在其右侧都有一个属性

2 从 B 中移除任意 FD 后,该集合不再是基本集

3 对于B中的任意FD,如果从其左侧删除一个或多个属性,则B不再是基集。

投影函数依赖性

假设存在一个关系 R 和一组 FD S。通过计算

获取 L 在其某些属性上的投影,然后

哪些 FD 在 中成立? 这个问题的答案原则上可以通过计算函数依赖集 S 的投影来获得。 S 的投影是满足以下条件的所有 FD 的集合:

1 从 S 推断 2 仅包含

特性

函数依赖集的投影算法

输入:关系 R 和

计算关系

以及 R 中成立的 FD 集合 S

输出:输入

在以下情况中成立的 FD 集

方法:1 令 T 为最终输出 FD 的集合,并将 T 初始化为空集

2 对于

对于属性集的每个子集X,计算

,计算是基于FD集合S的,可能会涉及到一些不在R模式的数据。

架构中的属性。对于所有

属于

属性 A 将设置所有非平凡 FD

添加到T

3 现在,T 是

中的FD基组,但它可能不是最小化基组。最小化基组是通过如下修改T构造的。

a 如果 T 中的 FD F 可以从 T 中的其他 FD 推断出来,则从 T 中删除 F

b 假设

是T中的FD,Y至少有两个属性,从Y中删除一个属性并记为Z。

可以从 T 中的 FD(包括

)推断,然后使用

代替

c 重复以上两步,直到T不再变化

关系数据库模式设计

库依赖函数关系数据怎么处理_数据库函数依赖关系_数据库函数依赖

如何设计一个好的关系模型呢?一般来说,我们首先设计一个可以工作的关系模型,然后分析这个模型存在的问题,然后对现有的模型进行分解,使得分解后的关系符合 BCNF 范式,同时也消除了以前设计中存在的问题。

当您尝试在关系中包含过多信息时,会出现问题(例如冗余),这称为异常。异常的基本类型包括:

冗余:信息以多个元组的形式重复

更新异常:在更新字段的时候,可能某些元组中的字段被更新了,但是其他元组中的字段可能被忘记更新。

删除异常:如果关系表中存在一些不相关的属性,当其中一个属性需要清除时,其他属性也会被删除,这可能不是用户希望看到的。

分解关系

一般采用分解关系的方法来消除异常。给定一个关系

,将其分解为关系

数据库函数依赖关系,并满足:

博伊斯-科德范式

分解的目的是用多个没有例外的关系来代替一个关系。换句话说,在一个简单的条件下,保证不存在所讨论的例外。这个条件称为 Boyce-Codd 范式,简称 BCNF。关系 R 属于 BCNF 当且仅当:

如果成立,

是关系 R 的超键。

任何二元关系都属于 BCNF。我们可以想象两个属性 A 和 B,分别看看可能的情况:

1 不存在非平凡 FD。由于只有非平凡 FD 才能违反此条件,因此 BCNF 必定成立,并且 {A, B} 是唯一键。

成立,但是

不,在这种情况下,A 是唯一的键,并且每个非平凡 FD 左侧都包含 A,因此不违反 BCNF。

成立但

不成立,同上

A 和 B 都是键。由于任何 FD 的左侧都至少包含 A 和 B 之一,因此没有 FD 违反 BCNF。

BCNF分解算法如下

输入:关系

以及对它的函数依赖集

输出:

分解后的关系集,每个关系都属于 BCNF

方法:以下步骤可以递归应用于任何关系 R 和 FD 集 S。最初,R =

,S=

1 检查 R 是否符合 BCNF。如果符合,则不执行任何操作并返回 {R} 作为结果。

2 如果违反 BCNF,则假设

.首先计算X的闭包

。选择

作为关系模型,并创建另一个关系模型

包含属性 X 以及不包含在

的属性

3 计算

FD 集

4 使用该算法进行递归分解

. 返回这些分解的结果集合。

分解的利与弊

一个关系模型在分解成一系列属于BCNF的关系之前,可能含有异常,但分解后,就不含有异常了,这叫“优秀”。然而,分解也可能导致一些不好的结果。本节介绍分解的三个性质。

1 异常消除

2 信息的可恢复性。是否有可能从分解的元组中恢复原始关系?

3 依赖关系的保存。如果FD的投影建立在分解后的关系上,能否保证通过join操作重建分解后的关系得到的原始关系仍然满足原始FD?

BCNF分解可以保证1和2,第三范式可以保证2和3,但是没有办法同时保证这三个性质。

如果

对于关系 R 成立,并且 R 的属性集为

,但

第三范式

如果关系 R 满足以下条件,则它符合第三范式:

是一个非平凡的 FD,那么

是一个超密钥,或者每个

但不属于 A 的属性都是键的成员

一种具有无损连接和依赖性保留的 3NF 关系综合算法

输入:关系 R 以及建立在其上的函数依赖集 F

输出:R 分解的关系集,每个关系都属于 3NF。分解具有无损连接和依赖性保留属性。

方法:1. 找到F的一个最小基集,记为G

2 对于 G 中的每个 FD

,使用 XA 作为分解关系的模型

3 如果步骤 2 中分解的关系模式不包含 R 的超键,则添加一个关系,其模式为 R 的任意键

多值依赖 (MVD)

多值依赖是指在关系 R 中,当给定一组属性的值时,存在另一组属性,其值与关系中所有其他属性的值无关。更准确地说,如果给定 R 中属于集合 A 的属性的值,存在一个属性集 B,其值与 R 中不属于 A 或 B 的属性集的值无关,则称为 MVD。

准确地说,为了使 MVD 成立,那么对于 R 中每一对在 A 的所有属性上一致的元组 t 和 u,都存在一个元组 v 满足以下条件:

1 A属性的值与t和u相同

2 B属性的值与t相同

3 R 中不属于 A 和 B 的所有其他属性都具有与 u 相同的值

MVD 规则

简单的 MVD 规则是

,然后 MVD

建立在任何关系中

传输规则,如果有关系

,但

升级规则,每个FD都是一个MVD。

第四范式

如果对于 R 中的每个非平凡 MVD

都是超密钥,那么 R 属于第四范式

分解为第四范式

输入:关系

,其上的 FD 和 MVD 集为

输出:

分解后的关系集,每个关系集都符合4NF,具有无损连接性质

方法:依次执行以下步骤,然后

1 在 R 中查找 4NF 违规,表示为

,在

不是超密钥。注意,这个 MVD 可以是 S 中的真 MVD,也可以是从 S 中的相应 FD 派生而来的,因为每个 FD 都是一个 MVD。如果不存在,则返回 R 本身就是一个合适的分解。

2 如果存在这样的 4NF 违反数据库函数依赖关系,则将包含 4NF 违反的关系 R 分解为两个模式

,其模式为 A 和 B

,其众数为 A 以及 R 中所有不属于 A 和 B 的其他属性

3 了解详情

FD 和 MVD 符合上述要求。根据投影依赖关系递归分解

注意,4NF 意味着 BCNF,而 BCNF 意味着 3NF,如下图所示

© 版权声明
THE END
喜欢就支持一下吧
点赞111赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容