1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖

符合3NF一定符合2NF、一定符合1IF

简单区分。2NF不存在部分函数依赖,3NF不存在传递函数依赖

第一范式1NF

  • 符合1NF的关系中的每个属性都不可再分。

1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

第二范式2NF

  • 消除了1NF非主属性对主属性的部分函数依赖。

函数依赖:在属性(属性组)X的值确定的情况下,必定能够确定属性Y的值。
例如:学号–>班主任。(学号,课程名称)–>分数。

完全函数依赖:在一张表中,如果X–>Y,对于X的任意子集都不能确定Y。
例如(学号,课程)–>分数。单独的学号、和课程都不能确定分数。一个学号多个课程分成绩,一个课程对应多个同学的成绩。只能由学号和课程共同确定具体的分数。

部分函数依赖:Y函数依赖X函数,但是Y函数不完全依赖X函数。就称函数Y部分依赖函数X。
例如:(学号,课程名)–>姓名。一个学号对应一个学生姓名,但是课程名并不能对应具体的学生。

传递函数依赖:Z函数依赖Y函数,Y函数依赖X函数(Y不包含X,X不依赖Y前提)。Z函数依赖X函数。

判断是否是2NF:查看表中是否存在非主属性对于码的部分函数依赖。不存在部分函数依赖就是2NF

判断方法:

  • 1、找出数据表所有的码
  • 2、根据码找出主属性
  • 3、找出非主属性
  • 4、查看非主属性对码的部分函数依赖

找码的过程:
1、查看一个单一属性,其他属性值是否都能确定
2、查看两个属性:其他属性值能否全部确定
3、…

例如:(学号,课名,姓名,系名,系主任,分数)。
单一的学号不能确定分数,分数的确定需要学号和课程。

码(学号,课名)

(学号,课名)–>系名.单独的学号就可以确定。部分依赖

改为2NF,消除部分依赖
将分数搞出去,选课(课程名,学号,分数)
学生(学号,姓名,系名,系主任)

选课的码(课程名,学号)–>分数
学生的码(学号)–> 只有一个主属性,不存在部分函数依赖

第三范式:3NF

  • 消除了非主属性对码的传递函数依赖。

选课表(课程名,学号,分数)不存在传递函数依赖。(课程名,学号)为主码,传递也需要另外两个属性。

学生表中,学号–>系名。系名–>系主任。存在传递函数依赖。不符合3NF。
消除这个传递函数依赖
系(系名、系主任)
学生(学号,姓名,系名)

Original: https://www.cnblogs.com/zheng-yuzhu/p/16634210.html
Author: 郑-某
Title: 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609045/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【翻译】Spring Security抛弃了WebSecurityConfigurerAdapter

    作者:ELEFTHERIA STEIN-KOUSATHANA 发表日期:2022年2月21日 在Spring Security 5.7.0-M2,我们弃用了 WebSecurity…

    Java 2023年6月6日
    097
  • Spring源码之AOP的使用

    Spring往期精彩文章 Spring源码搭建 Spring源码阅读一 前言 我们都知道Java是一门面向对象(OOP)的语言,所谓万物皆对象。但是它也存在着一些个弊端:当你需要给…

    Java 2023年6月7日
    083
  • Elasticsearch SSL认证/证书制作

    制作目的 在上一篇《elasticsearch7.X x-pack破解》中,我们启用了x-pack模块,elasticsearch集群中,如果使用了x-pack,那么集群中的各节点…

    Java 2023年6月6日
    084
  • flowable整合springboot

    地址:http://www.blackzs.com/archives/1523 此博客只是为了记忆相关知识点,大部分为网络上的文章,在此向各个文章的作者表示感谢! Original…

    Java 2023年5月29日
    055
  • 四、针对redis容灾切换导致”脑裂”的情况

    网上参考到别人博客说,redis容灾切换的时候,有几率出现脑裂的情况。 什么是脑裂: sentinel判断master宕机,切换slave为新master的过程中,业务数据还在持续…

    Java 2023年6月5日
    074
  • [Java][Spring]spring profile与maven profile多环境管理

    spring profile 与 maven profile 多环境管理 spring profile Spring profile是 Spring提供的多环境管理方案。 如下图:…

    Java 2023年6月5日
    074
  • MySQL的安装和卸载

    MySQL的安装和卸载 一、卸载 1.停止MySQL服务:我的电脑–》管理–》服务–》MySQL服务名–》停止! 2.卸载MySQL…

    Java 2023年6月5日
    083
  • 数据结构学习笔记

    数据结构学习笔记 数据结构=个体的存储+个体的关系存储 算法=对存储数据的操作 数据结构是专门研究数据存储的问题 狭义的算法是与数据的存储方式密切相关;广义的算法是与数据的存储方式…

    Java 2023年6月7日
    075
  • Spring Security默认的用户登录表单 页面源代码

    Spring Security默认的用户登录表单 页面源代码 <html><head><title>Login Pagetitle>hea…

    Java 2023年5月30日
    065
  • 安卓开发入门(一)开发环境搭建

    开发工具 基本上就一个选项:Android Studio,从官网下载最新版版即可。 我下载时是2020.3.1 for Windows 64-bit。 官网地址:https://d…

    Java 2023年6月5日
    087
  • Mybatis学习笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    0116
  • 2022.18 Java 类加载回顾总结

    Java类的生命周期如下图: 主要包括加载、连接、初始化、使用、卸载几个阶段,其中类加载是最先要做,它是JVM运行时如何把用户编译后的class文件转成二进制字节流的过程,要解决从…

    Java 2023年5月29日
    0105
  • 那些年我一直在用的高效开发者工具-Typora

    今天跟大家介绍一款我平时一直在用的本地Markdown工具,对比了国内外几款相似工具,Typora简洁、干练、清爽、功能完备特性深深吸引了我。我平时一般用它记录一些学习文章撰写,工…

    Java 2023年6月15日
    087
  • Skywalking-10:Skywalking查询协议——GraphQL

    GraphQL GraphQL 基础 参照Getting started with GraphQL Java and Spring Boot这篇文章学习即可 PS:可以使用 bre…

    Java 2023年6月5日
    082
  • Spring系列12: `@Value` `@Resource` `@PostConstruct` `@PreDestroy` 详解

    前面章节介绍了使用 @Autowired注入依赖的详细用法,感兴趣的可以翻看前面的文章。Spring 还支持通过在字段或 bean 的 Setter方法上使用 JSR-250 @R…

    Java 2023年6月5日
    069
  • Java8新特性系列-Date Time API

    在 Java 8 中,引入了一个新的日期时间 API,以弥补旧日期时间 API 的以下缺点。 不是线程安全的 – java.util.Date 不是线程安全的,因此开发人员在使用日…

    Java 2023年6月7日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球