# 三范式

范式

 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
注意: 巴斯-科德范式(BCNF)属于第三范式

我们平时能用到的也就到前三范式,所以我也主要针对前三范式做了了解

三大范式

  • 1范式(1FN)
    • 设 R 为任一给定关系,若果 R 中每个列与行的交点处的取值都是不可再分的基本 元素,则 R 为第一范式。即:一张表中的属性和属性值都不可再分,这样的表满足于1范式
    • 缺点:
      • 冗余高
      • 插入操作异常
      • 删除操作异常
  • 2范式(2FN)
    • 设 R 为任一给定关系,若 R 为 1NF, 且其所有非主属性都完全函数依赖于候选关键字,则 R 为第二范式。即:2NF是要求记录有惟一标识,即实体的惟一性
  • 3范式(3FN)
    • 设 R 为任一给定关系,若 R 为 2NF, 且其每一个非主属性都不传递函数依赖于候选关键字,则 R 为第三范式。即:首先要满足第二范式,其次非主属性之间不存在函数依赖
  • 4范式的改进形式BCNF
    • 设 R 为任一给定关系,X、Y 为其属性集,F 为其函数依赖集,若 R 为 3NF,且其 F 中所有函数依赖 X→Y(Y 不属于 X)中的 X 必包含候选关键字,则 R 为 BCNF。
    • 一个满足BCNF的关系模式的条件:
      • 所有非主属性对每一个码都是完全函数依赖。
      • 所有的主属性对每一个不包含它的码,也是完全函数依赖。
      • 没有任何属性完全函数依赖于非码的任何一组属性。
  • 范式的转换

    • 1范式转2范式

      • 找到候选关键字,看其余的属性是否完全函数依赖候选关键字, 是的,与候选关键字一同抄下来形成一个表格, 不是的,抄下来,形成第二个表格,并且将候选关键字里能够唯一决定表格 2 的属性组抄在第一列
    • 2范式转3范式
      * 找到表格中的传递函数依赖关系的三个属性组,设为 x,y,z 将这三个属性组拆成两个表格
      第一个表格为 x,y
      第二个表格为 y,z

    • 3NF->BCNF
      • 列出表格中的所有函数依赖关系
        每个关系拆出一个表格

数据库 三范式 BCFN的更多相关文章

  1. Java面试题之数据库三范式是什么

    为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际 ...

  2. Java面试题之数据库三范式是什么?

    什么是范式? 简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系.所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式.在关系型数据库中这些规范就可以称 ...

  3. sqlserver数据库三范式的理解

    从来都是听过概念,过一段时间就忘记了,根本就没有深入的理解.这次梳理一遍,用自己的方式记录一下. 1nf 原子性,不可拆分性 例如一张表里包含一个class属性(软件系,外语系,经贸系...)字段,这 ...

  4. MySQL-数据库三范式

    数据库三范式 (1)第一范式(1NF): 定义:每一列都是不可分割的原子数据项(强调的是列的原子性): 例:一个表:[联系人](姓名,性别,电话) 如果在实际场景中,一个联系人有家庭电话和公司电话,那 ...

  5. MySQL-- 数据库的三范式

    目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式). 而通常我们用的最多的就是第一范 ...

  6. 数据库设计范式1——三范式

    一讲到数据库设计,大家很容易想到的就是三范式,但是第四.第五范式又是什么,不是很清楚,三范式到底怎么区分,也不清楚,作为数据库设计的基础概念,我再讲解下数据库范式.   Normal form Bri ...

  7. SQL数据库设计三范式

    关系型数据库将数据库设计需要遵循的一些规则叫做“范式”,最基本的三个范式(1NF.2NF.3NF)简称三范式.第一范式是满足第二范式的基础,而第一.二范式又是满足第三范式的基础. 第一范式 表中的字段 ...

  8. mysql数据库的三范式的设计与理解

    一般的数据库设计都需要满足三范式,这是最基本的要求的,最高达到6NF,但是一般情况下3NF达到了就可以 一:1NF一范式的理解: 1NF是关系型数据库中的最基本要求,就是要求记录的属性是原子性,不可分 ...

  9. mysql 数据库的设计三范式

    三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物 ...

随机推荐

  1. 【react学习二】create-react-app 接入antd 并按需加载组件

    1.安装 cnpm i babel-plugin-import --save-dev 2.使用 在根目录下的package.json下的bable中添加相应代码 "babel": ...

  2. python之路day14--嵌套函数、匿名函数、高阶函数。函数的递归

      嵌套函数 函数里不仅可以写代码,还可以嵌套函数 name = "小猿圈" def change(): name = "小猿圈,自学编程" def chang ...

  3. Python 时间序列

    Python - 时间处理模块 datetime - 常用模块 官方文档 time calendar

  4. 第二章 psql客户端工具

    第二章 psql客户端工具 pgAdmin是一款功能丰富.开源免费的PostgreSQL图形化工具.psql是PostgreSQL自带的命令行工具,功能全面,是PostgreSQL数据库工程师必须熟练 ...

  5. java初学者的Springmvc04笔记

    Springmvc04 Springmvc的全局异常处理 springmvc与spring的整合 myBatis 1.Springmvc的全局异常处理 作用:一次配置,对于controller层的所有 ...

  6. python导入不同目录下的自定义模块

    一.代码目录结构 自定义的模块在Common包下,Study文件下SelectionSort.py文件导入自定义的模块 二.源码 2.1:SelectionSort.py文件   python导包默认 ...

  7. LCA模板 ( 最近公共祖先 )

    LCA 有几种经典的求取方法.这里只给出模板,至于原理我完全不懂. 1.RMQ转LCA.复杂度O(n+nlog2n+m) 大致就是 DFS求出欧拉序 => 对欧拉序做ST表 => LCA( ...

  8. django model序列化作用举例

    一直对使用DRF的了解停留在一知半解的状态,今天在实际操作中,感受到了DRF带来的方便 Django工程,其中两个model定义如下: AutomationHeadRaw: class Automat ...

  9. Spring Cloud架构教程 (三)服务网关(基础)

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

  10. Centos7系统备份与恢复教程

    原文地址:https://www.cnblogs.com/fang888/p/8473485.html Centos系统备份与恢复教程 tar: 特点 1.保留权限 2.适合备份整个目录 3.可以选择 ...