【数据库基础】详解函数依赖与键【码】
2017-11-10 21:46
375 查看
在上一篇关于范式的文章里提到了在学习范式前应先了解函数依赖与键的定义,所以这篇文章存在的意义就是为之前的做铺垫 ORZ
在了解函数依赖前,首先要明白数据依赖的概念。
数据依赖:是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,数据依赖是现实世界属性间相互联系的抽象,属于数据内在的性质。其中最重要的是函数依赖和多值依赖。
依旧是直戳目录空降相关知识点 ↓↓↓
函数依赖
定义
几种特殊的函数依赖
平凡函数依赖与非平凡函数依赖
完全函数依赖与部分函数依赖
传递函数依赖
键
外键
小结
首先我们仍要给出一张数据表,该表涵盖我们所要记录的所有属性
该关系模式为:
SLC(Sno,Sname,Sdept(所在系),Loca(住处),Cno(课程号),Grade(成绩))
· 其中X称为这个函数依赖的决定属性组,或称为决定因素,Y称作被决定因素。
· 若Y不函数依赖于X,记作X->(×)Y (ps:仅在本博客中这样表示),若X->Y,且Y->X,则记作X<–>Y。
简单来说,在设计学生表时,一个学生的学号能决定学生的姓名,即可称姓名属性依赖于学号,这就是一个函数依赖。
对于函数依赖,值得注意以下几点:
①函数依赖不是指关系模式R中的某个或某些关系满足的约束条件,而是指R的所有关系均要满足的约束条件。
②函数依赖是语义范畴的概念,只能根据语义来确定一个函数依赖。例如,Sname->Sno这个函数依赖只有在学生不重名的情况下才能成立,如果允许有重名学生,则Sno就不能函数依赖于Sname。
③如果设计者利用强制性规定(比如不允许同名学生存在)以满足需要的函数依赖关系,那么在以后的数据库操作中必须遵循该规定,不然系统将拒绝执行命令。
· 当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
例如在关系模式SLC中,(Sno,Cno)->Grade是非平凡数据依赖,(Sno,Cno)->Cno是平凡函数依赖。
显然,对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明,总是谈论非平凡函数依赖。
· 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X,记作X->(p)Y。
例如在关系模式SLC中,(Sno,Cno)->(f)Grade是完全函数依赖;(Sno,Cno)->(p)Sname是部分函数依赖。
在此加上条件Y->(×)X,是因为如果X->Y,Y->X,则X<–>Y,实际上就是X直接函数依赖于Z,而不是传递函数依赖。
例如在关系模式SLC中,由于Sno->Sdept,Sdept->Loca,所以Sno->(t)Loca是传递函数依赖。
· 包含在任何一个候选键中的属性,称为主属性。其余称为非主属性或非键属性。最简单的情况是单个属性是键,最极端的情况是整个属性组是键,称为全键。
例如在关系模式SLC中,若规定学生不允许重名,则(Sno,Cno)、(Sname,Cno)是候选键,Sno,Sname,Cno是主属性,其余为非主属性。
再举一个全键的例子:在关系模式签约(演员,制片公司,电影名)中,假设某个演员可以参加不同电影的拍摄,某部电影有不同的演员参与拍摄,某个制片公司可以和不同的演员签约拍摄不同的电影,那么想要唯一地确定该关系中的一个元组,必须给出每一个属性的值,所以这个关系的键为(演员,制片公司,电影名),即全键。
例如对于关系模式S(Sno,Sname,Sdept)和L(Sdept,Loca),Sdept不是关系S的键,却是关系L的键,则Sdept是S关系的外键。
需要注意的是,上述提到的X不是R的键,并不是说X不是R的主属性。X不是键,但可以是键的组成属性,或者是任意候选键中的一个主属性。如关系SC(Sno,Cno,Grade)中,Sno不是SC的键,是一个主属性,但它是关系S的键,所以Sno是关系SC的外键。
在了解函数依赖前,首先要明白数据依赖的概念。
数据依赖:是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,数据依赖是现实世界属性间相互联系的抽象,属于数据内在的性质。其中最重要的是函数依赖和多值依赖。
依旧是直戳目录空降相关知识点 ↓↓↓
函数依赖
定义
几种特殊的函数依赖
平凡函数依赖与非平凡函数依赖
完全函数依赖与部分函数依赖
传递函数依赖
键
外键
小结
首先我们仍要给出一张数据表,该表涵盖我们所要记录的所有属性
该关系模式为:
SLC(Sno,Sname,Sdept(所在系),Loca(住处),Cno(课程号),Grade(成绩))
Sno | Sname | Sdept | Loca | Cno | Grade |
---|---|---|---|---|---|
03001 | 甲 | 网络工程 | A | C1 | 95 |
03001 | 甲 | 网络工程 | A | C2 | 88 |
04001 | 乙 | 计算机科学与技术 | B | C2 | 93 |
04001 | 乙 | 计算机科学与技术 | B | C4 | 75 |
03002 | 丙 | 网络工程 | A | C1 | 77 |
02001 | 丁 | 网络工程 | A | C5 | 82 |
02002 | 戊 | 计算机科学与技术 | B | C2 | 87 |
函数依赖
定义
· 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)上的任何一个可能的关系r,如果r中不可能存在两个元组,它们在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作X->Y。· 其中X称为这个函数依赖的决定属性组,或称为决定因素,Y称作被决定因素。
· 若Y不函数依赖于X,记作X->(×)Y (ps:仅在本博客中这样表示),若X->Y,且Y->X,则记作X<–>Y。
简单来说,在设计学生表时,一个学生的学号能决定学生的姓名,即可称姓名属性依赖于学号,这就是一个函数依赖。
对于函数依赖,值得注意以下几点:
①函数依赖不是指关系模式R中的某个或某些关系满足的约束条件,而是指R的所有关系均要满足的约束条件。
②函数依赖是语义范畴的概念,只能根据语义来确定一个函数依赖。例如,Sname->Sno这个函数依赖只有在学生不重名的情况下才能成立,如果允许有重名学生,则Sno就不能函数依赖于Sname。
③如果设计者利用强制性规定(比如不允许同名学生存在)以满足需要的函数依赖关系,那么在以后的数据库操作中必须遵循该规定,不然系统将拒绝执行命令。
几种特殊的函数依赖
平凡函数依赖与非平凡函数依赖
· 当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。· 当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
例如在关系模式SLC中,(Sno,Cno)->Grade是非平凡数据依赖,(Sno,Cno)->Cno是平凡函数依赖。
显然,对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明,总是谈论非平凡函数依赖。
完全函数依赖与部分函数依赖
· 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X,记作X->(f)Y。· 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X,记作X->(p)Y。
例如在关系模式SLC中,(Sno,Cno)->(f)Grade是完全函数依赖;(Sno,Cno)->(p)Sname是部分函数依赖。
传递函数依赖
· 在R(U)中,如果X->Y,Y->Z,且Y∉X,Y->(×)X,则称Z传递函数依赖于X,记作X->(t)Z。在此加上条件Y->(×)X,是因为如果X->Y,Y->X,则X<–>Y,实际上就是X直接函数依赖于Z,而不是传递函数依赖。
例如在关系模式SLC中,由于Sno->Sdept,Sdept->Loca,所以Sno->(t)Loca是传递函数依赖。
键
· 设K是关系模式R(U,F)中的属性或属性组合,若K->(f)U,则K为R的候选键。若候选键多于一个,则选定其中的一个为主键。· 包含在任何一个候选键中的属性,称为主属性。其余称为非主属性或非键属性。最简单的情况是单个属性是键,最极端的情况是整个属性组是键,称为全键。
例如在关系模式SLC中,若规定学生不允许重名,则(Sno,Cno)、(Sname,Cno)是候选键,Sno,Sname,Cno是主属性,其余为非主属性。
再举一个全键的例子:在关系模式签约(演员,制片公司,电影名)中,假设某个演员可以参加不同电影的拍摄,某部电影有不同的演员参与拍摄,某个制片公司可以和不同的演员签约拍摄不同的电影,那么想要唯一地确定该关系中的一个元组,必须给出每一个属性的值,所以这个关系的键为(演员,制片公司,电影名),即全键。
外键
关系模式R中属性或属性组X并非R的键,但X是另一个关系模式的键,则称X是R的外部键,简称外键。例如对于关系模式S(Sno,Sname,Sdept)和L(Sdept,Loca),Sdept不是关系S的键,却是关系L的键,则Sdept是S关系的外键。
需要注意的是,上述提到的X不是R的键,并不是说X不是R的主属性。X不是键,但可以是键的组成属性,或者是任意候选键中的一个主属性。如关系SC(Sno,Cno,Grade)中,Sno不是SC的键,是一个主属性,但它是关系S的键,所以Sno是关系SC的外键。
小结
关系间的联系,可以通过同时存在于两个或多个关系中的主键和外键的取值来建立,主键和外键提供了一个表示关系间联系的途径。相关文章推荐
- 数据库基础-函数依赖
- 数据库基础1—函数依赖 多值依赖
- html5 本地数据库(Web SQL Database)之事务处理函数 transaction和executeSQL 详解
- 数据库 基础学习5— 数学函数
- 数据库基础知识:SQL中的IIF语句详解
- HTML5本地数据库基础操作详解
- js基础(函数详解)
- 关系数据库规范化理论 函数依赖与范式理论
- PHP4 与 MySQL 数据库操作函数详解
- 关系型数据库、范式、函数依赖
- Lua基础---lua字符串库函数详解,实例及正则表达式
- TestNg依赖配置基础用法(单一方法依赖)------TestNg依赖详解(一)
- 关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式)(转)
- 关系数据库规范化理论 函数依赖与范式理论
- 【php基础班】第10天 函数、return详解、函数调用、递归函数、数组
- php连接mysql 数据库的函数及用法详解
- 数据库基础(三),sql server中的函数
- Python学习之基础语言篇——函数参数详解
- django基础之数据库操作方法(详解)
- 用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化