数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】

本文主要是介绍数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识点罗列:

各种范式之间的关系

1.第一范式1NF:

如果关系模式R中所有的属性都具有原子性,均是不可再分的(一个属性不能再被分解成更小的数据单元),则称R属于第一范式,简称1NF,记作R∈1NF。

  • 关系模式中最基本具备的范式关系是1NF,也就是说任一关系模式均满足第一范式;
  • 第一范式具有大量的数据冗余,还会出现插入、删除和更新异常等弊端。解决该弊端的方法是利用投影运算将关系分解,去掉过于复杂的函数依赖关系,向更高级的范式转换。

2.第二范式2NF:

如果关系模式R∈1NF,且每个非主属性都完全函数依赖于R的主关系键,则称R属于第二范式,简称2NF,记作R∈2NF 。

  • 在第一范式中提到通过投影运算可以将关系模式转换到更高级的范式,因此,从1NF关系转换到2NF的方法就是:在1NF中消除非主属性对主关系键的部分函数依赖
  • 如果R的关系键为单属性,或R的全体属性均为主属性,则R∈2NF

3.第三范式3NF:

如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式,简称3NF,记作R∈3NF。


4.关系模式规范化:

一个低一级范式的关系模式,通过模式分解转化为若干个高一级范式的关系模式的集合的过程。

  • 目的:使关系模式结构合理,消除存储异常,减少数据冗余,便于插入、删除和更新。
  • 基本原则:遵循“一事一地”的原则。
  • 规范化流程:

例题讲解:

该题有两个选项填空,第一个是候选码的求解,第二个是关系模式R的最高满足范式判断;

(1)该关系模式的候选码求解结果是:D、[AB、AC、AD]

详细的求解步骤可以参考我写过的一篇文章:http://t.csdnimg.cn/qt0vH

(2)基于该关系模式,这种题型一般只考虑1NF、2NF、3NF:

1NF是每个关系模式都具备的范式关系,只需要考虑2NF、3NF,而3NF是基于满足2NF的条件再去判断每个非主属性间是否是直接函数依赖,是就满足3NF,不是(即传递函数依赖)就不满足。

判断2NF

列出主属性(候选码)

列出非主属性(在关系模式R中非候选码的属性)
结合函数依赖集,判断非主属性是否完全依赖于主属性。也就是说判断主属性能不能推得出非主属性,同时主属性的真子集不能推出非主属性,这样才叫做完全依赖。

第一步:列出主属性——AB、AC、AD

第二步:列出非主属性——E

第三步:分别判断AB—>E?  判断AC—>E? 判断AD—>E?

已知F={AB→DE,AC→E,AD →B,B →C,C→D},

先看AB是否能够推得出E:

  • 在F中,我们发现只有AC→E,那么就需要看看能不能找到:AB→AC
  • F中有B →C,通过增广律,可以得到AB →AC
  • 因此AB →E。

看AC是否能够推得出E:

  • 显而易见,题目已经给出了,AC→E满足关系模式R的函数依赖集F,因此无需再去对其分析

看AD是否能够推得出E:

  • 依旧是根据F中的AC→E,那么就需要看看能不能找到:AD→AC
  • 首先先看F集中能推得出AC的,没有,那么就看看有没有能够间接推得出AC的
  • F中有B →C,那么通过增广律,可以得到AB →AC
  • 所以接下来就去看看能不能找到AD→AB
  • F中有AD →B,依旧是增广律,两边同时添加A,有多个相同的属性只取一个,所以AD →AB
  • AD →AB、AB →AC、AC→E,通过传递律我们可以证明AD→E
非主属性E对三个主属性都满足完全依赖关系,因此,关系模式R满足2NF

判断3NF:

在2NF的基础上,判断非主属性是否传递函数依赖于主属性。如果是则不满足,如果不是则满足。

先看AC→E:是直接函数依赖,题目F依旧给出

AB→E是否是传递函数依赖:

  • 回到2NF的判断过程,我们是通过AB →AC——AC→E,从而间接得到AB →E
  • 判断是否是传递函数依赖,就去判断AC能不能确定AB,AC能够确定AB就是直接函数依赖,不能确定AB就是传递函数依赖
  • 在F中,我们可以找到能够确定B的只有AD →B,通过增广律可以得到AD →AB,那么接下来就去判断AC是否能确定AD
  • 因为C→D,通过增广律,AC→AD,而AD →AB
  • 所以根据传递律,AC →AB。也就是说,E对AB是直接函数依赖

AD→E是否是传递函数依赖:

同理,按照上面的分析步骤,我们是通过

AD →AB——AB →AC——AC→E从而间接得到AD→E

  • 我们已经知道,AC →AB,那么就只需要判断,AB是否能够推得出AD
  • 在F中,我们可以找到能推得出AD的只有通过在C→D上使用增广律,AC→AD
  • 那么就请判断AB能否推得出AC,在F中依旧对B→C使用增广律,可得AB→AC
  • AB→AC,AC→AD,使用传递律,可以得到AB→AD。也就是说,E对AD是直接函数依赖
在满足2NF的情况下,非主属性E对三个主属性都满足直接函数依赖,因此可以得知关系模式R满足3NF

这篇关于数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504545

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

zoj 1721 判断2条线段(完全)相交

给出起点,终点,与一些障碍线段。 求起点到终点的最短路。 枚举2点的距离,然后最短路。 2点可达条件:没有线段与这2点所构成的线段(完全)相交。 const double eps = 1e-8 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是