三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别

三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别第一范式:  列1唯一确定列2、列3、列4…,即列不能再分成其它几列。  假设列1:订单名,列2:商品名,一个订单名里可以有多个商品名,所以这样就不符合第一范式。第二范式:  首先符合1NF,另外包含两部分内容,一是表必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖于全部主键,而不能只依赖于主键的一部分而不依赖全部主键。  定义听起来有点绕,不慌,直接看图,只有全部的非…

大家好,又见面了,我是你们的朋友全栈君。

第一范式(1NF)


三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别

  列1唯一确定列2, 列3, 列4, ...,即列2, 列3, 列4, ...不能再分裂出其它列。

  假设有关系模式列1: 订单名; 列2: 商品。一个订单下可以有多个商品,即列2: 商品可以分裂成商品A, 商品B, 商品C, ...,所以列1: 订单名; 列2: 商品这样的关系模式不符合第一范式。

第二范式(2NF)


三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别

  满足2NF的前提是必须满足1NF。此外,关系模式需要包含两部分内容,一是必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖全部主键,而不能只依赖于主键的一部分而不依赖全部主键。

  定义听起来有点绕,不慌,直接看图,只有全部的非主键列依赖于全部主键,才满足第二范式。

第三范式(3NF)


三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别

  满足3NF的前提是必须满足2NF。另外关系模式的非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列m既依赖于全部主键,又依赖于非主键列n的情况。

  定义听起来还是有点绕,不慌,直接看图,只要非主键内部存在传递依赖,就不满足第三范式。

  假设存在关系模式主键1: 课程编号; 列1: 教师名; 列2: 教师家庭地址。显然满足第一范式和第二范式,但是教师家庭地址传递依赖于教师名,所以不满足第三范式。

示例:

  设有课程关系模式如下:R(C#, Cn, T, Ta)(其中C#为课程号,Cn为课程名,T为教师名,Ta为教师地址),并且假定不同的课程号可以有相同的课程名,每门课程只有一位任课教师,但每名教师可以有多门课程。关系R范式最高达到()。

A)1NF
B)2NF
C)3NF
D)BCNF

【正确答案】B

【解析】

  一个“课程号”确定一个“课程名”,确定一个“教师名”,确定一个“教师地址”,所以符合第一范式;

  “课程号”是无重复的,所以“课程号”是主键,“课程名”、“教师名”、“教师地址”均是可重复的,所以它们都是非主键列并完全依赖于主键“课程号”,所以符合第二范式;

  非主键列“教师地址”传递依赖于非主键列“教师名”,所以不符合第三范式,故选B。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142209.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Java SE】————标识符及命名规则和关键字

    【Java SE】————标识符及命名规则和关键字Java标识符:             Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,其中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符.。       标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。      Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且

    2022年7月8日
    23
  • js操作string它substr方法

    js操作string它substr方法

    2022年1月1日
    51
  • mtk camera架构_c语言源代码网站

    mtk camera架构_c语言源代码网站Kd_camera_hw.c(custom\viroyal73\kernel\camera\camera)#include<linux/videodev2.h>#include<linux/i2c.h>#include<linux/platform_device.h>#include<linux/delay.h>#i…

    2022年10月30日
    0
  • 海量数据处理之Bloom Filter详解

    海量数据处理之Bloom Filter详解海量数据处理之BloomFilter详解 前言   本博客内曾已经整理过十道海量数据处理面试题与十个方法大总结。接下来,本博客内会重点分析那些海量数据处理的方法,并重写十道海量数据处理的面试题。如果有任何问题,欢迎不吝指正。谢谢。一、什么是BloomFilter   BloomFilter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集

    2022年6月23日
    48
  • 少儿编程网站源码和scratch课程

    随着智能时代的到来,随着国家双减政策的实施,少儿编程是很多教育从业者的首选。因为不仅国家重视,而且对于承认来说容易上手。但目前市面上的少儿编程,投入都极高,且都是租用有限的账号和功能,并不是拥有真正属于自己的系统。学生端所以一定要有源码,这样才能拥有真正属于自己的少儿编程教学平台和管理平台系统。(源码即和新文件,拥有源码就可以不受任何限制。)另外,系统要大量的投入教学使用,这样才能保证其成熟使用,最后还要有专业的技术团队去维护。学生端+课程视频教师端:可以一键推送学生作业给家长..

    2022年4月6日
    57
  • vue(15)vue-cli介绍与安装「建议收藏」

    vue(15)vue-cli介绍与安装「建议收藏」前言vue-cli是和vue进行深度组合的工具,可以快速帮我们创建vue项目,并且把一些脚手架相关的代码给我们创建好。真正使用vue开发项目,都是用vue-cli来创建项目的。vue-cli介绍

    2022年8月7日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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