在我们学习数据库的范式之前,我们需要理解一下有关函数依赖的一些知识。

我们数据库中常说的函数依赖其实是数据依赖的一种,数据依赖除了函数依赖还有多值依赖连接依赖。其中最重要的是函数依赖

函数依赖的概念

函数依赖是关系模式中各个属性之间的一种依赖关系,是规范化理论中最为重要和基础的概念。

为了便于理解,直接通过以下一个例子进行讲解。

学生表
学号 姓名 专业名 性别 出生日期 本学期学分
42014601 小明 信管 2000-2-11 24
42014602 小红 电商 2001-8-7 24
42014603 二丫 财会 2001-9-4 24
42014604 狗蛋 物流 2002-10-18 24

我们观察以上的表,其中学号、姓名、性别、出生日期、本学期学分,这些我们可以看作是不同的属性,假设我们已知一个同学的学号为42014603,我们就可以得到这个人的姓名为二丫,专业为财会,性别为女等信息。

也就是说在此表中如果说已知了一个学号值,我们可以通过这个学号值查找到这个学号对应的唯一的姓名,也可以通过这个学号值得到唯一的专业名。

上面这种属性(属性组)属性(属性组)之间一对一的推导关系便为函数依赖

我们用一个“→”来表示这种函数依赖关系。即X→Y,其所表达的含义为Y依赖于X(注意是后依赖前)

例如:学号→姓名,学号→专业名,学号→性别,学号→出生日期,学号→本学期学分

几种特定的函数依赖

为了便于理解下面内容,我们用以下这个表作为例子。

学号 姓名 课程号 个人成绩
011 小马 020114 99

平凡函数依赖

定义: 设一个关系为R(U),X和Y为属性集U上的子集,当X → Y时,如果Y ⊂ X(也就是Y是X的子集) 那么称X→Y是平凡的函数依赖。(这时候的X一般为属性组,Y为单个属性或者属性组)

举例:(学号,姓名)→姓名

注意:如果有Y ⊂ X ,那么X → Y 一定成立。

解释:因为Y ⊂ X ,那么Y必然是X中的一部分,因为X确定了,那么自然其子集也确定了,因为整体可以决定部分。

特殊情况:Y有可能和X是一样的,因为子集可以包含自己本身,也就是自己推导自己。

非平凡函数依赖

定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖。

举例:

(学号、课程号)→个人成绩

相对于平凡函数依赖来说,非平凡函数依赖更为重要与常见

完全函数依赖

定义:一个关系模式R(U)中,X和Y为属性集U上的子集,如果X→Y,且对与X的任意一个真子集Z来说,Z→Y都不成立。

这个完全函数依赖我们分俩个情况理解,1.X为单个属性值,这时候X→Y,那么这个关系必定为完全依赖关系。2.X为属性组,也就是你用他的子集无法推导出Y,必须用整个X才行。

举例:1.单个属性:学号→姓名,这个依赖关系必是完全函数依赖,因为X没真子集。

 2.属性组:(学号,课程号)→个人成绩,其真子集有俩:学号和课程编号,如果只知道其中一个,是推导不出来个人成绩的,必须合在一起整体使用,所以是完全函数依赖。

部分函数依赖

定义:一个关系模式R(U)中,X和Y为属性集U上的子集,如果X→Y,对与X的真子集Z来说,存在一个Z→Y,那么X→Y为部分函数依赖。

举例:(学号,课程号)→姓名,此时X为属性组(学号,课程号)其真子集有俩个:学号、课程号,我们通过学号可以直接得到学生的姓名,也就是学号→姓名,所以(学号,课程号)→姓名为部分函数依赖

传递函数依赖

定义:一个关系模式R(U)中,X、Y、Z为属性集U上的子集,如果X→Y,Y不能反推出X,且Y→Z,这时候通过X可以推出Z,即X→Z,我们把X→Z称为传递函数依赖。

举例:

学号 所在系 系主任
0112 管理系 王老师

学号→所在系,所在系→系主任,所以学号→系主任为传递函数依赖。

