由于网络上关于关系规范化的内容一般都是关于范式的,函数依赖和码的概念提及的比较少,所以就写了这篇文章
前提:学习完第二章关系数据库
前提
首先举个 栗子 例子
[例1]建立一个描述是学校教务的数据库,该数据库涉及的对象包括学生的学号(Sno)、所在系(Sdept)、系主任名称(Mname)、课程号(Cno)和成绩(Grade)。
假设用一个单一的关系模式Student来表示,则该关系模式的属性集合为
U={Sno,Sdept,Mname,Cno,Grade}
现实世界的已知事实(语义)告诉我们:
①一个系有若干个学生,但一个学生只属于一个系。
②一个系只有一名负责人。
③一个学生可以选修多门课程,每门课程有若干学生选修。
④每个学生学习每一门课程有一个成绩。
谈论函数依赖之前先提一下数据依赖的概念,
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现数据间相关联系。
它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现
数据依赖中最重要的是函数依赖和多值依赖
函数依赖
定义:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,
则称X函数确定Y或Y函数依赖于X,记作X->Y。
用例1来解释这段定义:
在学校教务数据库中,一个学生的学号只对应一个系。故当“学号”值确定时,学生所在系的属性值也就确定了。
属性之间的这种关系类似于数学中的 y = f (x) 自变量x确定了,对应的函数值y也就唯一的确定了
Sno = f(Sdept),即Sdept函数决定Sno或者说Sdept函数依赖于Sno,记作Sno->Sdept