首页 > 数据库 >数据库系统------函数依赖与范式

数据库系统------函数依赖与范式

时间:2024-10-03 20:33:10浏览次数:4  
标签:闭包 候选 依赖 范式 函数 ------ 数据库系统 属性

码属性和非码属性

在讲函数依赖和范式前,我们需要了解码属性和非码属性

码属性就是构成候选码的属性,非码属性就是不构成候选码的属性,主属性是指构成主码的属性

候选码是能够确定关系R的最小属性集合,可以有多个,即多种匹配方法,超码就是一个候选码随便加上另一个属性,主码就是候选码中选一个来当,所以主属性也是码属性

函数依赖

基本介绍

函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。

这句话看起来比较抽象,简单来说,就是我在设计表的时候,给这个表加了个函数依赖,那么这个表的所有实例都必须遵守这个函数依赖

那函数依赖是什么呢?其实很简单,他就是用来表示表中各个属性之间的依赖关系的

比如说,我有一个表模式 R=(A, B, C),函数依赖可以是这样子 A -> C,这就表示属性A可以决定C,换句话说就是,当A的值确定后,C的值也必须确定

是不是很像数学上的函数,事实上它就是这么一回事,用函数的形式表示属性间的依赖关系,就是函数依赖了

还需要注意的是,AB -> C 这个的意思是属性A和属性B结合,可以确定C,这是一种简写的方式

所以我们还能够知道,如果说对于函数依赖 A -> C,A的值绝对不能重复,因为一重复,你就没法确定C值了,也就不符合函数依赖的定义了

还要注意的是以下两种特殊情况

  • 函数依赖可以确定关系R,如K -> R,这个意思就是K就是码属性的集合了
  • 函数依赖为空集,即没有函数依赖,表示所有属性结合起来确定关系R,即所有属性都是码属性

我们再来看看,用函数依赖表示超码是怎么样的吧
1

再看看补码,这里就是在超码的基础上,加了个限制,那就是任何K的子集,都不能确定关系R,换句话说,就是补码是最小的超码
2

类型

平凡函数依赖

4

比如说,AB -> A AB -> B A -> A这三个就是平凡依赖,这是自然成立的,不需要推导,这是因为当你选中一个元组,里面包含,属性A和属性B时,自然就确定了属性A和属性B,没啥好说的

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

在关系R中,X属于R,Y属于R,并且X->Y,若对于X的任意一个真子集X1,都不满足X1->Y,则称Y完全函数依赖于X,反之,则称Y部分函数依赖于X

完全函数依赖记作,f 表示 full
5

部分函数依赖记作,p 表示 part
6

两个的区别就是,能不能找到一个真子集让Y依赖于这个真子集

传递函数依赖

在关系R中,X->Y, Y->Z,且Y不属于X,也不依赖于X,则称Z传递函数依赖于X,若Y依赖于X,即X<-->Y,则称Z直接函数依赖于X

闭包

函数依赖集的闭包

7

这三个是基本规则,自反性、增广性(扩容)、传递性

由这三个可以推出以下的几个规则
8

求闭包的算法
9

翻译一下,就是先初始化,F+ =F,然后对闭包中的每个函数依赖进行自反和增广(简称扩容),然后对扩容的闭包进行传递,就是组合称新的函数依赖,然后就一直重复这个过程,知道闭包不在改变

属性集的闭包

10

属性集的闭包是依赖于某个函数依赖集的,并不能单独成立

闭包的求法
11

算法挺简单的,就是把能推导出来的属性加到result集合中就行了

可以用属性集的闭包判断候选码,如果这个属性集的闭包覆盖了所有属性,那它就一定是超码,如果这个属性集的任何真子集的闭包没法覆盖所有属性,那它进一步成为候选码

范式

13

1NF

第1范式就是要求关系的所有属性都是原子的即可,简单来说,每个属性包含的信息要尽量精简,就是分到不能再分的意思

2NF

第2范式要求非码属性完全函数依赖于候选码,消除了非码属性的部分函数依赖,可能还存在传递函数依赖

3NF

第3范式要求每一个非码属性既不部分函数依赖也不传递函数依赖于候选码,消除了非码属性的部分函数依赖和传递函数依赖

如果关系R中的每个属性都是码属性,那么关系R是3NF

BCNF

BC范式要求对于每个函数依赖X->Y,如果Y不是X的子集,那么X必须含有候选码。换句话说,如果满足条件,那么X是超码

