基础知识
实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,比如说“老师与学校的关系”。

属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。

元组:表中的一行就是一个元组。

分量:元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。

码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。

全码:如果一个码包含了所有的属性,这个码就是全码。

主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。

非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。

第一范式
第一范式列不能再分。

第二范式
第二范式建立在第一范式的基础上,非主属性完全依赖于码。
简单说:消除部分依赖。

(什么是码?) 表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。注意码可以包含多个属性。

要理解第二第三范式需要理解完全函数依赖、部分函数依赖、传递函数依赖。

完全函数依赖
定义:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

比如通过学号->姓名

部分函数依赖
定义:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

需要借用知乎刘慰教师的例子用一下,自己也理解了很长时间。

码用(学号+课程),为什么要加课程呢?因为不同课程成绩是通过学号查不出来的。

不过用(学号+课程)当作码是不是有些问题?

(学号+课程)->姓名,但是学号->姓名

(学号+课程)->系名,但是学号->系名

(学号+课程)->系主任,但是学号->系主任

这个就是部分依赖,说实话我看定义一脸懵逼。

要是上面那张表符合第二范式。需要将表拆分为两张表。

一张是 学号、课程、分数表

另外一张是 学号、姓名、系名、系主任表

传递函数依赖
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

https://blog.csdn.net/rl529014/article/details/48391465

采用这位大佬的例子
在关系R(学号 ,宿舍, 费用)中,(学号)->(宿舍),宿舍!=学号,(宿舍)->(费用),费用!=宿舍,所以符合传递函数的要求

第三范式
满足第二范式的条件下不存在传递函数依赖。

要满足第三范式,在分成两张表的时候第二张表还是有问题?

学号->系名,系名->系主任 传递依赖。

需要将系名和系主任另外新建一张表。

总结:
第一范式:简单说 列不能再分

第二范式:简单说 建立在第一范式基础上,消除部分依赖

第三范式:简单说 建立在第二范式基础上,消除传递依赖。

码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。

主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。

非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

BCNF范式
https://www.2cto.com/database/201404/290140.html

BCNF是3NF的改进形式

一个满足BCNF的关系模式的条件:

  1.所有非主属性对每一个码都是完全函数依赖。

  2.所有的主属性对每一个不包含它的码,也是完全函数依赖。

  3.没有任何属性完全函数依赖于非码的任何一组属性。

如上表

(仓库名,管理员)->(物品名,数量)

(管理员,物品名)->(仓库名,数量)

但是(仓库名)->(管理员) 不满足第二条

所以需要改成两种表:

第一张:仓库名,管理员

第二张:仓库名,物品名,数量

第一范式,第二范式,第三范式,BCNF范式理解相关推荐

  1. MySQL (4) 第一范式 第二范式 第三范式 BC范式

    第一范式 第一范式:所有属性都是不可分割的原子值. 也就是每个属性都是不可再分的. 例如下图就不符合第一范式的要求 实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS) ...

  2. 第一范式 第二范式 第三范式 BC范式

    第一范式 第一范式:所有属性都是不可分割的原子值.  也就是每个属性都是不可再分的.  例如下图就不符合第一范式的要求   实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RD ...

  3. 第一范式 第二范式 第三范式理解

    数据库中设计一个好的标准化范式能大大减少数据冗余,增强数据的易操作性. 范式的演变: 第一范式:表中没有重复数据组 属性不可以再分,具有一个主键(主键组) 例如: 出现从重复的数据组,把它转换为第一范 ...

  4. 第一范式第二范式第三范式学习笔记

    三楚白云生佛手,九江寒月照禅心. --李日华<佛手岩> 文章目录 前言 一.第一范式(1NF) 二.第二范式(2NF) 三.第三范式(3NF) 四.参考学习视频 五.名词解释&知识 ...

  5. 数据库第一范式、第二范式、第三范式、BCNF范式

    文章目录 什么是"范式(NF)" 1. 第一范式(1NF) 2. 第二范式(2NF) 2.1 函数依赖 2.1.1完全函数依赖 2.1.2 部分函数依赖 2.2 码 2.3 非主属 ...

  6. 数据库 部分函数依赖 完全函数依赖 传递函数依赖 第一范式、第二范式、第三范式、BCNF范式区别

    数据库 部分函数依赖 完全函数依赖  传递函数依赖  第一范式.第二范式.第三范式.BCNF范式区别 在理解函数依赖之前,先来看一下函数依赖分析: 在关系中,包括在任何候选码中的属性称为主属性:不包括 ...

  7. 【数据库】范式理解:1NF,2NF,3NF,BCNF,4NF详析

    数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析 引言 范式种类 第一范式(1NF) 符合1NF的关系中的每个属性都不可再分 存在问题 第二范式(2NF) 在1NF基础上消除了非 ...

  8. 关于1NF、2NF、3NF、BCNF范式

    首先要明白"范式(NF)"是什么意思.按照教材中的定义,范式是"符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度".很晦涩吧?实际上 ...

  9. mysql中bcnf_请问数据库设计中BCNF范式是什么意思?

    展开全部 BCNF范式在3NF基础上消除对主码子集的62616964757a686964616fe78988e69d8331333431373230依赖. 以仓库管理关系表为例:仓库号,存储物品号,管 ...

最新文章

  1. R语言实战应用精讲50篇(十五)-R语言如何实现数据的导入导出操作
  2. 重新使用Eclipse建立安卓工程遇到的问题
  3. 大数据互联网架构阶段 Spring框架导致的406错误
  4. 微软想让你跟机器人说句话就把事办了
  5. RHEL5.5学习--LAMP环境的安装顺序及主要软件
  6. JCGridMenu
  7. python结构体字节对齐_Python及字节对齐的问题
  8. 2. Zend_Controller 快速入门
  9. Linux ARM平台开发系列讲解(网络篇)1.2 MDIO总线驱动框架分析
  10. .axf文件_一文看懂hex文件、bin文件、axf文件的区别
  11. 弘辽科技:DSR的含义是?怎么提升DSR评分?
  12. 中国联通5G网络架构
  13. 用python的xlwings模块实现excel工作表批量隐藏和取消隐藏
  14. C++输入输出的格式控制2
  15. h5微信本地调试 vue_UniApp本地调试H5(谷歌chrome浏览器)跨域问题的解决方法,亲测可用...
  16. Linux系统中sit0是做什么的
  17. 手机通过IP访问电脑(端口、网站),手机以及电脑IP查看,防火墙开放指定端口设置。
  18. Failure to find xxx:jar:0.0.1 in https://repo.maven.apache.org/maven2 was cached in the local re
  19. servlet登录验证并返回错误信息
  20. 计算机课导入语,信息技术课的提问和导入技巧

热门文章

  1. LintCode 1683. 杀怪兽(队列)
  2. 数据结构--队列Queue--循环顺序队列
  3. 系统错误_Win10系统提示0x80004005错误的解决方法
  4. html怎么修改锚点的属性,在HTML中设置自定义锚点
  5. linux视频在windows播放器,适用于Windows和Linux的免费多媒体播放器SMPlayer 18.6.0发布 - 爱绿豆...
  6. day24 反射\元类
  7. MySQL日志详细说明
  8. python---str和repr
  9. CentOS 6快捷安装RabbitMQ教程
  10. 解决sublime3不能编辑插件default settings的问题