数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解

在设计数据库的时候,虽说将我们要的数据正确完整导入数据库是很关键的,但是对于数据库的设计者来说,如何将大量数据合理有效正确地导入数据库中也是极其关键的,好的数据结构不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询、窗体、报表、代码等)。所以数据库设计者在设计数据的过程中,按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。

函数依赖

在题几种范式之前,我们要先了解下函数依赖
定义:

说明:函数依赖是数据依赖的一种,它反映了同一关系属性之间的约束关系。函数依赖理论是关系范式的理论基础。
几种函数依赖

  • 平凡函数依赖和非平凡函数依赖
  • 简单的说就是A属性依赖于B(B为码),若B包含A中,则为平凡函数依赖,反之为非平凡函数依赖
  • 完全函数依赖和部分函数依赖

    例如关系(sno,cno,grade,sdept)//学号 课程号 分数 系
    grade完全依赖于主码(sno,cno)//必须要有学生的学号,所选修的课程号,才能知道该门课程的成绩
    sdept部分依赖于主码(sno,cno)//只要知道学生的学号,就能知道学生所在的系,不需要知道课程号
  • 传递函数依赖
    理解:即一个属性B依赖于A(A->B),属性C依赖于B(B->C),则C传递依赖于A

  • 候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
  • 主码:若一个关系中有多个候选码,则选定其中一个为主码。
  • 外码:同时在两个表中,用来连接两个表的某个属性。

主属性、非主属性、全码

包含在任意候选码中的属性叫做主属性,不包含在任意候选码中的属性叫非主属性(注意:关系的候选码可能有多个,能确定多个主属性)
全码:整个属性组都是码,成为全码。

第一范式

如果一个关系模式所有属性都是不可分的数据项,称这个关系满足第一范式
说明:第一范式是关系模式最起码的要求,如果不满足第一范式,不能称为关系。

对于上面这个表,商品属性可以分为商品名称和商品数量,即存在表中有表的现象,不满足第一范式

第二范式

定义:若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。
第二范式要求,表中所有的实例必须可以被唯一地区分
不满足第二范式造成数据冗余
在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,因此此种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外关键字课程号联系,在需要时进行连接。

一个不满足第二范式的例子

关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade),其中Sno, Sdept, Sloc, Cno, Grade依次表示学生的学号、所在的系、住处、课程号、班级,并且每个系的学生住在同一个地方。可知S-L-C的码为(Sno, Cno)


函数依赖

根据定义“每一个非主属性完全函数依赖于任何一个候选码”判断,这里面Sdept和Sloc都部分依赖(虚线表示)于主码(sno,cno),即存在非主属性部分函数依赖于码,不符合第二范式。

第三范式

定义:如果关系模型R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。
说明:要每个非主属性既不部分依赖于码,也不传递依赖与码,如果R符合第三范式则R符合第二范式。

不符合的例子
关系S-L(sno,sdept,sloc)中
函数依赖

我们可以得到

即关系存在非主属性对码的传递函数依赖,所以不符合第三范式

BC范式(BCNF)

定义: 关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>属于BCFN。
说明:BC范式是构建在第三范式的基础上,如果关系模型R满足第三范式,且每个属性都不传递依赖于R的候选键,那么称R满足BC范式
若R符合BCNF
有:
所有非主属性对每一个码都是完全函数依赖;
所有主属性对每一个不包含它的码也是完全函数依赖;
没有任何属性完全函数依赖于非码的任何一组属性。//所依赖的都是码或者说每个决定因素都含码

不符合BC范式的例子
关系SJP(S,J,P)S表示学生,T表示教室,J表示教室
函数依赖


关系SJP符合第三范式:没有任何非主属性部分函数依赖或传递函数依赖于码
关系SJP不符合BC范式:(S,J)依赖于T ,T是决定因素,但是T不含码

第四范式

设R是一个关系模型,D是R上的多值依赖集合。如果D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。

例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。

数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解相关推荐

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

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

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

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

  3. java的第一范式,数据库第一范式第二第三范式关系详解

    一.范式的定义 程序员在做数据库设计时不是心血来潮胡乱设计的,而是需要遵循一定的规范而为之,这些规范就是为了设计出合理而实用的数据库而总结的的,专门适用于任何关系型数据库. 数据库设计在很大程度上取决 ...

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

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

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

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

  6. 第一二三范式的简单理解

    第一范式(无重复的列) 定义:数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项.如果实体中的某个属性有多个值时,必须拆分为不同的属性 通俗解释:一个字段只存储一项信息 ...

  7. 数据库的三范式及BC范式

    数据库的三范式及BC范式 依赖 三范式 第一范式(1NF):唯一性,数据列不可再分割 第二范式(2NF):唯一性,消除非主键元素/列对组合主键中部分元素/列的依赖 第三范式(3NF):独立性,消除传递 ...

  8. 数据库逻辑设计之三大范式,一看就懂

    数据库逻辑设计之三大范式 第一范式 第二范式 第三范式 反范式化 范式化设计和反范式化设计的优缺点 范式化 反范式化 第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解: 表:字段1. ...

  9. 数据库关系范式——第一范式、第二范式、第三范式、BC范式【通俗易懂,博主会讲人话】

    范式:是符合某一种级别的关系模式的集合. 说白了,就是对关系模式的一种规范化. 范式分为:第一范式.第二范式.第三范式.BC范式.第四范式.第五范式.后面两种在这里不讨论. 1.第一范式(1NF):关 ...

最新文章

  1. 站在历史的长河中做农活
  2. 大数据竞赛平台——Kaggle 入门篇
  3. tf.data.Dataset.from_tensor_slices() 详解
  4. 黄聪:C#代码生成工具:文本模板初体验 Hello,World!
  5. 比特币中的密码学知识汇总
  6. WeUI首页、文档和下载 - 专为微信设计的 UI 库 - 开源中国社区
  7. js逆向案例-过加速乐
  8. 嵌入式linux开发实战——项目1认识嵌入式系统
  9. WDM驱动安装和卸载
  10. git rebase 和 gite merge 区别
  11. lasso回归python代码_LASSO回归代码实现 坚韧不拔|静水流深|读书|写作|博雅|数据分析|Python|商业|独立·独特·自立门户 kebook...
  12. 基于Java+Dubbo设计的智能公交查询系统
  13. 计算机网络接入网类型有哪些,《网络技术》接入网(AN)包括哪些类型?计算机等级考试...
  14. 计算机光线太强哪里调整,电脑光线太强怎么调暗
  15. Vue 定义全局方法
  16. SIP注册信令消息示范及解释
  17. 安卓sdk自带模拟器的使用
  18. ArcBlock 分享 | 在国外,没有中国人参与的项目就不投
  19. Python爬虫——教你js逆向爬取网易云评论
  20. 广东省乡村快递寄件数据分析-快递100百递指数

热门文章

  1. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
  2. php卡片式,卡片式设计的优点和不适用性
  3. mysql InnoDB存储引擎的介绍
  4. IndentationError: unindent does not match any outer indentation level问题
  5. append html 是字符串,jquery .html()vs .append()
  6. MySQL---- 自定义函数(FUNCTION)
  7. 使用 redis 中的 lzf 压缩算法
  8. 如何解决java中的安全问题_如何解决java中“使用了未经检查或不安全的操作 请使用 -Xlint:unchecked 重新编译 ”的问题...
  9. MOS管与三极管比较及应用
  10. wifi网络接入原理(中)——认证Authentication