title: 数据库三大范式详解实例图文教程
date: 2021-09-04 20:29:31
tags:

  • 数据库
  • MySQL
    categories:
  • 数据库
    cover: https://cover.png
    feature: false

需要用到的例表:

1. 名词概念

1.1 函数依赖

A --> B,如果通过A属性(属性组)的值,可以确定唯一属性B的值,则称属性B依赖于A

如:学号 --> 姓名 (学号唯一确定姓名)                      1001 --> 张三
(学号,课程名称)--> 分数 (学号和课程名称唯一确定分数) (1001,Java) --> 89

1.2 完全函数依赖

A --> B,如果A是一个属性组,则B属性确定需要依赖于A属性组中的所有属性值

如:(学号,课程名称)–> 分数 (分数需要完全依赖于学号和课程才能得出)

1.3 部分函数依赖

A – > B,如果A是一个属性组,那么B属性只需要依赖A属性组中的一些值即可

如:(学号,课程名称)–> 姓名

1.4 传递函数依赖

A --> B,B --> C,则A --> C。通过A属性(属性组)的值,可以确定唯一B属性的值,通过B属性的值,可以确定唯一的C属性的值,则称 C 传递依赖于 A

如:学号 --> 系名,系名 --> 系主任,则学号 --> 系主任(通过学号,可以确定唯一的系主任)

1.5 码

在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码

如:该表的码为:(学号,课程名称)
其中,姓名,系名,系主任,都完全依赖于学号,而分数则完全依赖于(学号,课程名称)。(学号,课程名称)被其他所有属性所完全依赖,即为该表的码

2. 三大范式概念简述

第一范式(1NF):每一列都是不可分割的原子数据项
第二范式(2NF):在满足第一范式的前提下,表中的每一个字段都完全依赖于主键。即在1NF的基础上,消除非主属性对主码的部分函数依赖,非码属性必须完全依赖于码属性
第三范式(3NF):在满足第二范式的前提下,表中的每一列都直接依赖于主键,而不是通过其他的列来间接依赖主键。即不得传递依赖于主键,在2NF基础上,消除传递依赖

3. 具体实现


存在问题:

  1. 数据冗余:姓名,系名,系主任
  2. 添加新系时,数据不合法。
  3. 删除张三同学的数据时,系也删除了

3.1 转换为2NF,消除部分函数依赖,全为完全函数依赖

由前面所说:姓名,系名,系主任都完全依赖于学号,而分数完全依赖于学号和课程名称,将其分为两个表


化简:

现存问题:
1. 数据冗余,姓名,系名,系主任
2. 添加新系时,数据不合法。
3. 删除张三同学的数据时,系也删除了

3.2 转换为3NF,消除传递函数依赖

由前面所说,学号 --> 系名,系名 --> 系主任,再将其分为两个表,一共三个表


现存问题:
1. 数据冗余,姓名,系名,系主任
2. 添加新系时,数据不合法。
3. 删除张三同学的数据时,系也删除了

结尾:由此,问题全部解决,同时也由1NF转换为2NF,再转换为3NF

数据库三大范式详解实例图文教程相关推荐

  1. 数据库三大范式详解,部分依赖、完全依赖、传递依赖

    数据库三大范式详解以及部分.完全.传递依赖 一.第一范式 二.第二范式 三.第三范式 四.部分依赖.完全依赖.传递依赖 完结撒花 一.第一范式 数据库每一列都是不可分的基本数据项(原子数据项) 就比如 ...

  2. Spring Boot 2.0 的配置详解(图文教程)

    本文来自作者 泥瓦匠 @ bysocket.com 在 GitChat 上分享 「Spring Boot 2.0 的配置详解(图文教程)」 编辑 | 哈比 Spring Boot 配置,包括自动配置和 ...

  3. 数据库三范式详解,优缺点,解决了什么问题?

    https://zhuanlan.zhihu.com/p/20028672 三范式详解 解决了什么问题:(上面也有讲到)https://blog.csdn.net/qq_41174684/articl ...

  4. 数据库的三大范式详解

    数据库的三大范式 第一范式(1NF) 原子性:保证每一列不可再分 举例: 在上面的表中,family_inf列中不满足原子性的要求,故不满足第一范式.需调整如下: 第二范式(2NF) 在第一范式的基础 ...

  5. MySQL三大范式详解(小白也能懂哦)

    1.范式基础 1.1范式的概念 设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF) ...

  6. 各种字符编码详解【图文教程】

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  7. 数据库三范式详解+例子

    转载 <a href="http://blog.csdn.net/w__yi/article/details/19934319"></a> 数据库的设计范式 ...

  8. dell灵越笔记本后盖怎么拆_dell笔记本拆机详解【图文教程】

    总所周知,笔记本室友大大小小的配置组装而成的,而笔记本同样的,有时也会存在着或多或少的故障,又或者有时由于好奇心的趋势,让我们相对笔记本内部的相关配置做更深一步的了解,这个时候,我们会选择对笔记本进行 ...

  9. mysql数据库设计三大范式_数据库设计三大范式详解

    引言数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不 ...

最新文章

  1. php mysql execute语法_PHP PDOStatement::execute讲解
  2. HDLBits 系列(4)如何设计一定不会产生Latch的组合逻辑?
  3. 一旦一个业务可以由一个人来全部完成而不涉及分工,就会产生单干的情况
  4. 紧随Java 16,Spring Framework 5.3.5 发布:涵盖JDK 16的支持!
  5. SWFUpload上传文件组件,跨域上传文件
  6. 配置管理和Java开发_Java开发环境之------MyEclipse中服务器Server的配置,管理和启动...
  7. 在centos上搭建svn服务器
  8. java文件拷贝_Java实现文件拷贝的4种方法
  9. ccleaner无法更新_CCleaner正在静默更新关闭自动更新的用户
  10. 解读 | 滴滴主题研究计划:机器学习专题+
  11. Win7部署基础知识(2):制作WinPE
  12. Java讲课笔记17:Lambda表达式
  13. 福彩3D Matlab统计分析,基于ANSYS和遗传算法的3D打印桨叶结构优化设计的制作方法...
  14. python实现华容道游戏(v0.4)--支持游戏自动完成功能
  15. 网易企业邮箱搬家步骤
  16. RVDT接口测试工装研究
  17. 面试指导笔记——面试篇
  18. VS2015+caffe+matlab+python+CPU
  19. HTML/CSS大作业--仿联想官网
  20. 初识Kotlin新的安卓编程语言

热门文章

  1. 获取并设置HTML5 Video的当前进度
  2. Photoshop一键制作从序列图导出GIF(GUI版本)
  3. Linux入门基础知识
  4. 跟着大神练VIM--------二级
  5. my97时间控件 选择多个日期
  6. 建造者2全部岛屿_《勇者斗恶龙:建造者2》公布新岛屿和人物
  7. 《金融学》期末考试考前笔记
  8. 从顶部向下滑动即可退出全屏,全屏沉浸模式Immersive Full-Screen
  9. 移动端开发-touch事件及其相关属性
  10. C++如何做字符串分割(5种方法)