如果函数集为空集,即R中的每个属性都是码属性,那么关系R是BCNF

没有非平凡函数依赖,表示数据高度独立,即属性之间没有复杂的依赖关系,相当于函数依赖为空集

依赖保持

16

简单来说,就是分解之后的表的函数依赖集的并集要和原来的表的函数依赖集相等

标签:闭包,候选,依赖,范式,函数,------,数据库系统,属性
From: https://www.cnblogs.com/dylaris/p/18445924

相关文章

  • 【VBA】シート数を取得する【Sheets.Countで取得できます】
    参考元:【VBA】シート数を取得する【Sheets.Countで取得できます】https://daitaideit.com/vba-sheet-count/「Sheets.Count」でシート数を取得SubTEST1()'シート数を取得Debug.PrintSheets.CountEndSubシート数を取得する場面シート数を取得できれば、次......
  • 【VBA】シート名を検索する【完全一致と部分一致の検索ができます】
    参考元:【VBA】シート名を検索する【完全一致と部分一致の検索ができます】https://daitaideit.com/vba-sheet-search-name/シート名が一致したらシート名を色付け「Sheet2」を検索して、一致したシートを色付けするという感じです。SubTEST3()Fori=1ToShee......
  • SpringBoot中,如何把自定义的yml配置文件中的内容和对应类的bean对象取出
    首先yml文件中的自定义配置如下login-type-config:types:k1:"yuheng0"k2:"yuheng1"我们有两个对应的类,yuheng0和yuheng1,他们都实现了say接口,并且重写了say方法。下面要通过请求k1k2获取yuheng0和yuheng1类的bean对象。注意,要记得加上Component注解......
  • 十、特殊应用:人脸识别和神经风格转换
    1、One-Shot学习(One-shotlearning)  人脸识别所面临的一个挑战就是需要解决一次学习问题(one-shotlearningproblem),这意味着在大多数人脸识别应用中,你需要通过单单一张图片或者单单一个人脸样例就能去识别这个人。而历史上,当深度学习只有一个训练样例时,它的表现并不好。  要......
  • ABC373 E/F
    ABC373E/FE-HowtoWintheElection二分答案比较好想,可是细节有点多,复杂度$O(n\log^2n)$。一开始忘了一个特判,狂WA不止,然后调完再交,直接破防,WA一个点。接着尝试去卡,不知道怎么想的,粘错代码了。还剩半个小时,非常忙碌地调代码,但是不知道在忙什么。赛后找到正确代码,调过h......
  • 【VBA】シートを並び替える【バブルソートを使ってMoveで移動する】
    参考元:【VBA】シートを並び替える【バブルソートを使ってMoveで移動する】https://daitaideit.com/vba-sheet-sort/手順としては、次のようになります。基準のシートを「1~4番目」でループ比較シートを「基準+1番目~最終シート」でループ右側のシートが小さい場合は、......
  • 表情包
    创建于8.1updatedon10.3:整理博客时发现这个了,当时不敢发,现在没啥问题了吧,毕竟涉及人员都【数据删除】了,遂发布。整理博客发现欧耶!https://img2024.cnblogs.com/blog/3365934/202407/3365934-20240725151423252-219730277.png害羞起飞呦哒咩......
  • 2024/10/03
    \(100+20+0+55=175\),T4数组开小挂了\(45\),T3暴力写挂挂了\(20\)#A.旋律的总数这真的是提高组的题吗不考虑同构有\(m^n\)种排法,一种同构的排法可以偏移\(m\)次,直接相除得到答案\(m^{n-1}\)//BLuemoon_#include<bits/stdc++.h>usingnamespacestd;usingLL=l......
  • 【VBA】シートコピーの繰り返しで同じシートを複数作成【Copyをループする】
    【VBA】シートコピーの繰り返しで同じシートを複数作成【Copyをループする】シート名をリストから取得して同じシートを複数作成元シートとリストを作成しておくリストを作成しておきます。シート名をリストから取得して同じシートを複数作成SubTEST3()......
  • VulnHub2018_DeRPnStiNK靶机渗透练习
    据说该靶机有四个flag扫描扫描附近主机arp-scan-l扫主目录扫端口nmap-sS-sV-n-T4-p-192.168.xx.xx结果如下StartingNmap7.94SVN(https://nmap.org)at2024-09-3019:25CSTNmapscanreportfor192.168.93.131Hostisup(0.0024slatency).Notshown:......