第二范式(2NF)在关系理论中的严定义我这里就不多介绍了(因为涉及到的铺垫比较多),只需要了解2NF对1NF进行了哪些改进即可。其改进是,2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。接下来对这句话中涉及到的四个概念——“函数依赖”、“码”、“非主属性”、与“部分函数依赖”进行一下解释。
函数依赖
我们可以这么理解(但并不是特别严的定义):若在一张表中,在属性(或属性组)X的确定的情况下,必定能确定属性Y的,那么就可以说Y函数依赖于X,写作 X → Y。也就是说,在数据表中,不存在任意两条记录,它们在X属性(或属性组)上的相同,而在Y属性上的不同。这也就是“函数依赖”名字的由来,类于函数关系 y = f(x),在x的确定的情况下,y的一定是确定的。
例如,对于表3中的数据,找不到任何一条记录,它们的学号相同而对应的姓名不同。所以我们可以说姓名函数依赖于学号,写作学号 → 姓名。但是反过来,因为可能出现同名的学生,所以有可能不同的两条学生记录,它们在姓名上的相同,但对应的学号不同,所以我们不能说学号函数依赖于姓名。表中其他的函数依赖关系还有如:
系名 → 系主任
学号 → 系主任
(学号,课名) → 分数
但以下函数依赖关系则不成立:
学号 → 课名
学号 → 分数
课名 → 系主任
(学号,课名) → 姓名
从“函数依赖”这个概念展开,还会有三个概念:
完全函数依赖
在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ' → Y 不成立,那么我们称 Y 对于 X完全函数依赖,记作 X F→ Y。(那个F应该写在箭头的正上方,没办法打出来……,正确的写法如图1)
<img src="https://pic2.zhimg.com/50/12513de20079d12b99d946072df7311a_hd.jpg" data-caption="" data-rawwidth="98" data-rawheight="53" class="content_image" width="98">
图1
例如:
学号 F→ 姓名
(学号,课名) F→ 分数 (注:因为同一个的学号对应的分数不确定,同一个课名对应的分数也不确定)
部分函数依赖
假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,记作 X P→ Y,如图2。
<img src="https://pic2.zhimg.com/50/10b52b39b18b8ea9fb17b46babf4d20f_hd.jpg" data-caption="" data-rawwidth="99" data-rawheight="62" class="content_image" width="99">
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-56344-2.html
期待
给观众带来更多更好的作品
Nice