https://blog.csdn.net/wyh7280/article/details/83350722

范式通俗理解:1NF、2NF、3NF和BNCF
原创hongiii 最后发布于2018-10-24 21:03:43 阅读数 14993 收藏
展开
范式通俗理解:1NF、2NF、3NF和BNCF
准备知识
超键、候选键、主键
函数依赖
部分依赖
传递依赖
范式
1NF
2NF
3NF
BCNF
参考
准备知识
超键、候选键、主键
超键
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键

候选键
候选键(candidate key):不含有多余属性的超键称为候选键。也就是关系中的一个属性组,其值能唯一标识一个元组。若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选键。

主属性:任何一个候选键中的属性称作主属性。(请记住这个概念)

主键
主键(primary key):用户从一个关系的多个候选键中,选定一个作为主键。

结合具体的例子进行解释,现有学生表如下:
学生(学号,姓名,性别,身份证号)

学号 姓名 性别 身份证号
1 小王 男 344
2 小吴 女 354
3 小丽 女 364
4 小张 男 374
超键
由超键的定义可知,在学生表中含有学号或者身份证号的任意组合都可以唯一标识一个学生,那么它们就是此表的超键。如:(学号)、(身份证号)、(学号,姓名)、(身份证号,性别)等。

候选键
候选键属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。对于(学号、姓名)来说,去掉姓名后仍是一个超键,那么它就不是候选键。其中,学生表中的候选键为:(学号)、(身份证号),主属性就是学号、身份证号。

主键
主键就是候选键里面的一个,用户可以选择,那么在这里我们选择(学号)作为学生表的主键。

键 = 码,英文key。

函数依赖
这里先给出数学描述,再进行通俗解释。

数学描述

通俗理解
函数依赖的英文定义是:
The value of one or a group attributes can decide the value of other
attributes.

很容易理解,也就是一个或者一组属性的值可以决定其他属性的值。候选键都可以做到。

部分依赖
数学描述

