函数依赖与模式分解

简介:

亚信的三面,曾被问到对数据库范式的理解,记得当时答得真的是一塌糊涂。现在借此机会来重温和复习一下。(简要说明一下,因为字符的关系,在本文里 ∈有时代表”属于“,有时代表”真包含“的意思,不便之处,敬请谅解)

函数依赖

函数依赖是一个从数学理论中派生的术语,它指明属性中的每一个元素(在某些行中),存在唯一一个元素(在同一行中)与之对应。假设关系表 T 中的行(元组)被记为r1,r2….rn,表中的每一个属性(列)被记为A、B….,字母 X、Y,…记为属性的子集。

用数学理论来解释就是对于至少存在两个给定属性A、B 的表 T,我们可以说 A → B。箭头 → 称作“函数决定”。(类比函数f(x),在函数的定义域里,给定一个 x 的值,就决定了 y 的值,不同是,函数依赖关注的是一个属性或一个属性集与另一个属性或属性集之间的依赖关系)。在函数里,当x1 = x2 时,可以推到出 f(x1) = f(x2),类似的可以这样理解,在表 T 中,已知两行 R1 和 R2,如果 R1(A) = R2(A),则可以推导出 R1(B) = R2(B)。

平凡依赖/非平凡依赖

对于 A → B,当 B 是 A 的一个子集,则该函数称为 平反依赖。如 {S#,C#} → {C#}。

所有关系都满足平法依赖,如包含属性集 X 的所有关系都会满足 X → X。平凡依赖在实际设计中是不使用的,通常,我们会通过消除平凡依赖来减少函数依赖的数量。当 B 不是 A 的子集时,我们称其为 非平反函数依赖。

完全函数依赖/部分函数依赖

完全函数依赖 用来表名函数依赖的决定因子的最小属性集(附:在函数依赖里,把左侧叫做 决定因子,右侧叫做 依赖因子。类似在函数里,把 x 叫做 变量,把 y 叫做 因变量。)。

属性集 Y 完全函数依赖于属性集 X,需要满足一下条件:

1)X → Y(Y 函数依赖于 X)

2)Y 不函数依赖于 X 的任意真子集

反过来说,当 X → Y,而又存在(X’ 为 X 的某一个真子集)X’ → Y 时,这时我们称其为 部分函数依赖。当 Y 部分函数依赖于 X 时,即根据 X 中的“部分”属性就可以确定对 Y 的关联,从数据依赖的观点看,X 中存在“冗余” 的属性。

传递与直接函数依赖

设有两个非平凡函数依赖 X → Y,Y → Z,当 X 不依赖于 Y,则称 Z 传递函数依赖于 X。

这里之所以规定" X 不函数依赖于 Y”,是因为当 Y → X 时,X 与 Y 就一一对应了,在这种情况下 Z 就直接函数依赖于 X(而不是我们所说的传递函数依赖)。

Z 传递函数依赖于 X,表名 Z 间接依赖于 X,从而表明 X 和 Z 之间关联较弱。

函数依赖的 Armstrong 公理

无冗余的函数依赖集 和 函数依赖的完备集(闭包)是好的关系设计。由已知的函数依赖集可以推导出无冗余的函数依赖集 和 函数依赖的完备集(闭包)。

在此先说一下 Armstrong 的基本公理和推理规则:

基本公理:

1)(自反律)如果 Y ∈ X∈ U,则 X → Y 成立。(平凡函数依赖)

2)(增广律)如果 X → Y 在 R(U)  成立,且 Z∈ U,则 XZ → XY

3)(传递律)如果 X → Y,Y → Z 成立,则 X → Z 成立。

推理规则:

1)(合并):{X → Y,X → Z},则 X → YZ

2)(分解):{X → Y,Z ∈ Y},则 X → Z。(或:X → YZ,那么 X → Y,X → Z)

3)(伪传递):{X → Y,YW → Z},则 WX → Z

4)(复合):{X → Y,W → Z},则 XW → YZ

5)(自积律):{X → YZ,Z → W},则 X → YZW

对于 Armstrong 公理系统,为了进一步的了解,我们还需要深入的了解一下 属性集闭包 和 函数依赖集闭包。

属性闭包

概念:设 F 是属性集合 U 上的一个函数依赖集,X ∈ U,称 X+ = { A|A∈U,X → A 由 F 按照 Armstrong 公理系统推导得到 } 为属性集的 x 关于 F 的闭包。

举个例子:设有关系模式 R(U,F),U = ABC,F={A→B,B → C},则有 A 的闭包 A+ = ABC,B+=BC,C+=C。

函数依赖闭包和属性集闭包

一般来说,我们很少会求函数依赖闭包,因为这样会产生大量“无意义”或者意义不大的函数依赖。多数时候,我们关心的只是 F+ 的一个子集,常常伴随的问题是某函数依赖 X → Y 是否在 F+中。而求解这个问题的解决方式,通常是求在 F 下,属性集合 X 的闭包 X+(至于其证明,有兴趣的可以查阅一下相关资料)。

在这里只谈一下如何求解 X 的属性闭包:

1)设置初始值:令X(0) = ?,X(1)= X,F’=?。

2)若X(0)≠X(1),令 X(0)=X(1)。否则转向 4)。

3)构造函数依赖集合 F’={Y→Z | (Y→Z)∈F∩Y∈X(1)},令 F = F – F’,对于其中的每个函数依赖 Y→Z,令X(1) = X(1)∪Z,转向 2)。

