前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】软考高级-架构设计师 056-函数依赖

【愚公系列】软考高级-架构设计师 056-函数依赖

原创
作者头像
愚公搬代码
发布于 2024-07-02 14:45:20
发布于 2024-07-02 14:45:20
2160
举报

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、联网、络安全、数据、工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

数据库设计中的函数依赖(Functional Dependency,简称FD)是数据库理论中的一个核心概念,它是关系模型中用于描述属性之间关系的一种形式。函数依赖是构建关系模式,实施规范化过程,以及消除数据冗余和更新异常的基础。

简单来说,如果我们有一个关系模式R,并且在R中有两个属性集X和Y,我们说“Y函数依赖于X”(通常表示为X → Y),如果在R中的任何两个元组t1和t2,只要t1和t2在属性集X上的值相等,那么它们在属性集Y上的值也必须相等。这意味着X的值唯一决定了Y的值。

在数据库设计中,理解和识别函数依赖对于设计良好的数据库模式至关重要。通过应用规范化理论,我们可以根据函数依赖来分解关系模式,以减少数据冗余和更新异常。

规范化过程通常涉及以下范式:

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF)
  • 博伊斯-科得范式(BCNF)
  • 第四范式(4NF)
  • 第五范式(5NF)或完全范式(PJNF)

每一级范式都建立在前一级范式的基础上,并对模式中可能存在的函数依赖进行了更进一步的限制,以此来减少数据冗余和更新异常。在实际应用中,达到第三范式或BCNF通常就足够用来处理大多数的数据冗余问题了。

🚀一、函数依赖

🔎1.函数依赖的定义

你提供的关于函数依赖的说明有些混乱,下面我来帮你整理和澄清。

函数依赖是数据库设计中描述表中不同字段之间关系的一种方式。如果一个字段的值可以由另一个字段的值唯一确定,那么就说存在一个函数依赖关系。以下是对你提供的信息的整理:

  1. 函数依赖的定义
    • 如果在一个关系中,属性集X的值能够唯一确定另一个属性集Y的值,则称Y函数依赖于X,表示为X → Y。
    • 例如,在关系数据库中,假设有一个字段X和另一个字段Y,Y是X的平方(即Y = X * X)。在这种情况下,X的值(比如2)可以唯一确定Y的值(比如4)。但Y的值(比如4)不能唯一确定X的值,因为可能有两个X的值(+2或-2)的平方都是4。
  2. 部分函数依赖
    • 当存在一个属性集合(A,B)能决定另一个属性C,并且其中一个子集(比如单独的A)就足以决定C时,称C部分函数依赖于(A,B)。
    • 在这种依赖关系中,属性C依赖于属性集合的一部分(A),而不是整个集合(A,B)。这意味着B是不必要的,我们可以移除B而不影响确定C的能力。
  3. 传递函数依赖
    • 如果有两个函数依赖关系A → B和B → C,并且A与B不是同一个属性或属性集,那么可以说C传递函数依赖于A。
    • 这意味着A的值可以间接决定C的值,通过B作为中间步骤。如果A和B是相同的,那么我们只有一个直接的函数依赖A → C,而没有传递依赖。

理解这些概念对于数据库规范化非常重要。规范化过程旨在消除数据的冗余,避免更新异常,并提高数据的一致性和完整性。通过识别并处理部分函数依赖和传递函数依赖,我们可以将数据库设计到更高的规范化范式,如第二范式(2NF)和第三范式(3NF)。

🔎2.函数依赖公理系统

在数据库理论中,函数依赖的公理系统是用来推导关系模式中所有可能的函数依赖的一组规则。这个公理系统是由阿姆斯特朗(Armstrong)在1974年提出的,因此通常也被称为“阿姆斯特朗公理”。这些公理用于在设计数据库时帮助理解和应用函数依赖的概念,以此实现数据库的规范化设计。

阿姆斯特朗的公理包括以下三条基本规则:

  1. 自反性规则(Reflexivity rule): 如果Y是X的一个子集,那么X可以决定Y。即,如果Y ⊆ X,则X → Y。
  2. 增强性规则(Augmentation rule): 如果X可以决定Y,那么X与任何其他属性集Z的联合也可以决定Y与Z的联合。即,如果X → Y,则对于任何属性集Z,有XZ → YZ。
  3. 传递性规则(Transitivity rule): 如果X可以决定Y,且Y可以决定Z,那么X也可以决定Z。即,如果X → Y 且 Y → Z,则X → Z。

