关系数据库的范式理论_数据库规范化理论依据

关系数据库的范式理论_数据库规范化理论依据文章目录求关系模式最高达到第几范式的步骤通俗理解1NF,2NF,3NF.如何求关系模式的候选码如何求闭包函数依赖求关系模式最高达到第几范式的步骤根据给定的U和F,首先求它的候选码根据候选码判断关系F中的函数关系是否满足第二范式,若不满足则为关系模式的规范化最高为第一范式然后判断是否存在非主属性传递依赖,如果存在则不满足第二范式,如果不存在则关系模式的规范化最高为第三范式.通俗理解1N…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

求关系模式最高达到第几范式的步骤

  1. 根据给定的U和F,首先求它的候选码
  2. 根据候选码判断关系F中的函数关系是否满足第二范式,若不满足则为关系模式的规范化最高为第一范式
  3. 然后判断是否存在非主属性传递依赖,如果存在则不满足第二范式,如果不存在则关系模式的规范化最高为第三范式.

通俗理解1NF,2NF,3NF.

  • 1NF的定义:

     一个关系模式R的所有属性都是不可分的基本数据项.
    

    1NF容易理解就不多解释了,在这里举两道简单的题帮助理解.

    1. 规范化的关系模式中,所有属性都必须是( C)。
      A.相互关联的
      B.互不关联的
      C.不可分解的
      D长度可变的
    2. 关系数据库中的每个关系必须最低到达__第一范式__,且该范式中的每个属性都是__不可再分__的。
  • 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.再看一道题
在这里插入图片描述
最后总结两个常考的知识点

  1. 在一个关系R中,若X→Y,并且X的任何真子集都不能函数决定Y,则称X→Y为___完全___函数依赖
  2. 若X→Y,并且X的一个真子集也能够函数决定Y,则称X→Y为___部分___函数依赖。
  3. 一个关系模式R中的候选码可能有多个.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181231.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Tomcat使用IDEA远程Debug调试[通俗易懂]

    Tomcat使用IDEA远程Debug调试[通俗易懂]Tomcat运行环境:CentOS6.5、Tomcat7.0、IDEA远程Tomcat设置1、在tomcat/bin下的catalina.sh上边添加下边的一段设置CATALINA_OPTS=”-Xdebug-Xrunjdwp:transport=dt_socket,address=60222,suspend=n,server=y”2、address=60222这个是后边IDEA设置的时候需要

  • vue 组件插槽_vue插槽的使用

    vue 组件插槽_vue插槽的使用插槽应用场景当封装一个组件后,内部有一些地方待定功能暴露给外界来写。就好比于el-table中的单个表格内部可能是下拉框,或者是一些文本输入。需要用template来嵌套使用子组件<template><div><divv-for=”iteminarrData”:key=”item.id”><slotname=”todo”:row=”item”></slot><

  • 使用RadControls的RadMenu控件开发系统菜单

    使用RadControls的RadMenu控件开发系统菜单关于菜单这个话题我想应该是不讲则懂,所以本文不会多讲这些概念,则重关注RadControls控件中的RadMenu控件的使用,结合数据库来开发一个系统菜单。一、数据库设计这里我就使用Access作为示例数据库,详细见下图:表字段依次为:自动编号、菜单编码、菜单名称、请求地址、菜单上显示的图片地址、快捷键(RadMenu控件支持)、菜单顺序、菜单级限、是否为末级和父菜单编码。整个设计中…

  • BP神经网络原理推导

    BP神经网络原理推导本文会完成BP神经网络的推导过程,先介绍BP神经网络的历史,然后介绍BP神经网络的结构,然后再开始推导,最后介绍BP神经网络的优缺点以及几个优化的方法。

  • 网线的交叉线和直通线原理

    网线的交叉线和直通线原理转载自 http://yxy73622.blog.163.com/blog/static/1733173742012231114013341/正线(标准568B):两端线序一样,线序是:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。反线(568A):一端为正线的线序,另一端为:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕。T568A标准连线顺序从左到右依次为:1-绿白、2-绿、3-橙白、4

  • JS常见算法小总结

    JS常见算法小总结今天与大家一起来测试一下常用算法的性能解析:首先我们创建一个含有十万个数组的数组用来测试:letarray=[];for(leti=0;i<100000;i++){ array.push(i)}接下来我们一起分析各个算法的性能:首先来测试冒泡排序:functionbubbleSort(arr){ for(leti=0;i<a…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号