通俗理解
部分依赖是什么情况呢?
举个例子,现有一关于学生的关系模式Student(学生编号 , 学生姓名, 班级编号, 院系, 课程编号 , 成绩)
学生编号 学生姓名 班级编号 院系 课程编号 成绩
S01 杨明 D01 思齐 C01 90
S02 李婉 D01 思齐 C01 87
S01 杨明 D01 思齐 C02 92
S03 刘海 D02 述圣 C01 95
S04 安然 D02 述圣 C02 78
S05 乐天 D03 省身 C01 82
(学生编号#、课程编号#)作为主键,可以唯一标识每条元组,但是对于学生姓名、学生所属的班级编号、院系,这三个属性可以直接通过学生编号来确定,在这里课程编号#显得很多余。于是称,学生姓名、班级编号、院系对(学生编号#、课程编号#)部分函数依赖。

即,非主属性对键有部分函数依赖。

主属性:任何一个候选键中的属性称作主属性。
键在这里理解成候选键

传递依赖
数学描述

通俗理解
继续以Student表为例,
学生编号 学生姓名 班级编号 院系 课程编号 成绩
S01 杨明 D01 思齐 C01 90
S02 李婉 D01 思齐 C01 87
S01 杨明 D01 思齐 C02 92
S03 刘海 D02 述圣 C01 95
S04 安然 D02 述圣 C02 78
S05 乐天 D03 省身 C01 82
学生编号可以唯一确定他所在的院系,但是注意到这中间存在传递过程,即学生编号唯一确定该学生所对应的班级编号,班级编号对应唯一的院系。我们称,院系对学生编号传递函数依赖。

即,非主属性对键有部分函数依赖。

主属性:任何一个候选键中的属性称作主属性。

范式
关系数据库中的模式设计要满足一定的规范,引入了范式这一概念。
不管做哪种范式的设计,最终要的思想是“one fact in one place”,也就是“一事一地”。

1NF
定义:关系中每一分量不可再分。即不能以集合、序列等作为属性。(也就是不能表中套表,要保证数据的原子性。)

举例

学生编号 课程编号
S01 {C1,C2,C3}
S02 {C1,C4}
它就不满足1NF,因为{C1,C2,C3}和{C1,C4}是集合。

修改为符合1NF:

学生编号 课程编号
S01 C1
S01 C2
S01 C3
S02 C1
S02 C4
2NF
定义:在1NF基础上,消除非主属性对键的部分依赖,则称它符合2NF。
根据上面对部分依赖的分析,对于Student表:

学生编号 学生姓名 班级编号 院系 课程编号 成绩
S01 杨明 D01 思齐 C01 90
S02 李婉 D01 思齐 C01 87
S01 杨明 D01 思齐 C02 92
S03 刘海 D02 述圣 C01 95
S04 安然 D02 述圣 C02 78
S05 乐天 D03 省身 C01 82
对于学生姓名、学生所属的班级编号、院系,这三个属性可以直接通过学生编号来确定,在这里课程编号#显得很多余。也就是,学生姓名、班级编号、院系对(学生编号#、课程编号#)部分函数依赖。把Student表进行拆分,可以消除部分依赖。

其中,学生表Student如下:

学生编号 学生姓名 班级编号 院系
S01 杨明 D01 思齐
S02 李婉 D01 思齐
S01 杨明 D01 思齐
S03 刘海 D02 述圣
S04 安然 D02 述圣
S05 乐天 D03 省身
学生-课程表如下:

学生编号 课程编号 成绩
S01 C01 90
S02 C01 87
S01 C02 92
S03 C01 95
S04 C02 78
S05 C01 82
符合2NF。

3NF
定义:在2NF基础上,消除非主属性对键的传递依赖,则称它符合3NF。

根据上面对传递依赖的分析,对于Student表,学生编号可以唯一确定他所在的院系,但是注意到这中间存在传递过程,即学生编号唯一确定该学生所对应的班级编号,班级编号对应唯一的院系。我们称,院系对学生编号传递函数依赖。

把Student表继续进行拆分,可以消除传递依赖。

其中,学生表Student如下:

学生编号 学生姓名 班级编号
S01 杨明 D01
S02 李婉 D01
S01 杨明 D01
S03 刘海 D02
S04 安然 D02
S05 乐天 D03
班级-院系表如下:

班级编号 院系
D01 思齐
D02 述圣
D03 省身
符合2NF。

BCNF
我当时在看BCNF的时候,这块是最懵的地方,网上找的例子五花八门……解释和过程感觉没有比较详细的,最后反正得到了一个结果orz。我本来想把这个范式按照类似的定义来写的……但是到BNCF发现不能直接写成“在3NF基础上,消除主属性对键的部分依赖、传递依赖,则称它符合BCNF。”

因为这样不太好解释,故而调整了方案。我认为,理解更重要。

先给个文绉绉的定义

换言之,对于关系模式R,如果每一个函数依赖的决定因素都包含键,则R属于BCNF范式。

现在举例,现有关系模式:通讯(城市名,街道名,邮政编码)

函数依赖关系集为:
F={(城市名,街道名)-> 邮政编码,邮政编码 -> 城市名}
也就是一个城市名和一个街道名,对应一个邮政编码;一个邮政编码对应一个城市名。

此时,候选键(城市名,街道名)非主属性邮政编码完全依赖于候选键,且无传递依赖,属于3NF。

那么它是否属于BCNF呢?我们按照下面的定义来看一下,

换言之,对于关系模式R,如果每一个函数依赖的决定因素都包含键,则R属于BCNF范式。

对于决定因素(城市名,街道名),它包含键(城市名,街道名),其实它本身就是键了,没问题;
对于决定因素邮政编码,它不包含键(城市名,街道名)

所以它不属于BCNF。在关系模式R中,如果每一个决定因素都包含码,则R属于BCNF。
————————————————
版权声明:本文为CSDN博主「hongiii」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wyh7280/article/details/83350722

范式通俗理解:1NF、2NF、3NF和BNCF的更多相关文章

  1. 一看就懂的数据库范式介绍(1NF,2NF,3NF,BC NF,4NF,5NF)

    原文:http://josh-persistence.iteye.com/blog/2200644 一.基本介绍 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称 ...

  2. 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解

    [转] 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解     本文对大多数初学数据库原理的同学绝对是个大福利,哈哈,完完整整的看完此篇博文一定能够清晰地理解数据库的四大范式.    ...

  3. 数据库三大范式(1NF,2NF,3NF)及ER图

    数据库三大范式(1NF,2NF,3NF)及ER图 百度官方解释: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据 ...

  4. 数据库范式1NF 2NF 3NF详细阐述

    范式:关系数据库中的关系是要满足一定要求的,满足不同程度要求的不同范式.满足最低要求的叫第一范式,简称1NF ,在第一范式中满足进一步要求的为第二范式,其余以此类推.通俗来说是满足数据库关系表中的一套 ...

  5. 数据库范式(1NF/2NF/3NF)

    本文转载自数据库范式(1NF/2NF/3NF) 概述 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式 ...

  6. 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

    1NF | 2NF | 3NF的区分以及什么是函数依赖.部分函数依赖.值传递依赖 符合3NF一定符合2NF.一定符合1IF 简单区分.2NF不存在部分函数依赖,3NF不存在传递函数依赖 第一范式1NF ...

  7. [MySQL] 关系型数据库的设计范式 1NF 2NF 3NF BCNF

    一.缘由: 要做好DBA,就要更好地理解数据库设计范式.数据库范式总结概览: 为了更好地理解数据库的设计范式,这里借用一下知乎刘慰老师的解释,很通俗易懂.非常感谢!   二.具体说明: 首先要明白”范 ...

  8. 数据库范式(1NF 2NF 3NF BCNF)

    http://blog.csdn.net/xuxurui007/article/details/7738330 http://www.cnblogs.com/laodao1/archive/2009/ ...

  9. 【转】数据库范式(1NF 2NF 3NF BCNF)详解一

    以下内容转自:http://jacki6.iteye.com/blog/774866 --------------------------------------------分割线---------- ...

随机推荐

  1. intellij idea svn 切换分支

    原文地址:https://blog.csdn.net/wangjun5159/article/details/75137964 切换分支 更新/切换svn的快捷键是ctrl+T,这个快捷键还是很好用的 ...

  2. .NET 框架设计 - 模式、配置、工具 Demo 搜索

    ps:http://www.ituring.com.cn/article/195770 看完第二章,我也忍了!但是随着第三章“副本”的开启,我的阅读速度开始慢慢的减缓,虽然对其中每一个程序模式的理论也 ...

  3. 一次完整的OCR实践记录

    一.任务介绍 这次的任务是对两百余张图片里面特定的编号进行识别,涉及保密的原因,这里就不能粘贴出具体的图片了,下面粘贴出一张类似需要识别的图片. 假如说我的数据源如上图所示,那么我需要做的工作就是将上 ...

  4. echats 的使用

    第一步在我们的电脑上百度搜索echarts,点击进去,如下图所示: 2 第二步进去之后,点击下载,选择要下载的echarts版本,一般选择源代码,如下图所示: 3 第三步下载完成之后,我们也可以来使用 ...

  5. linux--->阿里云centos6.9环境配置安装lnmp

    阿里云centos6.9环境配置安装lnmp mysql安装 本人博客:http://www.cnblogs.com/frankltf/p/8615418.html PHP安装 1.安装依赖关系 yu ...

  6. Linux守护进程之systemd

    介绍 历史上,Linux 的启动一直采用init进程:下面的命令用来启动服务. $ sudo /etc/init.d/apache2 start # 或者 $ service apache2 star ...

  7. yield 伪并发例子

    import timedef custumer(name): print('%s 准备吃饺子了'%name) while True: curry = yield print('饺子%s来了 ,被%s吃 ...

  8. 虚拟机 ubuntu系统忘记密码如何进入

    重启 虚拟机 按住shift键 会出现下面的界面 按住‘e’进入下面的界面往下翻 更改红框勾到的字符串为:  rw init=/bin/bash 然后按F10进行引导 然后输入 :”passwd”  ...

  9. Docker(一):理解Docker镜像与容器

    一.镜像的概念 1.广泛镜像概念: 镜像是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在完全相同的副本即为镜像. 2.Docker镜像概念: 在Docker中镜像同样是一种完全 ...

  10. 阿里云Redis性能测试结果(1个集合存300万数据,查询能几秒返回结果)

    现状: 1.买了一台主从的阿里云Redis,内存就1GB. 2.查询了阿里云的帮助,没有找到性能相关的说明, 有的也是4GB版本的并发性能 3.提工单问客服 一个集合里有300万数据,单次查询性能大概 ...