除了这三个基本规则,还有一些可以由基本规则派生出来的附加规则,这些规则有助于进一步推导函数依赖:

  • 并集规则(Union rule): 如果X → Y 且 X → Z,则X → YZ。
  • 分解规则(Decomposition rule): 如果X → YZ,则X → Y 且 X → Z。
  • 伪传递性规则(Pseudo-transitivity rule): 如果X → Y 且 WY → Z,则XW → Z。

使用这些公理,数据库设计者可以推断出所有在关系模式中适用的函数依赖,这对于执行规范化过程并设计一个没有冗余和更新异常的数据库结构至关重要。通过应用这些规则,设计者可以确定数据应如何被组织成表格,以及这些表格如何相互关联。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我所理解的 Go 的 GC (Garbage Collection) 垃圾回收机制
Go 语言(Golang)作为一款内置运行时的现代编程语言,其垃圾回收(Garbage Collection, GC)机制是开发者理解其性能和行为的关键一环。要深入理解 Go 的 GC,我们首先需要明确垃圾回收的核心任务是什么,以及它在设计上需要面对哪些权衡与博弈。
Piper破壳
2025/05/27
1830
我所理解的 Go 的 GC (Garbage Collection) 垃圾回收机制
Go高阶15,垃圾回收、三色标记原理,终于能跟面试官扯皮了!
垃圾回收(Garbage Collection,简称GC)是编程语言中自动的内存管理机制,垃圾回收,垃圾指的是不再需要的内存块,如果不及时清理就没有办法再利用。
微客鸟窝
2021/09/10
1.5K0
Go语言垃圾回收详解
Go语言的垃圾回收器是并发的,并采用了三色标记清除(Tri-color Mark and Sweep)算法。这种算法能够在程序运行过程中,并发地进行垃圾回收,以此来减少GC对程序执行的干扰。
运维开发王义杰
2023/08/10
5510
Go语言垃圾回收详解
图文结合,白话Go的垃圾回收原理
前面两篇文章介绍了Go语言的内存分配策略以及Go协程动态扩充和收缩栈内存的原理,今天这篇文章我们主要来聊一下内存管理的另外一大块内容:垃圾回收。
KevinYan
2020/11/02
8491
图文结合,白话Go的垃圾回收原理
揭秘Go语言GC(垃圾回收)的技术演进
垃圾回收(Garbage Collection,简称GC)是现代编程语言中的重要特性之一,它可以自动地管理内存,帮助开发人员避免内存泄漏和悬空指针等问题。Go语言(Golang)作为一门以效率和并发性为特点的编程语言,也采用了一种高效的垃圾回收机制来管理内存,让开发者能够专注于业务逻辑而不必过多关心内存管理的问题。
程序员小饭
2023/09/06
1.2K0
揭秘Go语言GC(垃圾回收)的技术演进
Go 运行时面试题
在 Go 语言中,goroutine 是一种非常轻量级的执行线程。goroutine 是 Go 语言并发模型的核心,允许同时执行多个函数调用。goroutines 在 Go 运行时环境中被多路复用到少量的操作系统(OS)线程上,以实现高效并发。
Lemon黄
2023/12/13
4320
Go 运行时面试题
GO进阶(5) 垃圾回收机制
      编程语言通常会使用手动和自动两种方式管理内存,C、C++ 以及 Rust 等编程语言使用手动的方式管理内存,工程师需要主动申请或者释放内存;而 Python、Ruby、Java 和 Go 等语言使用自动的内存管理系统,一般都是垃圾收集机制。这是Go语言成为高生产力语言的原因之一。将开发者从内存管理中释放出来,让开发者有更多的精力去关注软件设计,而不是底层的内存问题。
