首页 > 数据库 >[ 数据库原理 ] 函数依赖关系

[ 数据库原理 ] 函数依赖关系

时间:2023-09-07 14:07:27浏览次数:52  
标签:关系 依赖 函数 数据库 依赖于 AB 属性

函数依赖概念

函数依赖是指关系中属性间的对应关系。

函数依赖是从数学角度来定义的,在关系中用来刻画关系各属性之间相互制约而又相互依赖的情况。函数依赖普遍存在于现实生活中,比如,描述一个学生的关系,可以有学号、姓名、所在系等多个属性,由于一个学号对应一个且仅一个学生,一个学生就读于一个确定的系,因而当“学号”属性的值确定之后,“姓名”及“所在系”的值也就唯一地确定了, 此时, 就可以称“姓名”和“所在系”函数依赖于“学号”,或者说“学号”函数决定“姓名”和“所在系”,记作:学号→姓名、学号→所在系。下面对函数依赖给出确切的定义。 定义如下: 设关系R(U,F),U是属性集,F是函数依赖集,令X、Y是U的两个子集 对于任意R的一个关系r,X的每一个具体值,Y都有唯一值与之对应 则,X决定函数Y,或Y函数依赖于X,记作X→Y(X是自变量,Y是因变量,一个X只能得到一个Y)

若X→Y且Y→X,则X↔Y 不依赖则是在箭头上画上斜线 简单说,若X→Y,那么在关系r上任意两个元组,若ti[X] = tj[X],那么ti[Y] = tj[Y],在这里就要联想到函数的单映射和双映射了。

函数依赖可以理解为属性之间的一种约束条件,它能够用于判断建立的关系表是否合理。

三种函数依赖关系

函数依赖分为:完全函数依赖部分函数依赖传递函数依赖

1. 完全函数依赖

设R为任一给定关系,X、Y为其属性集,若 X→Y,且X中的任何真子集X',都有 X'!→Y,则称 Y 完全函数依赖于 X。

白话文翻译一波:在函数依赖的基础上,我们的A属性是一个属性组,只有这个属性组中的全部属性才能确定唯一的B属性,A的任何一个子集都不可以。

简易例子:通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB. 比如(学号,课名)->成绩,而单独的学号或者课名都不能确定成绩,这就叫完全函数依赖。

2. 部分函数依赖 设R为任一给定关系,X、Y为其属性集,若 X→Y,且X中存在一个真子集X',满足 X'→Y,则称 Y 部分函数依赖于 X。

白话文翻译一波:和完全函数依赖相比,A属性组中的部分属性就能确定B属性,其它属性可有可无。

简易例子:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。 比如(学号,课名)->姓名,其实只要学号就可以了,这样的依赖就叫部分函数依赖。

2. 传递函数依赖 设R为任一给定关系,X、Y、Z 为其不同属性子集,若 X→Y,Y!→X,Y→Z,则有 X→Z,称为 Z 传递函数依赖于 X。

白话文翻译:如果A->B,B->C,并且B不能->A(防止直接A->C),那么我们可以得出结论A->C,叫做C传递函数依赖A。

简易例子:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么成C传递依赖于A 比如学号->系名,系名->系主任,并且(系名不能决定学号),所以系主任传递函数依赖学号。

<br>

:本文原创由 bluetata 发布于: https://bluetata.blog.csdn.net/ 转载请务必注明出处。

标签:关系,依赖,函数,数据库,依赖于,AB,属性
From: https://blog.51cto.com/bluetata/7396199

相关文章

  • sqlserver移植为Oracle笔记(更新,新增字段名;批量新增记录;日期查询;截取字串函数)
    下面是这两天在项目要sqlserver和oracle兼容的改造中测试出来的笔记:--sqlserver--更改主键字段名'ID'为'ID_'sp_rename  'tb_doc_cat_statistic.ID','ID_','column'--新增字段cat_codealtertabletb_doc_cat_statisticaddcat_codevarchar(100) --oracle--......
  • 编写求阶乘函数
    ​ ,计算并返回1!+2!+3!+……+n!的值。函数fact()实现计算并返回123*……*n的值;函数fun()实现计算并返回1!+2!+3!+……+n!的值;函数main()从后台获取整数n,调用函数fun(),输出结果并保留0位小数。#include<stdio.h>floatfact(floatm){floati,s=1;for(i=1;i<=m......
  • 【230908-3】同一直角坐标系中,分别作函数y=1/a^x,y=loga_(x-1/2)(a>0且a≠1)的图像如
    ......
  • 无涯教程-JavaScript - BITAND函数
    描述BITAND函数返回两个数字的按位"AND"。语法BITAND(number1,number2)争论Argument描述Required/Optionalnumber1Mustbeindecimalformandgreaterthanorequalto0.Requirednumber2Mustbeindecimalformandgreaterthanorequalto0.Required......
  • 无涯教程-JavaScript - BIN2DEC函数
    描述BIN2DEC函数将二进制数字转换为十进制。语法BIN2DEC(number)争论Argument描述Required/Optionalnumber您要转换的二进制数。Numbercannotcontainmorethan10characters(10bits).数字的最高有效位是符号位。其余的9位是幅度位。负数使用二进制补码表示......
  • Java Excel导入信息加入数据库
    0.导入依赖<!--EasyExcel依赖开始--><dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.2.1</version></dependency><!--EasyExcel依赖结束-->1.在controlle......
  • 测试type和isinstance两个函数,那个速度更加的快
    一、解决方案通过装饰器实现二、相关知识点isinstance()函数1.isinstance()函数是python中的一个内置函数,作用:判断一个函数是否是一个已知类型,类似type()。2.语法:isinstance(object,classinfo)参数:object:实例对象。classinfo:可以是直接或......
  • 无涯教程-JavaScript - BESSELJ函数
    描述BESSELJ函数返回贝塞尔函数Jn(x)。语法BESSELJ(X,N)争论Argument描述Required/OptionalXThevalueatwhichtoevaluatethefunction.RequiredNTheorderoftheBesselfunction.Ifnisnotaninteger,itistruncated.RequiredNotes如果x为非数值,......
  • 弹性数据库连接池探活策略调研(二)——Druid | 京东云技术团队
    前言在上一篇文章中,我们介绍了弹性数据库连接失效的背景,并探讨了HikariCP连接池探活策略的相关内容。在本文中,我们将会继续探讨另一个线上常用的连接池——Druid,并为您介绍如何在使用Druid时实现最佳实践的弹性数据库连接池探活策略。DruidDruid的版本迭代更新比较快,同时探活配置的......
  • 无涯教程-JavaScript - BESSELI函数
    描述BESSELI函数返回修改后的Bessel函数In(x),该函数等效于针对纯虚参判断的Bessel函数。语法BESSELI(X,N)争论Argument描述Required/OptionalXThevalueatwhichtoevaluatethefunction.RequiredNTheorderoftheBesselfunction.Ifnisnotaninteger,......