快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)相关推荐

  1. 数据库中为什么叫“非平凡”的函数依赖Nontrivial Function Dependency? nontrivial的本意探讨

    定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖,否则若XY则必有X→Y,称此X→Y为平凡函数依赖. 例如:在一个职工关系中,职工号总能函数决定它 ...

  2. 快速理解数据库超键,候选键,主键

    先了解下对这三种关键码的定义如下: 键名 定义 超键 (super key) 在关系中能唯一标识元组的属性或属性集称为关键模式的超键 候选键 (candidate key) 不含有多余属性的超键称为候 ...

  3. 查缺补漏:集和与非平凡属性

    查缺补漏:集和与非平凡属性 前面的习题和知识点补充 Conjunctive normal form(CNF)是布尔逻辑的一种方法,它将公式表示为带有AND或or的子句的连词.由连词or AND连接的每 ...

  4. 关系数据理论(回顾关系模式、数据依赖、不规范的关系模式存在的问题、 函数依赖、非平凡函数依赖/平凡函数依赖、完全函数依赖/部分函数依赖定义、传递函数依赖,码)

    关系数据库的规范化理论是数据库逻辑设计的一个有力工具. 1.回顾关系模式         第2章中已经讲过,一个关系模式应当是一个五元组:                 R(U,D,DOM,F)   ...

  5. IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议

    1.前言 IM应用从服务端数据的角度来看,它是一种很特殊的应用场景,抛开基础数据.增值业务和附属功能不谈,单从IM聊天工具的立身之本--聊天数据来说,理论上是不需要在服务端存储的(或者说只需要短暂存储 ...

  6. 如何快速理解递归——蓝桥杯 试题 基础练习 FJ的字符串(递归与非递归解法)——10行代码AC

    励志用少的代码做高效的表达. 注意点: 1.规律 2.非递归解法:string重载了+=运算符,因此用string会方便很多.并且string动态扩充,防浪费,更高效. 3.递归解法:官方的标签就是递 ...

  7. FW:平凡(trivial)和非平凡(non-trivial)_拔剑-浆糊的传说_新浪博客

    1. 平凡(trivial)就是指最简单的情形,或者说是容易证明的.容易看到的.比如平凡群是只有一个元素的群,这是最简单的群的例子,也是"没什么意思"的群.     非平凡(non ...

  8. 【数据库】快速理解脏读、不可重复读、幻读

    快速理解脏读.不可重复读.幻读? 理解这三种由于并发访问导致的数据读取问题,再理解事务隔离级别就简单多了. [1]脏读(读取未提交数据) A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回 ...

  9. 理解数据库范式(转)

    理解数据库范式 系统是短暂的 数据是永恒的 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库.甚至设计出错误的数据库.而想要理解并掌握范式却并不是那么容易.教 ...

最新文章

  1. 设计模式(六)命令模式
  2. Xamarin Essentials教程地理定位Geolocation
  3. java选择排序百度_java选择排序
  4. gis怎么通过水库划分子流域_ArcGIS提取小流域——以北京为例,提取出密云水库...
  5. 03:数据结构 栈、队列、链表与数组
  6. VC跨进程数据(结构体)传递-WM_COPYDATA
  7. POJ 1321 棋盘问题(回溯)
  8. 【优化算法】粒子群优化算法(PSO)【含Matlab源码 1073期】
  9. 单片机控制无线传输模块nRF905之模块化编程
  10. 算法题6 b站扭蛋机
  11. 某音热门---图片转字符SpringBoot版
  12. 流氓软件自动安装恶意插件导致浏览器闪退问题
  13. JS返回前一页(或关闭本页面,返回首页)
  14. CSS 的弹性布局(flex) ,是什么?
  15. python 读取多个excel数据写入同一个excel中
  16. css多栏布局(双栏布局、三栏布局、圣杯布局、双飞翼布局)
  17. 太稳了!2020年益丰大药房又开1239家,营收高达131亿!
  18. 抖音炫酷时间罗盘,2D时间罗盘桌面(免费)用html,css和JavaScript实现
  19. UC缓存的php格式视频,如何把UC浏览器缓存的零碎视频转换成完整的mp4
  20. Junit4 Test Suit使用

热门文章

  1. /proc/sysrq-trigger说明
  2. push()、pop()、shift()、unshift()方法简单整理
  3. JS unshift() 方法
  4. 遍历map java_Java中怎么遍历map中value值
  5. Qt添加.qrc文件和设置exe图标和控件图标
  6. jquery中的循环技巧
  7. Error: At least one module has an unresolved import due to a missing export function in an implicitl
  8. 在Java中如何跳出当前的多重嵌套循环?
  9. 无人驾驶技术架构、方向及技能要求
  10. (ChatGPT)429 You are being rate limited