图4
这一步完成以后,可以得到,表3的码只有一个,就是(学号、课名)。
第二步:
主属性有两个:学号 与 课名
第三步:
非主属性有四个:姓名、系名、系主任、分数
第四步:
对于(学号,课名) → 姓名,有 学号 → 姓名,存在非主属性 姓名 对码(学号,课名)的部分函数依赖。
对于(学号,课名) → 系名,有 学号 → 系名,存在非主属性 系名 对码(学号,课名)的部分函数依赖。
对于(学号,课名) → 系主任,有 学号 → 系主任,存在非主属性 对码(学号,课名)的部分函数依赖。
所以表3存在非主属性对于码的部分函数依赖,最高只符合1NF的要求,不符合2NF的要求。
为了让表3符合2NF的要求,我们必须消除这些部分函数依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。模式分解的方法不是唯一的,以下是其中一种方法:
选课(学号,课名,分数)
学生(学号,姓名,系名,系主任)
我们先来判断以下,选课表与学生表,是否符合了2NF的要求?
对于选课表,其码是(学号,课名),主属性是学号和课名,非主属性是分数,学号确定,并不能唯一确定分数,课名确定,也不能唯一确定分数,所以不存在非主属性分数对于码(学号,课名)的部分函数依赖,所以此表符合2NF的要求。
对于学生表,其码是学号,主属性是学号,非主属性是姓名、系名和系主任,因为码只有一个属性,所以不可能存在非主属性对于码 的部分函数依赖,所以此表符合2NF的要求。
图5表示了模式分解以后的新的函数依赖关系
<img src="https://pi.zhimg.com/50/2f4b4a887f6a61674a49d03d79e3fe17_hd.jpg" data-caption="" data-rawwidth="961" data-rawheight="467" class="origin_image zh-lightbox-thumb" width="961" data-original="https://pi.zhimg.com/2f4b4a887f6a61674a49d03d79e3fe17_r.jpg">
图5
表4表示了模式分解以后新的数据
<img src="https://pi.zhimg.com/50/44af74509a4e21372ed372be8560539d_hd.jpg" data-caption="" data-rawwidth="478" data-rawheight="314" class="origin_image zh-lightbox-thumb" width="478" data-original="https://pi.zhimg.com/44af74509a4e21372ed372be8560539d_r.jpg">
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-56344-4.html
真心想去