大家好,我是张哲,是一位在互联网上不愿透露姓名的小学员。

概念:

在设计数据库的基础上会存在各种各样的问题,因此有些专门的设计规则来避免一些问题,这些设计规则被统称为范式(NF)。

目前关系数据库中有六大范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。

下面我将会针对一张表用范式一层一层的分离

分类:

1、第一范式:保证数据是最小原子项。每一份数据都是不可在分的。

我们先看系这一项,很明显,系可以继续分两项:系名和系主任。

此时我们会发现这么几个问题:

数据冗余:学号、姓名、系名、系主任重复的数据太多,这就会带来两个影响:

浪费存储空间。

更新异常:我们如果将张三丰修改为:张俩丰,则必须将所有的张三丰修改为张俩丰,一个字:麻烦。额,好像是两个字哈哈

数据添加时存在问题:比如仅仅是新添加个系名和系主任,但正常情况下:学号、姓名是不为NULL的,所以就无法之添加系名和系主任会导致数据不合法。

数据删除时存在问题:比如张无忌同学毕业了,把他的数据删掉会导致系名、系主任、课程名称都被删掉。此操作不合理。

2、第二范式:在第一范式的基础上令表中的数据完全依赖于主属性。

这里我们要明白5个概念:

函数依赖:A --> B 通过A属性(属性组)的值可以确定B属性的唯一的值

举例:通过学号可以确定唯一的姓名,通过学号+课程名称可以确定唯一的分数。

完全函数依赖:A --> B 通过A属性组的所有值才可以确定B属性的唯一的值

举例:通过学号+课程名称可以确定唯一的分数。

部分函数依赖:A --> B 通过A属性组中的某些属性值就可以确定B属性的唯一的值

举例:通过学号+课程名称的学号就可以确定唯一的姓名。

传递函数依赖:A --> B ,B --> C 通过A属性(属性组)的值可以确定唯一的B属性的值,再通过确定的B属性的值可以确定唯一的C属性的值。

举例:通过学号可以确定唯一的系名,在通过系名可以确定唯一的系主任是谁。

码:一张表中,某属性(属性组)的数据被其他列的数据完全依赖,则称此属性(属性组)为候选码,简称:码,该表中的码为:学号+课程名称。

主属性:码中的所有属性

非主属性:除了码中属性组中的所有属性。

关于第二范式百度的解释:非码属性必须完全依赖于候选码,实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

分析:要做到非主属性必须完全依赖于主属性。此时表中主属性为:学号+课程名称。则分数是完全依赖于主属性的,而姓名、系名、系主任是部分依赖于主属性的,因此按着第二范式的规则要将姓名、系名、系主任分离出去。

按着第二范式的要求给它分离成两张表:

我们再去回想一下之前第一范式遇到的问题:

数据冗余、数据添加时存在问题、数据删除时存在问题。

我按着第二范式分离之后发现:数据已经冗余的负面问题了。但是当数据添加时比如:仅仅是添加一个系名和系主任还会有姓名必须不为NULL的不合法问题。当删除数据时:张无忌毕业了,删除它的数据则会连带着系名跟系主任一同删除。此操作还是不合理。

3、第三范式:在第二范式的基础上更近一层,确保每个属性和主属性都直接相关,而不是间接相关。

分析:姓名和系名是直接相关的,系名和系主任是直接相关的,但是姓名和系主任是间接相关的。因此就有了第三张表。

此时继续来看第二范式没解决的添加数据和删除数据的问题:添加数据时:添加系名和系主任此时不会在影响到学员的姓名,删除数据时:张无忌毕业了,删除它的数据时并不会将系名+系主任删除。

总结:

第一范式是为了保证每个数据项都是不可分割的最小原子项。

第二范式是为了在第一范式的基础上消除部分函数依赖。

第三范式是为了在第二范式的基础上消除传递依赖。

数据库设计时虽然有六大范式,但只要满足前三个范式我们的数据库设计就会非常的合理。

