• 来做一道题加深对2NF与3NF界线的理解吧

    2NF与3NF的区别
    服务器君一共花费 629.590 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    从实用的角度,我们设计数据库一般到2NF,3NF就可以了。我们讨论这么一道题目,去加深对 2NF 与 3NF 之间界线的理解。

    建立一个供应商、零件数据库。其中“供应商”表S:

    • sno 供应商代码
    • sname 供应商名
    • zip 供应商邮编
    • city 供应商所在城市

    其函数依赖为:sno →(sname,zip,city ),zip → city。

    那么“供应商”表S属于___。

    A. 1NF B. 2NF C. 3NF D. BCNF

    试一下思考这道题,答案是哪个选项?

    这里肯定是满足第一范式的,根据第一范式每个字段都不可再分,很好理解,那么第二范式呢?

    第二范式定义是:属性完全依赖于主键[消除非主属性对主码的部分函数依赖],就是表中的属性完全依赖于全部主键。说实话这个不太好理解,不过对这到例题来说,其中 sno 是主键,属性是完全依赖于主键的,那后面的那个zip->city什么意思呢?

    这里再从第三范式去审读一下,不说定义,先说第二范式中的问题。有一个就是无法消除数据冗余,而第三范式就是弥补了第二范式的这个缺点,3NF要求消除非主属性对候选键的传递依赖。因此再看这道题,zip->city其实就是数据冗余了。如果要改为第三范式的话需要再添加一个表(address:zip,city),原来的那个表只保留zip就可以了。

    也就是说,这张表已经满足了2NF,即属性依赖于全部主键 sno ,但是形成了从 city 到非候选键 zip 再到主键 sno 的传递依赖,不符合3NF。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  2. [PHP程序设计] PHP数组的遍历 7 个条目
  3. [软件工程与项目管理] 开始了解Git 5 个条目
  4. [移动开发] 刷机与root相关 2 个条目
  5. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  6. [智力开发与知识管理] 学习编程为什么没会这么难? 7 个条目
  7. [Python程序设计] Django后台管理系统 2 个条目
  8. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  9. [Python程序设计] urls.py设置技巧 8 个条目
  10. [C语言程序设计] C语言里的全局变量 2 个条目
  11. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  12. [Python程序设计] Django数据库模型 6 个条目
窗口 -- [协会]