表4
(这里还涉及到一个如何进行模式分解才是正确的知识点,先不介绍了)
现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?
李小明转系到法律系
只需要修改一次李小明对应的系的即可。——有改进
数据冗余是否减少了?
学生的姓名、系名与系主任,不再像之前一样重复那么多次了。——有改进
删除某个系中所有的学生记录
该系的信息仍然全部丢失。——无改进
插入一个尚无学生的新系的信息。
因为学生表的码是学号,不能为空,所以此操作不被允许。——无改进
所以说,仅仅符合2NF的要求,很多情况下还是不够的,而出现问题的原因,在于仍然存在非主属性系主任对于码学号的传递函数依赖。系统概论为了能进一步解决这些问题,我们还需要将符合2NF要求的数据表改进为符合3NF的要求。
第三范式(3NF) 3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
接下来我们看看表4中的设计,是否符合3NF的要求。
对于选课表,主码为(学号,课名),主属性为学号和课名,非主属性只有一个,为分数,不可能存在传递函数依赖,所以选课表的设计,符合3NF的要求。
对于学生表,主码为学号,主属性为学号,非主属性为姓名、系名和系主任。因为 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖,所以学生表的设计,不符合3NF的要求。。
为了让数据表设计达到3NF,我们必须进一步进行模式分解为以下形式:

选课(学号,课名,分数)
学生(学号,姓名,系名)
系(系名,系主任)
对于选课表,符合3NF的要求,之前已经分析过了。
对于学生表,码为学号,主属性为学号,非主属性为系名,不可能存在非主属性对于码的传递函数依赖,所以符合3NF的要求。
对于系表,码为系名,主属性为系名,非主属性为系主任,不可能存在非主属性对于码的传递函数依赖(至少要有三个属性才可能存在传递函数依赖关系),所以符合3NF的要求。。
新的函数依赖关系如图6
<img src="https://pi.zhimg.com/50/5b20707ff3d9afb51ef7bfda726c3e34_hd.jpg" data-caption="" data-rawwidth="783" data-rawheight="388" class="origin_image zh-lightbox-thumb" width="783" data-original="https://pi.zhimg.com/5b20707ff3d9afb51ef7bfda726c3e34_r.jpg">
图6
新的数据表如表5
<img src="https://pic1.zhimg.com/50/8bca802bcff92a8945bf808d18d7ec62_hd.jpg" data-caption="" data-rawwidth="470" data-rawheight="419" class="origin_image zh-lightbox-thumb" width="470" data-original="https://pic1.zhimg.com/8bca802bcff92a8945bf808d18d7ec62_r.jpg">
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-56344-5.html
好
你还在为美爹洗地
加油小王子
桃子桃子桃子好帅这首歌我已经循环了无数遍了很喜欢桃子加油