数据库的第一范式、第二范式、第三范式,BCNF范式

  • 四大范式的基本概念
    • 是否规范化的程度越高越好?
    • 名词解释
  • 范式优化实例
    • 一个特别糟糕的关系模式
    • 第一范式
    • 第二范式
    • 第三范式
    • BCNF范式

此文章用于本人期末复习,适合对数据库范式分析还有一点记忆的同学,在此不多赘述各范式的概念

四大范式的基本概念

第一范式:不存在表中有表的情况,每一属性都不可再分
第二范式:在第一范式的基础上消除了非主属性对码的部分函数依赖
第三范式:在第二范式的基础上消除了非主属性对码的传递函数依赖
BCNF:在第三范式的基础上消除了主属性对于码的部分与传递函数依赖
可以把范式理解成一个关系模式升级的过程。
虽然满足越高范式所带来的表会更多,看似管理起来会更麻烦,但是在实际做表的增删改(查例外)时你就会发现单个表的结构越简单你修改的思路就会越清晰。特别是在做大型的数据库设计时,一般要满足三范式以上的规范程度。
但是

是否规范化的程度越高越好?

这要根据需要来决定,因为“分离”越深,产生的关系越多,关系过多,连接操作越频繁,
而连接操作是最费时间的,特别对以查询为主的数据库应用来说,频繁的连接会影响查询速度。所以,关系有时故意保留成非规范化的,或者规范化以后又反规范了,这样做通常是为了改进性能。
反规范的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相应带来的问题是可能出现数据的完整性问题。加快查询速度,但会降低修改速度。
因此决定做反规范时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的性能特点,好的索引和其它方法经常能够解决性能问题,而不必采用反规范这种方法。【此段引用这里:是否规范化的程度越高越好?】

名词解释

要想完全理解以上范式的概念,还需掌握以下几个名词的含义:
码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。

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

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

范式优化实例

下面就用一个特别糟糕的关系模式作为例子,一步步优化成最高BCNF范式

一个特别糟糕的关系模式

首先,仓库和管理员之间是1对1的关系,仓库名和物品名间是多对多,且和进货数量也是多对多。物品名和物品种类编号是多对1,和种类名也是多对1,物品名和进货单价是1对1。

[仓库进货物品表]

很明显这个关系模式属于表中有表的情况。

第一范式

所以为了满足第一范式这里我们把进货数量,和进货单价分开来。

[仓库进货物品表]

这里的码为:仓库名,管理员,物品名,其他为非主属性
(仓库名,管理员,物品名)->进货数量;
(物品名)->物品种类编号,物品种类名,进货单价
可以看出,非主属性 “物品种类编号、物品种类名、进货单价” 都只存在对 “物品名” 存在依赖,与其他码 “仓库名、管理员” 都没有关系,属于对码的部分依赖

第二范式

所以为了满足第二范式我们把
(物品名)->物品种类编号,物品种类名,进货单价
单独分出一个表

[仓库管理物品表]

[物品信息表]

继续看这个物品信息表
(物品名)->物品种类编号,物品种类名,进货单价
而实际上物品种类名只依赖与物品种类编号,即
(物品种类编号)->物品种类名
(物品名)->物品种类编号
这里存在非主属性 “物品种类编号” 对主属性 “物品名” 的传递函数依赖

第三范式

所以为了满足第三范式我们将
(物品种类编号)->物品种类名
单独分出一个表
[物品信息表]

[物品种类表]

BCNF范式

我们再来看之前的
[仓库管理物品表]

仓库名 → 管理员,管理员 → 仓库名
(仓库名,物品名)->(物品名,数量)
(管理员,物品名)->(仓库名,数量)
这里的管理员和仓库名作为主属性又作为该表的码存在互相依赖的关系,属于主属性对于码的部分与传递函数依赖,所以为了满足BCNF范式我们将
仓库名 → 管理员
单独分出一个表,最后达到BCNF范式的关系模式如下图

如果还有不清楚的部分,可以参考这位大佬的,对于函数部分依赖,和传递依赖做了更详细的解释。
参考文档

数据库的第一范式、第二范式、第三范式,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. 第一范式,第二范式,第三范式,BCNF范式理解

    基础知识 实体:现实世界中客观存在并可以被区别的事物.比如"一个学生"."一本书"."一门课"等等.值得强调的是这里所说的"事物& ...

  8. 数据库的第一范式,第二范式,第三范式

    https://www.cnblogs.com/JTrun/p/11069652.html 第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和 ...

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

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

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

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

最新文章

  1. 7 个小仙女花3年时间写了一本1200页的机器学习算法手册(限时开放下载)
  2. PHP利用CURL_MULTI实现多线程
  3. 怎样使用Secure CRT查看vcenter和esxi主机的日志文件
  4. android 让item满屏,Android的全屏活动?
  5. CobaltStrike使用
  6. php中使用httpclient
  7. 中国双氢青蒿素市场趋势报告、技术动态创新及市场预测
  8. 1.2 SQL注入原理-手工联合查询
  9. windows11 美化桌面图标后报错
  10. Arduino测试一块5路非自锁开关量输入模块ardunio中断编程示例
  11. 软考_2021年11月真题
  12. 翻译Allegorithmic的文档《THE PBR GUIDE - PART 1》
  13. 通过对抗网络实现具有身份和姿态鲁棒性的表情识别
  14. matlab 蜗杆轮廓,solidworks环面蜗杆画法
  15. 去中心化应用:区块链技术概述
  16. Unity和AndroidStudio交互制作SDK并和其他的SDK合并(微信APP支付)
  17. 技术实践|Redis基础知识及集群搭建(上)
  18. Objective-C基础教程读书笔记(3)
  19. Linux:开发:valgrind报错问题总结(2022新)
  20. 【微软chatGPT版bing上线了,使用体验如何,符合你的需求吗?】

热门文章

  1. 五子棋游戏初次编写尝试
  2. PHP多功能Youngxj工具箱/在线站长工具箱源码
  3. 中国知名个人站长排行TOP91
  4. mbedtls | 10 - 数字证书及 X.509 证书标准
  5. [80386]80x86汇编指令
  6. 2017最新版《土地利用现状分类》GBT 21010-2017‰
  7. MFC 对话框常用控件详解
  8. 根据城市首字母进行分类,区分多音字,获取城市首字母
  9. linux 开启共享文件,文件夹共享权限设置,linux设置文件夹权限-
  10. 提示msvcr71.dll丢失处理办法