黄规速
2023/03/06
1.1K1
GO进阶(5) 垃圾回收机制
深入解析java虚拟机:垃圾回收,最大并发标记清除垃圾回收器
CMS GC的全称是最大并发标记清除垃圾回收器(Mostly Mark andSweep Garbage Collector),可以使用-XX:+UseConcMarkSweepGC开启。CMS GC的新生代清理仍然使用与Parallel GC类似的方式,即开启多个线程一起清理,且在这个过程中,Mutator线程不能工作。从算法上来说,该过程与Serial GC、Parallel GC的YGC完全一致;从逻辑上来说,该过程与Parallel GC的Young GC几乎一致,所以这里不再赘述。不同点是CMS GC多了个专门针对老年代的Old GC,图10-8简单说明了Old GC的概念。
愿天堂没有BUG
2022/10/28
5130
深入解析java虚拟机:垃圾回收,最大并发标记清除垃圾回收器
Go 内存管理 -- 垃圾回收
go作为一个非常年轻的语言,吸取了各个语言的优点,比如说Java中优秀的垃圾回收,来释放程序员一部分精力。 本篇要说的就是垃圾回收,常见的垃圾回收算法有标记-清除、标记整理、复制,然后在这些算法基础上有分为分代&非分代回收,这些算法都非常优秀,只是面对的场景不同罢了,但是要是想透彻的理解垃圾回收,看Java中的实现再合适不过了,如果能对于Java中的垃圾回收非常熟悉,理解go的垃圾回收将非常简单。 go中的垃圾回收官方是这么描述的:非分代的、非紧缩的、写屏障的并发标记清除的垃圾回收。
邹志全
2019/07/31
1K0
每位 Gopher 都应该了解的 Golang 语言的垃圾回收算法
关于垃圾回收,比较常见的算法有引用计数、标记清除和分代收集。Golang 语言使用的垃圾回收算法是标记清除。本文主要介绍一下 Golang 语言的垃圾回收算法。
frank.
2021/02/07
1.5K0
吐血整理的垃圾回收知识
今天的肝货来了,作者已经肝吐血了,看书查资料整理了8000字的垃圾回收相关知识,虽然很长,可能会花费你20分钟左右的阅读时间,但是看完相信你一定会有很大的收货,诶,周末又没有了,心好痛。
Java宝典
2021/01/14
6470
吐血整理的垃圾回收知识
JVM垃圾回收的 “三色标记算法” 实现,内容太干!
三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器所使用垃圾回收算法即为三色标记法。
程序猿DD
2023/04/04
8880
JVM垃圾回收的 “三色标记算法” 实现,内容太干!
一文搞懂Go语言垃圾回收机制
垃圾回收(Garbage Collection, GC)是现代编程语言管理内存的核心机制之一。Go语言凭借其高效的并发模型和简洁的内存管理设计,在服务端开发、云计算等领域广受欢迎。这篇文章我就带大家从原理、实现到调优,详细解析Go语言的垃圾回收机制。
闫同学
2025/04/22
2000
JVM 垃圾回收算法和 CMS 垃圾回收器
本文核心主要是讲述:JVM 中的几种垃圾回收算法理论,以及多种垃圾收集器,并且详细参数 CMS 垃圾收集器的实现、优缺点等,最后也会解释一下三色标记法与读写屏障。
没有故事的陈师傅
2022/02/09
9820
JVM 垃圾回收算法和 CMS 垃圾回收器
Golang的垃圾回收
最近垃圾分类的话题热度一下子就上去了,很多人因为垃圾分类的问题很头痛。因为垃圾这个话题,那我就想来说说Golang里面的垃圾,于是就有了这篇博客,golang中的垃圾回收。
LinkinStar
2022/09/01
6970
Golang的垃圾回收
Golang垃圾回收机制
由于STW会影响程序的性能,因此将步骤3和步骤4的顺序调换,让步骤3的垃圾清除步骤与程序同时进行,能够减小STW的时长。
TomatoCool
2023/07/30
2730
Golang垃圾回收机制
深入Go:垃圾回收的演进
Stop the world 是讨论垃圾回收(Garbage Collection,GC)时绕不开的话题,曾经Go语言的GC机制也威胁着服务的响应时间——Discord技术团队的文章Why Discord is switching from Go to Rust讨论了Go语言GC带来的问题。Go通过版本迭代已经极大地改善了GC的问题,平均每次STW时间从100+ms降低到了0.5ms——是什么神奇的魔法使得世界几乎无需暂停?在本文中,我们通过提问、解答的方式尝试对该演进的主要过程进行梳理。
wenxing
2021/12/10
1.5K0
简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 上
本文想和大家简单聊聊G1垃圾回收算法的设计思路和具体细节实现,受限于笔者个人实力,可能存在部分错误,如果发现了错误或者有补充说明的,可以在评论区留言或者私信与我讨论。
大忽悠爱学习
2023/10/11
2.7K0
简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 上
Golang垃圾回收 屏障技术
垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。
养码场
2019/09/08
2.5K0
Go GC 20 问
本文作者欧长坤,德国慕尼黑大学在读博士,Go/etcd/Tensorflow contributor,开源书籍《Go 语言原本》作者,《Go 夜读》SIG 成员/讲师,对 Go 有很深的研究。Github:@changkun,https://changkun.de。
梦醒人间
2020/02/13
1.3K0
Go GC 20 问
相关推荐
我所理解的 Go 的 GC (Garbage Collection) 垃圾回收机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档