4)输出 X(1),它就是X+

最小函数依赖集

概念:对于函数集 F ,称函数集Fmin 为F 的最小函数依赖集,如果 Fmin满足一下条件:

1)Fmin与 F等价:Fmin+=F+

2)Fmin中每个函数依赖 X→Y 的依赖因素为单元素集,即Y中只含有一个属性集合。

3)Fmin中每个函数依赖 X→Y的决定因素不存在冗余,即既要删除X中任何一个属性,就会改变Fmin的闭包。

4)Fmin中每个函数毒不是冗余的,即删除 Fmin 中任意一个函数依赖,就会改变Fmin 的闭包。

无损分解

概念:无损分解指的是对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来。反之,则称为有损分解。

这里解释一下:“损”代表了信息的丢失的丢失,可能发生的情况是:分解后的关系模式通过自然连接合并,原有元组丢失或增加了无意义的元组,此情况记为“损”。在实际应用当中,我们希望通过自然连接之后可恢复原有关系模式,既不减少也不增加新的元组。那如何才可以做到无损分解呢??答案是:保持原有关系模式的函数依赖

保持函数依赖的分解

分解需要保持函数依赖,因为 F 中每一个函数依赖都代表数据库的一个约束。如果模式分解不保持函数依赖,那在模式分解中就会丢失一些函数依赖。注意:这里保持原有的函数依赖,包括了通过原有函数依赖推到出来的函数依赖,可以理解为保持原有函数的 F+



本文转自peiquan 51CTO博客,原文链接:

http://blog.51cto.com/peiquan/1425012
相关文章
|
并行计算 算法 异构计算
antv/g6之图布局及切换布局
antv/g6之图布局及切换布局
1916 0
判断是否保持函数依赖的方法
判断是否保持函数依赖的方法
763 2
|
传感器 人工智能 机器人
【01】人形机器人研究试验-被有些网友痛骂“工业垃圾”“人工智障”上春晚的人形AI机器人-宇树科技机器人到底怎么样??-本系列优雅草卓伊凡亲自尝试下人形机器人的制造-从0开始学习并且制作机器人-可以跟随卓伊凡
【01】人形机器人研究试验-被有些网友痛骂“工业垃圾”“人工智障”上春晚的人形AI机器人-宇树科技机器人到底怎么样??-本系列优雅草卓伊凡亲自尝试下人形机器人的制造-从0开始学习并且制作机器人-可以跟随卓伊凡
926 1
【01】人形机器人研究试验-被有些网友痛骂“工业垃圾”“人工智障”上春晚的人形AI机器人-宇树科技机器人到底怎么样??-本系列优雅草卓伊凡亲自尝试下人形机器人的制造-从0开始学习并且制作机器人-可以跟随卓伊凡
|
存储 自然语言处理 算法
【北京大学 软件工程】四、结构化分析方法
结构化分析方法是一种系统化的软件开发方法学,旨在通过使用问题域术语建立系统的功能模型,以明确“系统必须做什么”。该方法包括结构化分析、设计和程序设计三个主要部分。其核心工具是数据流图(DFD),用于表达系统功能模型,并结合数据字典定义数据流和数据存储。此外,还使用加工小说明(如判定表或判定树)描述加工逻辑。 结构化分析过程遵循自顶向下、逐步求精的原则,首先建立系统环境图确定边界,然后通过分解加工、分派数据流和引入文件来细化模型。整个过程中需确保模型平衡和信息组织的复杂性控制。最终输出为需求规格说明书(SRS),确保需求的正确性、无二义性、完整性和可验证性等特性。
1524 1
|
机器学习/深度学习 人工智能 算法
量子计算与人工智能的融合:智能计算的新篇章
【9月更文挑战第22天】量子计算与人工智能的融合正开启智能计算的新篇章。通过利用量子计算的独特优势,人工智能领域将迎来前所未有的性能提升和全新可能性。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,量子计算与人工智能的融合将引领一场科技革命,为人类社会的发展和进步做出更大贡献。
|
存储 分布式数据库 数据库
【软件设计师—基础精讲笔记3】第三章 数据库系统
【软件设计师—基础精讲笔记3】第三章 数据库系统
480 0
【中级软件设计师】—(下午题)试题三精讲总结(四十二)
【中级软件设计师】—(下午题)试题三精讲总结(四十二)
|
存储 开发工具 Windows
关于Visual Studio相关软件(本文采用Visual Studio2019举例)二次安装时,无法更改安装路径的解决办法之一
前言: ● 作者在对电脑磁盘分区后,二次搭载Visual Studio2019编译环境在重新指定安装路径时遇到了无法更改安装路径的问题。现在就解决问题办法之一进行分享(作者水平有限,目前仅了解到这一种解决办法) ●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!
1313 0
关于Visual Studio相关软件(本文采用Visual Studio2019举例)二次安装时,无法更改安装路径的解决办法之一
|
安全 Linux 数据安全/隐私保护
SELinux详解
SELinux详解
629 0
|
前端开发 Java 对象存储
使用Feign接口实现文件上传的解决方案
一般的情况下,后端有个微服务,暴露出一个文件上传的restful接口给前端,前端调用该接口获取上传后的链接以及oss key值完成上传。假设提供restful接口的这个服务叫做A,现在有个微服务B有个本地文件,需要将本地文件调用A文件文件上传接口上传到文件服务器,该如何做?
432 0