java三大范_Java深度学习系列——数据库的三大范式相关推荐

  1. 辣鸡准备稍微碰一下深度学习系列(1/21)---上

    Hello Tensorflow(2.3.0)集ctrlCV之大成 -- MNIST 手写数字检测上 前BB MNIST数据集 一.是啥玩意? 二.怎么得到? 第一种:找大腿(keras) 第二种:伸 ...

  2. 【人工智能】深度学习、数据库选择和人工智能的革命;人工智能是解锁IoT潜力的钥匙

    深度学习(DL)和人工智能(AI)已经不再是科幻小说中遥不可及的目标,目前已成为了互联网和大数据等领域的前沿研究内容. 由于云计算提供强的计算能力.提出的先进算法以及充裕的资金,这创造了五年前难以想象 ...

  3. 深度学习系列:深度学习在腾讯的平台化和应用实践

    深度学习系列:深度学习在腾讯的平台化和应用实践(一) 莫扎特 2015-01-04 6:05:13 大数据技术 评论(0) 深度学习是近年机器学习领域的重大突破,有着广泛的应用前景.随着Google公 ...

  4. java五子棋代码详解_代码详解:Java和Valohai的深度学习之旅

    全文共10735字,预计学习时长22分钟或更长 有一款生命周期管理工具(也称云服务)叫做Valohai,它有着友好的用户界面和简洁的布局设计. 许多有关Valohai的案例和文档都是基于Python和 ...

  5. python系列文章(基础,应用,后端,运维,自动化测试,爬虫,数据分析,可视化,机器学习,深度学习系列内容)

    python基础教程 python基础系列教程--Python的安装与测试:python解释器.PyDev编辑器.pycharm编译器 python基础系列教程--Python库的安装与卸载 pyth ...

  6. 【深度学习系列】——神经网络的可视化解释

    这是深度学习系列的第三篇文章,欢迎关注原创公众号 [计算机视觉联盟],第一时间阅读我的原创!回复 [西瓜书手推笔记] 还可获取我的机器学习纯手推笔记! 深度学习系列 [深度学习系列]--深度学习简介 ...

  7. 【深度学习系列】——深度学习简介

    这是深度学习系列的第一篇文章,欢迎关注原创公众号 [计算机视觉联盟],第一时间阅读我的原创!回复 [西瓜书手推笔记] 还可获取我的机器学习纯手推笔记! 直达笔记地址:机器学习手推笔记(GitHub地址 ...

  8. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  9. python未来人工智能主流_python深度学习,未来人工智能三大境界的划分

    原标题:python深度学习,未来人工智能三大境界的划分 仙侠小说想必很多人都看过,里边让小编久久不能忘怀的便是这些修仙之人的境界划分情况.同样,在我们生活当中,清朝学者王国维曾用三句古诗词来诠释人生 ...

最新文章

  1. 6个快速优化回归测试套件的方法,你都知道吗?
  2. python调用math函数log_Python中求对数方法总结
  3. TensorFlow版本
  4. SAP项目文档 清单 考核标准
  5. line和spline_探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)
  6. 深度学习李宏毅PPT学习笔记一(深度学习介绍)
  7. 【BZOJ-14492895】球队收益球队预算 最小费用最大流
  8. scp从另一台服务器下载或者上传文件
  9. 如何做一个淘宝客(前期为自己省钱)
  10. DVWA模块使用教程(二)
  11. 校园一角 四年级计算机课,校园一角的四年级作文5篇
  12. 坚果pro2刷回官方_锤子坚果Pro2手机降回6.0.3版本教程
  13. R plot图片背景设置为透明_万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等...
  14. 什么是SMART原则?SMART原则是什么意思?
  15. PS工作记录——图片元素复制,智能抠图
  16. ggggggggggg
  17. Office 365导出PDF带备注页
  18. 【更新】【Windows Server 2019】存储服务器的配置和管理——iSCSI的安装和配置(上)
  19. Android实战:CoolWeather酷欧天气(加强版数据接口)代码详解(上)
  20. iOS开发系列--数据存取

热门文章

  1. ACL 2019 | 巧用文本语境信息:基于上下文感知的向量优化
  2. 深度思考 | 从BERT看大规模数据的无监督利用
  3. 细水长flow之NICE:流模型的基本概念与实现
  4. Java第三章 类和对象3.1+3.2
  5. python js 效率_巧用 db.system.js 提升20% 开发效率
  6. 华为c语言编程规范_单片机开发之C语言编程基本规范
  7. php简单网页制作代码,用HTML和CSS以及JS制作简单的网页菜单界面的代码
  8. python function terminated_calibre 打不开也转不了 并且出现错误 mobi转docx
  9. python 单点登录_清华园计算机系联合推出的Java+Python视频曝光
  10. 【多线程高并发】深入浅出原子性