规范覆盖2025年6月3日 | 阅读 18 分钟 大量的函数依赖会减慢速度,并使系统比实际需要更加努力地工作。而这正是规范覆盖在这种情况下非常有用的时候。尽管如此,大量的函数依赖 F 的相应规范覆盖,尽管它被认为是 F 的简化版本,但它也有助于保持与原始集合相同的输出,同时避免了所有额外的部分,使用户拥有更多的控制权,从而使事情更简单、更清晰。 ![]() "函数依赖中的属性如果移除它不会改变整体结果,这意味着它不会以有效的方式影响从依赖关系中可以确定什么,那么该属性通常被称为不必要的。" 定义在更新数据库的选定部分时,将其视为新情况非常重要。系统应检查更新期间是否影响了任何函数依赖。如果任何这些规则被打破,系统应识别问题并取消更改。这种回滚过程有助于个人保持数据库的一致性,并确保在更新完成后所有数据之间的重要关系仍然有效。 语法 α1-> β1 且 α2-> β2,那么我们可以写成 α1= α2 寻找规范覆盖的步骤在相应的 DBMS 中,规范覆盖主要被称为函数依赖的最简单形式,也称为最小或不可约集合。找到它涉及几个清晰的步骤来去除不必要的部分。因此,在本节中,让我们通过使用一个例子来分解这个过程,使其更容易理解。 步骤 1:首先,我们需要合并具有相同左侧的所有函数依赖,这反过来又使事情更容易、更简单。 因此,如果 F 中的两个或多个函数依赖具有相同的左侧,那么在这种特定情况下,个人需要通过仅取其右侧的并集来将它们有效地合并为单个函数依赖。
A→B 和 A→C 变成 A→BC。 步骤 2:在此步骤中,我们通常关注去除任何不怎么需要的额外属性。如果移除一个属性不会影响函数依赖的整体结果,则该属性被称为多余的或不必要的。现在,在本文中,我们将继续有效地探索可能发生这种情况的两种不同情况,并清楚地解释每一种。 左侧出现多余属性X→Y 左侧的额外属性有时可以移除,如果它们不改变结果。为了正确检查这一点,我们应该遵循几个清晰的步骤,下面将进行解释以便更好地理解。
右侧出现多余属性 此外,对于 X→Y,我们将检查移除 Y 中的属性是否会不影响闭包。 因此,为了有效地检查这一点,我们将遵循以下步骤:
步骤 3:函数依赖分解 现在,如果函数依赖的右侧有多个属性(例如 X→AB),我们需要将其分解为单独的依赖关系。每个依赖关系将具有相同的左侧,但右侧只有一个属性,从而使其更容易处理和理解。 步骤 4:冗余依赖检查 如果一个函数依赖 FD 在 F 中,如果移除它而不改变 F 的闭包,则称该 FD 是冗余的。 要交叉验证这一点,个人需要遵循以下步骤:
步骤 5:验证过程 个人需要确保每个函数依赖都处于其简化格式。
数据库更新如果一个 FD 的属性可以被移除而不改变 FD 集合的闭包,那么该属性就被称为多余的。 示例:给定一个关系模式 R( A, B, C, D) 和函数依赖集 FD = { B → A, AD → BC, C → ABD }。找到规范覆盖? 解答:给定 FD = { B → A, AD → BC, C → ABD },现在使用分解规则(阿姆斯特朗公理)分解 FD。
现在 FD 集合 = { B → A, AD → B, AD → C, C → A, C → B, C → D } 下一步是通过包含该 FD 和排除该 FD 来找到给定 FD 的左侧的闭包。如果两种情况下的闭包相同,那么该 FD 是冗余的,我们将其从给定集合中移除,否则如果两种闭包不同,我们则不排除该 FD。 计算所有 FD { B → A, AD → B, AD → C, C → A, C → B, C → D } 的闭包 1a. 闭包 B+ = BA 使用 FD = { B → A, AD → B, AD → C, C → A, C → B, C → D } 1b. 闭包 B+ = B 使用 FD = { AD → B, AD → C, C → A, C → B, C → D } 从 1a 和 1b,我们发现(包含 B → A 和排除 B → A)的闭包都不等价,因此 FD B → A 是重要的,不能从 FD 集合中移除。 2a. 闭包 AD+ = ADBC 使用 FD = { B →A, AD → B, AD → C, C → A, C → B, C → D } 2b. 闭包 AD+ = ADCB 使用 FD = { B → A, AD → C, C → A, C → B, C → D } 从 2a 和 2b,我们发现(包含 AD → B 和排除 AD → B)的闭包都是等价的,因此 FD AD → B 不重要,可以从 FD 集合中移除。 因此,结果 FD = { B → A, AD → C, C → A, C → B, C → D } 3a. 闭包 AD+ = ADCB 使用 FD = { B →A, AD → C, C → A, C → B, C → D } 3b. 闭包 AD+ = AD 使用 FD = { B → A, C → A, C → B, C → D } 从 3a 和 3b,我们发现(包含 AD → C 和排除 AD → C)的闭包都不等价,因此 FD AD → C 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { B → A, AD → C, C → A, C → B, C → D } 4a. 闭包 C+ = CABD 使用 FD = { B →A, AD → C, C → A, C → B, C → D } 4b. 闭包 C+ = CBDA 使用 FD = { B → A, AD → C, C → B, C → D } 从 4a 和 4b,我们发现(包含 C → A 和排除 C → A)的闭包都是等价的,因此 FD C → A 不重要,可以从 FD 集合中移除。 因此,结果 FD = { B → A, AD → C, C → B, C → D } 5a. 闭包 C+ = CBDA 使用 FD = { B →A, AD → C, C → B, C → D } 5b. 闭包 C+ = CD 使用 FD = { B → A, AD → C, C → D } 从 5a 和 5b,我们发现(包含 C → B 和排除 C → B)的闭包都不等价,因此 FD C → B 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { B → A, AD → C, C → B, C → D } 6a. 闭包 C+ = CDBA 使用 FD = { B →A, AD → C, C → B, C → D } 6b. 闭包 C+ = CBA 使用 FD = { B → A, AD → C, C → B } 从 6a 和 6b,我们发现(包含 C → D 和排除 C → D)的闭包都不等价,因此 FD C → D 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { B → A, AD → C, C → B, C → D }
闭包 AD+ = ADCB 使用 FD = { B →A, AD → C, C → B, C → D } 闭包 A+ = A 使用 FD = { B →A, AD → C, C → B, C → D } 闭包 D+ = D 使用 FD = { B →A, AD → C, C → B, C → D } 由于我们找到的 AD+, A+, D+ 的闭包不都等价,因此在 FD AD → C 中,A 和 D 都是重要的属性,不能移除。 因此,结果 FD = { B → A, AD → C, C → B, C → D },我们可以重写为 FD = { B → A, AD → C, C → BD } 是 FD = { B → A, AD → BC, C → ABD } 的规范覆盖。 示例 2:给定一个关系模式 R( W, X, Y, Z) 和函数依赖集 FD = { W → X, Y → X, Z → WXY, WY → Z }。找到规范覆盖? 解答:给定 FD = { W → X, Y → X, Z → WXY, WY → Z },现在使用分解规则(阿姆斯特朗公理)分解 FD。
现在 FD 集合 = { W → X, Y → X, WY → Z, Z → W, Z → X, Z → Y } 下一步是通过包含该 FD 和排除该 FD 来找到给定 FD 的左侧的闭包。如果两种情况下的闭包相同,那么该 FD 是冗余的,我们将其从给定集合中移除,否则如果两种闭包不同,我们则不排除该 FD。 计算所有 FD { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 的闭包 1a. 闭包 W+ = WX 使用 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 1b. 闭包 W+ = W 使用 FD = { Y → X, Z → W, Z → X, Z → Y, WY → Z } 从 1a 和 1b,我们发现(包含 W → X 和排除 W → X)的闭包都不等价,因此 FD W → X 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 2a. 闭包 Y+ = YX 使用 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 2b. 闭包 Y+ = Y 使用 FD = { W → X, Z → W, Z → X, Z → Y, WY → Z } 从 2a 和 2b,我们发现(包含 Y → X 和排除 Y → X)的闭包都不等价,因此 FD Y → X 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 3a. 闭包 Z+ = ZWXY 使用 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 3b. 闭包 Z+ = ZXY 使用 FD = { W → X, Y → X, Z → X, Z → Y, WY → Z } 从 3a 和 3b,我们发现(包含 Z → W 和排除 Z → W)的闭包都不等价,因此 FD Z → W 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 4a. 闭包 Z+ = ZXWY 使用 FD = { W → X, Y → X, Z → W, Z → X, Z → Y, WY → Z } 4b. 闭包 Z+ = ZWYX 使用 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 从 4a 和 4b,我们发现(包含 Z → X 和排除 Z → X)的闭包是等价的,因此 FD Z → X 不重要,可以从 FD 集合中移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z }
5a. 闭包 Z+ = ZYWX 使用 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 5b. 闭包 Z+ = ZWX 使用 FD = { W → X, Y → X, Z → W, WY → Z } 从 5a 和 5b,我们发现(包含 Z → Y 和排除 Z → Y)的闭包都不等价,因此 FD Z → X 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 6a. 闭包 WY+ = WYZX 使用 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 6b. 闭包 WY+ = WYX 使用 FD = { W → X, Y → X, Z → W, Z → Y } 从 6a 和 6b,我们发现(包含 WY → Z 和排除 WY → Z)的闭包都不等价,因此 FD WY → Z 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 由于 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 是结果 FD,现在我们检查了属性的冗余度,因为 FD WY → Z 的左侧有两个属性,让我们检查它们的重要性,即它们是否都重要,或者只有一个。 闭包 WY+ = WYZX 使用 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 闭包 W+ = WX 使用 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 闭包 Y+ = YX 使用 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z } 由于我们找到的 WY+, W+, Y+ 的闭包不都等价,因此在 FD WY → Z 中,W 和 Y 都是重要的属性,不能移除。 因此,结果 FD = { W → X, Y → X, Z → W, Z → Y, WY → Z },我们可以重写为 FD = { W → X, Y → X, Z → WY, WY → Z } 是 FD = { W → X, Y → X, Z → WXY, WY → Z } 的规范覆盖。 示例 3:给定一个关系模式 R( V, W, X, Y, Z) 和函数依赖集 FD = { V → W, VW → X, Y → VXZ }。找到规范覆盖? 解答:给定 FD = { V → W, VW → X, Y → VXZ }。现在使用分解规则(阿姆斯特朗公理)分解 FD。
现在 FD 集合 = { V → W, VW → X, Y → V, Y → X, Y → Z }。 下一步是通过包含该 FD 和排除该 FD 来找到给定 FD 的左侧的闭包。如果两种情况下的闭包相同,那么该 FD 是冗余的,我们将其从给定集合中移除,否则如果两种闭包不同,我们则不排除该 FD。 计算所有 FD { V → W, VW → X, Y → V, Y → X, Y → Z } 的闭包。 1a. 闭包 V+ = VWX 使用 FD = {V → W, VW → X, Y → V, Y → X, Y → Z} 1b. 闭包 V+ = V 使用 FD = {VW → X, Y → V, Y → X, Y → Z } 从 1a 和 1b,我们发现(包含 V → W 和排除 V → W)的闭包都不等价,因此 FD V → W 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { V → W, VW → X, Y → V, Y → X, Y → Z }。 2a. 闭包 VW+ = VWX 使用 FD = { V → W, VW → X, Y → V, Y → X, Y → Z } 2b. 闭包 VW+ = VW 使用 FD = { V → W, Y → V, Y → X, Y → Z } 从 2a 和 2b,我们发现(包含 VW → X 和排除 VW → X)的闭包都不等价,因此 FD VW → X 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { V → W, VW → X, Y → V, Y → X, Y → Z }。 3a. 闭包 Y+ = YVXZW 使用 FD = { V → W, VW → X, Y → V, Y → X, Y → Z } 3b. 闭包 Y+ = YXZ 使用 FD = { V → W, VW → X, Y → X, Y → Z } 从 3a 和 3b,我们发现(包含 Y → V 和排除 Y → V)的闭包都不等价,因此 FD Y → V 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { V → W, VW → X, Y → V, Y → X, Y → Z }。 4a. 闭包 Y+ = YXVZW 使用 FD = { V → W, VW → X, Y → V, Y → X, Y → Z } 4b. 闭包 Y+ = YVZWX 使用 FD = { V → W, VW → X, Y → V, Y → Z } 从 4a 和 4b,我们发现(包含 Y → X 和排除 Y → X)的闭包是等价的,因此 FD Y → X 不重要,可以从 FD 集合中移除。 因此,结果 FD = { V → W, VW → X, Y → V, Y → Z }。 5a. 闭包 Y+ = YZVWX 使用 FD = { V → W, VW → X, Y → V, Y → Z } 5b. 闭包 Y+ = YVWX 使用 FD = { V → W, VW → X, Y → V } 从 5a 和 5b,我们发现(包含 Y → Z 和排除 Y → Z)的闭包都不等价,因此 FD Y → Z 是重要的,不能从 FD 集合中移除。 因此,结果 FD = { V → W, VW → X, Y → V, Y → Z }。 由于 FD = { V → W, VW → X, Y → V, Y → Z } 是结果 FD,现在我们检查了属性的冗余度,因为 FD VW → X 的左侧有两个属性,让我们检查它们的重要性,即它们是否都重要,或者只有一个。 闭包 VW+ = VWX 使用 FD = { V → W, VW → X, Y → V, Y → Z } 闭包 V+ = VWX 使用 FD = { V → W, VW → X, Y → V, Y → Z } 闭包 W+ = W 使用 FD = { V → W, VW → X, Y → V, Y → Z } 由于我们找到的 VW+, V+, W+ 的闭包,我们发现 VW 和 V 的所有闭包都是等价的,因此在 FD VW → X 中,W 不是一个重要的属性,可以移除。 因此,结果 FD = { V → W, V → X, Y → V, Y → Z },我们可以重写为 FD = { V → WX, Y → VZ } 是 FD = { V → W, VW → X, Y → VXZ } 的规范覆盖。 结论:从以上三个例子,我们得出结论,规范覆盖/不可约函数依赖集遵循以下步骤,我们在计算规范覆盖时需要遵循这些步骤。 步骤 1:对于给定的 FD 集合,如果任何 FD 的右侧有多个属性,则使用分解规则(阿姆斯特朗公理)分解每个 FD。 步骤 2:现在创建一个新的 FD 集合,包含所有分解后的 FD。 步骤 3:通过包含该 FD 和排除该 FD 来找到给定 FD 的左侧的闭包。如果两种情况下的闭包相同,那么该 FD 是冗余的,我们将其从给定集合中移除,否则如果两种闭包不同,我们则不排除该 FD。 步骤 4:重复步骤 4,直到 FD 集合中的所有 FD 都完成。 步骤 5:在步骤 4 之后,找到结果 FD = { B → A, AD → C, C → B, C → D },这些 FD 不是冗余的。 步骤 6:检查属性的冗余度,通过选择 FD 集合中左侧有多个属性的 FD。假设一个 FD AD → C 的左侧有两个属性,让我们检查它们的重要性,即它们是否都重要,或者只有一个。 步骤 6 a:找到闭包 AD+ 步骤 6 b:找到闭包 A+ 步骤 6 c:找到闭包 D+ 比较步骤 (6a, 6b, 6c) 的闭包。如果 AD+, A+, D+ 的闭包不相等,那么在 FD AD → C 中,A 和 D 都是重要的属性,不能移除,否则,我们移除冗余的属性。 常见问题解答问题 1:定义 DBMS 中的规范覆盖术语。 答案:在数据库系统中,规范覆盖被定义为函数依赖的简化集合,它与原始集合等价,但包含最少数量的依赖关系,而不会丢失其原始身份。 问题 2:在 DBMS 中使用规范覆盖的必要性是什么? 答案:众所周知,DBMS 中的相应规范覆盖非常重要,因为它有助于我们简化选定的函数依赖集。
下一个主题事务处理概念 |
我们请求您订阅我们的新闻通讯以获取最新更新。