设为首页 加入收藏

TOP

数据库三大范式总结
2017-09-25 08:58:56 】 浏览:557
Tags:数据库三大 范式 总结

数据库范式最基础的范式为第一范式(1NF)、第二范式(2NF)、第三范式(3NF),还有更高层次的范式,但太过于复杂,我们先来学习一下最基本的范式。

第一范式(1NF):定义:关系表中行必须是唯一且属性是原子性的。当我们看到这句话是不是很懵逼,下面我们一一来分析。

什么是所谓的行唯一呢?

第一:既然是唯一,那么它在行中的某一标识必须是已知而非未知即不能为空

第二:唯一也就是说不能重复

第三:怎么保证行唯一呢?通过定义一个唯一键来实现唯一行。

什么是所谓的原子性呢?

第一看到原子这个词语有没有原子弹的感觉,其实差不多,分子是由原子组成,原子由原子核和核外电子组成,原子核又由质子和中子组成,无论是程序语言还是数据库中都一直在讲原子性,为什么讲它呢,因为原子已经算是比较小的,所以一直用原子性来强调并划分,到了这里还没明白么,就相当于原子组成分子,将原子作为最小的粒度即不能再分,那么我们反过来想属性的原子性即属性不可再划分,这又是什么意思,比如在表中有一个地址属性,如果我们存如(河北省,廊坊市,安次区)这样就违背了第一范式,这个属性还是可以再划分为省、城市、区。

到这里我们可以作出总结第一范式满足的条件:

(1)唯一标识的键

(2)键不能为空

(3)键不能重复

(4)属性不可再划分

第二范式(2NF):定义:在满足第一范式的前提下,每一个非键属性必须满足对整个候选键的完全函数依赖即非键属性不能是对候选键某部分的完全函数依赖。说的什么乱七八糟的,没关系,我们慢慢来。下图中OrderId和ProductId都是作为候选键即主键,但是此时我们可以通过部分候选键(主键)比如OrderId得到OrderDate、CustomerId和CompanyName等列,此时是仅仅是OderId的部分依赖而非对OderId和ProductId二者的完全依赖。简单来说就是:属性对主键应该属于完全依赖而非部分依赖,否则违反第二范式。

这里写图片描述

第三范式(3NF):定义:所有非键属性必须依赖于非传递的候选键,也就是非键属性相互之间必须相互独立,进一步讲非键属性之间不能形成依赖关系。

特点:1.满足第二范式

2.非主属性不能传递依赖于码。

下面我们看个不符合第三范式的例子:

这里写图片描述

主键:Sno

不满足原因:Shead传递依赖于码,Sno–>Sdept–>Shead,可得Sno–>Shead。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用两种不同的算法对十万条数据.. 下一篇vbox启动时提示intel_rapl:novali..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目