关系数据库的范式理论_数据库规范化理论依据
文章目录
求关系模式最高达到第几范式的步骤
- 根据给定的U和F,首先求它的候选码
- 根据候选码判断关系F中的函数关系是否满足第二范式,若不满足则为关系模式的规范化最高为第一范式
- 然后判断是否存在非主属性传递依赖,如果存在则不满足第二范式,如果不存在则关系模式的规范化最高为第三范式.
通俗理解1NF,2NF,3NF.
1NF的定义:
一个关系模式R的所有属性都是不可分的基本数据项.
1NF容易理解就不多解释了,在这里举两道简单的题帮助理解.
- 规范化的关系模式中,所有属性都必须是( C)。 A.相互关联的 B.互不关联的 C.不可分解的 D长度可变的
- 关系数据库中的每个关系必须最低到达__第一范式__,且该范式中的每个属性都是__不可再分__的。
2NF的定义:
在1NF的基础上,关系中每一个非主属性完全函数依赖于码.
所以满足第二范式则一定满足第一范式.
对这个非主属性完全函数依赖于码不清楚可以看最后**函数依赖中的图**来理解.
3NF的定义:
在满足2NF的基础上,满足每个非主属性既不部分依赖于码也不传递依赖于码.
满足3NF的同时一定满足2NF.
如何求关系模式的候选码
- 首先对于给定的R(U)和函数依赖集F,可以将它的属性化分为4类:
- L类:仅出现在F的函数依赖左部的属性.
- R类:仅出现在F的函数依赖右部的属性.
- N类:在F的函数依赖左部和右部未出现的属性.
- LR类:在F的函数依赖左部和右部均出现那的属性.
下图的题中:A->C C->A B->AC D->AC L:找出这些式子中只在箭头左边的 R:找出式子在只出现在箭头右边的 N:找出所有的R中既没有出现箭头在左边又没有出现在箭头右边的 LR:找出既出现在箭头左边又出现在箭头右边的 如下图所示.
那么求出这些L,R,N,LR类后我们根据三个定理来确定候选码的成员:
- 定理1:对于给定的关系模式R以及其函数依赖集F,若X(x∈R)是L类,则X必为R的任一候选码的成员.
- 定理2:对于给定的关系模式R以及其函数依赖集F,若X(x∈R)是R类,则X不在任何候选码中.
- 定理3:设有关系模式R以及函数依赖集F,如果X是R的N类属性,则X必包含在R的任一候选码中.
- 推论2:如果X是R的N类和L类组成的属性集,且X+包含了所有的属性,则X是R的唯一候选码.
简单的来说就是对于在 L和N类中的都是候选码的成员:
确定了候选码的成员后如何确定最后的候选码呢?我们看到上面有这个B+或者(BD)+这在求B的闭包,下面我们来了解以下如何求闭包吧.
如何求闭包
闭包就是由一个属性直接或间接推导出所有属性的集合.引用: http://blog.sina.com.cn/s/blog_7f6c91720101jkhm.html.了解了闭包的概念后我们要学会如何求闭包, 步骤如下:
当我们求出所由候选码成员的闭包后,我们根据上面的推论2,
- 推论2:如果X是R的N类和L类组成的属性集,且X+包含了所有的属性,则X是R的唯一候选码. 假设上图中BC为候选码的成员,求到的(BC)+的闭包为ABCE; 而U={A,B,C,D,E},并没有全部包含所有属性,所以它不是关系模式R的码.
F={A->E,AC->B,B->A,D->A,D->C} 下面我来求一下D的闭包(D)f+ 根据D->A,D->c将A,C 目前(D)+=ACD; (ACD)={A,C,D,AD,AC,CD} A->E AC->B 变成(D)f+=(ABCDE)
(D)f+包含了R中的所有属性,所以D为R的码.
函数依赖
求出码后我们就根据2NF,3NF中的函数依赖来判断关系模式的规范化最高为? 1.这个中AB为候选码,但是存在非主属性依赖于B,不满足所有非主属性完全依赖于码.
2.再看一道题
最后总结两个常考的知识点
- 在一个关系R中,若X→Y,并且X的任何真子集都不能函数决定Y,则称X→Y为___完全___函数依赖
- 若X→Y,并且X的一个真子集也能够函数决定Y,则称X→Y为___部分___函数依赖。
- 一个关系模式R中的候选码可能有多个.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181231.html原文链接:https://javaforall.cn
相关文章
- 数据库设计——关系数据理论(超详细)「建议收藏」
- NoSQL数据库理论基础
- 理论:第二章:Spring的AOP和IOC是什么?使用场景有哪些?Spring事务与数据库事务,传播行为,数据库隔离级别
- 迁移MySQL跨数据库迁移:从理论到实践(mysql跨数据库)
- Neo4j企业版:强大的图形数据库解决方案(neo4j企业版)
- Oracle 数据库恢复:从日志文件开始(oracle恢复日志)
- 数据库的比较对比分析:Access与MySQL数据库(access与mysql)
- 实现Oracle数据库分页查询的SQL示例(oracle分页sql)
- Oracle 实训题:从理论到实践,掌握数据库操作技巧(oracle实训题)
- 如何使用yum安装MySQL数据库?(mysql安装yum)
- 轻松应对:Oracle数据库切换完整指南(oracle数据库切换)
- 数据库快速恢复Oracle数据库:impdp实现方案(impdporacle)
- MySQL 数据库累加功能的应用与实现(mysql累加)
- mssql数据库中的非聚集索引及其应用(mssql 非聚集索引)
- 使用JSON格式解析Oracle数据库(json和oracle)
- MySQL三范式课程视频理论实践并重,深入浅出,让你轻松掌握数据库设计技能
- 深入了解MySQL三大分支,选择最适合你的数据库管理系统(mysql三个分支)
- 数据库快速了解Redis轻松下载类数据库(下载redis类)
- Oracle数据库中两字段合并实现方式(oracle 两字段合并)
- Oracle11g在数据库理论及应用中的突破性进展(oracle11g论文)
- 使用FSO把文本信息导入数据库
- oracle数据库学习基本结构介绍