你还在纠结如何判断范式吗?看完这篇就懂了
摘要:
范式判断这块通常让大家很懊恼,会混淆。通过研究,我总结了容易记忆和判断的方法,希望大家看了能够学会这块知识点。
一、说明
范式的符合条件随着范式级别增大而增加,而且范式的条件会包括小于它本身的范式条件。比如3NF的符合条件会比2NF多,而且它的条件会包括2NF、1NF的范式条件。
我把判断每一个范式的条件都列出来,当我们判断范式时,只要某个范式的条件全都符合,那么就达到该范式。
二、范式判断
1NF:
数据库的每一列都是不可分割的基本数据项。
2NF:
数据库的每一列都是不可分割的基本数据项;
存在非主属性对候选键的完全函数依赖 (不存在非主属性对候选键的 不完全/部分 函数依赖)。
3NF:
数据库的每一列都是不可分割的基本数据项;
存在非主属性对候选键的完全函数依赖 (不存在非主属性对候选键的 不完全/部分 函数依赖);
不存在对候选键的传递函数依赖。
BCNF:
数据库的每一列都是不可分割的基本数据项;
存在非主属性对候选键的完全函数依赖 (不存在非主属性对候选键的 不完全/部分 函数依赖);
不存在对候选键的传递函数依赖;
所有的主属性对每一个不包含它的码,也是完全函数依赖和不传递依赖。
补充:
2NF判断的条件,其实就是存在非主属性对候选键的完全函数依赖。当我们在做习题时,题目给的意思很可能是括号里的表述,然后我们要知道它等同于存在非主属性对候选键的完全函数依赖。
三、例题
1、一般情况,企业会将从一个供应商处一次所进的多种货物办理一次入库,因此设计了关系模式:入库单(单号,日期,库房,供应商,物品,数量,金额),下列说法正确的是(不满足第2范式)。
解析:
结合实际情况,把关系模式的函数依赖集写出来:
单号→(日期,库房,供应商),物品→(金额),(单号,物品)→数量
L:单号,物品R:日期,库房,供应商,数量LR:N:
因为(单号,物品)闭包能传递出所有属性,所以候选码/键为(单号,物品)。
因为数据依赖集里有单独的单号或物品传递的依赖;
所以数据依赖集就存在非主属性对候选键的部分函数依赖,即不存在非主属性对候选键的完全函数依赖。
根据范式的判断:
存在非主属性对候选键的完全函数依赖→2NF。
所以,不满足第2范式。
2、对连锁商店的管理,设计了关系模式:(商店,商品部,商品,商品部经理),下列说法正确的是(满足第2范式但不满足第3范式)。
解析:
结合实际情况,把关系模式的函数依赖集写出来:
(商店,商品)→商品部,(商店,商品部)→商品部经理
L:商店,商品R:商品部经理LR:商品部N:
因为(商店,商品)闭包能传递出所有属性,所以候选码/键为(商店,商品)。
因为数据依赖集里没有单独的商店或商品传递的依赖;
所以数据依赖集就不存在非主属性对候选键的部分函数依赖,即存在非主属性对候选键的完全函数依赖。
又因为数据依赖集里存在候选键与非主属性相结合传递出其他非主属性的情况,如(商店,商品部)→商品部经理;
所以存在对候选键的传递函数依赖。
根据范式的判断:
存在非主属性对候选键的完全函数依赖→2NF,
存在非主属性对候选键的完全函数依赖,不存在对候选键的传递函数依赖→3NF;
推导出题目属于2NF。
补充:
不清楚如何求候选码的看这篇:浅析如何求解关系模式的候选码
https://blog.csdn.net/weixin_46218781/article/details/106190080
范式判断习题练习:数据库系统原理--测试 第6章2--习题答案
https://blog.csdn.net/weixin_46218781/article/details/106468881
文章整理不易,有帮助请点赞关注支持,谢谢!微信搜索【三桥君 】,回复【关注】有我准备的一份资源大礼包,后续持续更新。