关系型三大范式与BCNF有什么用呢

学的时候就知道是一堆公式。
实际中在设计表的时候可能会用到。
前提是关系型数据库,比如mysql。
(实际中oracle比mysql更好用。但是他收费啊。)

第一范式:每个属性都是原子的(需要做到每个属性都是不可分割的。)

在这里插入图片描述

如上。建表的话,还需要把联系方式分成三列去保存,保证每个属性都是原子的。

不满足第一范式,mysql都无法建表。所以第一范式不需要太多关注。

第二范式:满足第一范式基础上,非主属性必须完全依赖于主属性。即主键的整体才能确定一个非主属性。

非主属性是指不构成主键的那些列。

跟着我的思路来,

假设我设计的 管理学生信息表结构如下,
(学号,课程号,成绩,姓名, 老师,老师职称)。主键加粗。
分析一下

  1. 成绩是完全依赖于主属性(即学号+课程号,可以确定一个人一门课的成绩)

  2. 姓名可以直接通过学号来确定,不用课程号就行了。不满足非主属性必须完全依赖于主属性。

不满足第二范式了有啥坏处呢?

新生入学了。你会发现无法新增内容。因为学生还没有选课,自然没有课程号。

我们按照第二范式,消除非主属性部分依赖主属性的情况。就把姓名提出来,新建一张表。两张表如下

1.选课表(学号,课程号,成绩, 老师,老师职称)
2.学生表(学号,姓名)。

学生表就一个主属性,天然满足第二范式。

第三范式:满足第二范式基础上,且消除对主属性的传递依赖。

选课表中,能决定教师职称并不是通过学号+课程号来确定的,而是先确定了老师才知道教师职称。

我们称教师职称是传递依赖于(学号,课程号)。

有什么坏处呢?

1.老师职称改变了,要修改很多条数据
2.新来老师还没有定教哪门课,教师职称不知该保存到什么地方。(插入异常)

按照第三范式,消除传递依赖的非主属性。最终得到表结构如下

选课表(学号,课程号,成绩,教师)
教师表(教师,教师职称)
学生表(学号,姓名)

BCNF:第三范式基础上,

BCNF与第三范式的不同之处在于:第三范式中不允许非主属性被另一个非主属性决定,但第三范式允许主属性被非主属性决定;而在BCNF中,任何属性(包括非主属性和主属性)都不能被非主属性所决定。
实际上,我们存表,一般都是用id做主键。假如这样设计表:
选课表(学号,课程号,成绩,教师,id)满足第三范式,却不满足BCNF。
因为id可以决定非主属性和主属性了。
所以直接把id作为主属性就满足BCNF了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/110168.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2596. 检查骑士巡视方案

【LetMeFly】2596.检查骑士巡视方案 力扣题目链接:https://leetcode.cn/problems/check-knight-tour-configuration/ 骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中,骑士会从棋盘的 左上角 出发,并且访问棋盘上的每个格子 恰好一次 。…

Python3.10 IDLE更换主题

前言 自定义主题网上有很多,3.10IDLE的UI有一些新的东西,直接扣过来会有些地方覆盖不到,需要自己测试着添几行配置,以下做个记录。 配置文件路径 Python安装目录下的Lib\idlelib\config-highlight.def。如果是默认安装&#xf…

【JVM 内存结构丨堆】

堆 定义内存分配特点:分代结构对象分配过程Full GC /Major GC 触发条件引用方式堆参数堆内存实例 主页传送门:📀 传送 定义 JVM(Java Virtual Machine)堆是Java应用程序运行时内存管理的重要组成部分之一。堆内存用于存储Java对象…

vue学习之vue cli创建项目

安装 node.js https://nodejs.org/en 安装 vue cli npm install -g @vue/cli --registry=https://registry.npm.taobao.org创建项目 执行创建命令,回车vue create vue-cli-learning选择 “Manually select features”,回车 “空格” 关闭 Linter / Formatter 选项,回车

android注解之APT和javapoet

前言 前面我们已经讲过注解的基本知识,对于注解还不太了解的,可以去看一下之前的文章, android 注解详解_袁震的博客-CSDN博客。 之前我们在讲注解的时候,提到过APT和JavaPoet,那么什么是APT和JavaPoet呢&#xff1…

【ChatGPT原理与实战】4个维度讲透ChatGPT技术原理,揭开ChatGPT神秘技术黑盒!

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…

Cesium 地球网格构造

Cesium 地球网格构造 Cesium原理篇:3最长的一帧之地形(2:高度图) HeightmapTessellator 用于从高程图像创建网格。提供了一个函数 computeVertices,可以根据高程图像创建顶点数组。 该函数的参数包括高程图像、高度数据的结构、网格宽高、…

网络安全深入学习第四课——热门框架漏洞(RCE— Log4j2远程代码执行)

文章目录 一、log4j2二、背景三、影响版本四、漏洞原理五、LDAP和JNDI是什么六、漏洞手工复现1、利用DNSlog来测试漏洞是否存在2、加载恶意文件Exploit.java,将其编译成class文件3、开启web服务4、在恶意文件Exploit.class所在的目录开启LDAP服务5、监听反弹shell的…

SEO优化排名的技巧与注意点(百度SEO排名的五大注意点)

关键词排名是指在搜索引擎中,用户搜索相关关键词时,网站出现的顺序。SEO优化是提高网站排名的一种方法。优化关键词排名的目的是提高网站流量和知名度。但是要注意遵循百度SEO排名的规则。 下面介绍一下百度SEO排名的五大注意点和优化关键词的六种方式。…

如何实现一个简单的Promise/A+规范的Promise库?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Promise/A规范的Promise⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚…

去除pdf/word的水印艺术字

对于pdf中的水印如果无法去除水印,则先另存为word,然后再按下面办法处理即可: 查看宏,创建:删除艺术字 添加内容: Sub 删除艺术字()Dim sh As ShapeFor Each sh In ActiveDocument.ShapesIf sh.Type msoT…

第二节:利用VBA代码交换三个单元格的值

【分享成果,随喜正能量】经常在做一件事时,一开始动力很足,可时间久了,就会出现意志力消耗殆尽。流水不腐,户枢不蠹。做一件对自己好的小事,养一个好习惯,慢慢坚持,持续去做&#xf…