转 三范式

http://blog.csdn.net/bit_x/article/details/5886491

第一范式(1NF)无重复的列

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

http://www.blogjava.net/xzclog/archive/2009/01/04/249711.html



◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 
考虑这样一个表:【联系人】(姓名,性别,电话) 
如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。 
◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 
考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 
因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。 
可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。 
◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 
考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 
其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 
通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

http://www.sz-accp.com.cn/xxyd/ShowArticle.asp?ArticleID=3432

时间: 2024-10-13 15:25:10

转 三范式的相关文章

数据库设计时不得不违背三范式的情景

1.在进销存系统中,订单信息中关联到好多其他的基本信息,比如:客户,付款方式,货运方式等,这些信息是有专门表进行维护的,在下订单时也是用下拉框选择的,但在保存订单信息时,不能只记录所谓的外键ID,而是应该同时记录名称等其他的信息. 这是因为订单不能因为没有了客户ID或是付款方式ID而不知道客户与付款方式了.对于订单这种客观存在的事物,是具有一定的历史性质的,因此在设计时应该与其他的关联信息可以“断开”,这也就是保证了订单的独立性. 摘自:http://www.cnblogs.com/tongtk

数据表三范式&范式理论

范式理论 ????范式理论为了解决数据的冗余与不一致,达到节省空间的作用. 1NF ????原子性(Atomicity),原子性说的就是,表中的字段不可再折分.每一个字段都是一个最基本的数据. ????上表在使用中没有太大的问题,但是如果想查询开始时间,那么要先读取起止时间,再使用程序进行拆分.这样会降低程序的执行效率.由于起止时间可以再折分,所以违背了范式第一理论. 解决方法: ????将起止时间拆分为两个字段. 2NF ????2NF前提必须是满足1NF ????表中的非主键字段不可以存在依

数据库设计二《函数依赖和三范式》

函数依赖: 定义:R(U)是在属性集U上的关系模式,X,Y是U的子集.若对于R(U)的任意一个可能关系r,r中的不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或者Y函数依赖X,记作X--->Y. 单纯的概念有点难以理解,通过例子1:属性集U,关系模式R(U),子集X,Y,可能关系r1. 可以理解为X能唯一确定Y,则X--->Y.常用为主键------>其他属性 函数依赖和三范式 函数依赖的分类:完全依赖,部分依赖,传递依赖. 完全依赖和一范式 完全依赖:X

数据库设计——三范式概念+实战

在利用三范式设计数据库的时候,以前总以为是先画完ER图,然后导出关系模式,最后用三范式去检验数据库设计的是否合理,but not!我们在一开始画ER图的时候,就应当和三范式联系起来,将错误消灭在源头.为了能最早的检验出错误,我们就要对ER图转换成关系模式的算法和三范式是如何消除冗余,避免冲突有深刻的了解,才能知道如何最早发现错误. 本文主要以机房收费系统数据库设计中的一些东西为例,结合三范式概念,简述下三范式. 一,1NF 定义: 如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是

戏谈数据库三范式

数据库三范式想必大家并不陌生,官方的解释很抽象,初学者比较难理解.对于这块知识,我是看了会,会了忘,忘了再看.每当别人问我的时候,必须先看看教材,回顾一段时间才能理清. 为什么当别人提问时不能立马把三范式的经典思想说出来呢?通过听米老师的"如何高效学习"这堂课,我发现原因是我自己没有融入到三范式中,三范式没有和自己发生关系.下面,我用三个有趣的小故事帮助大家快速.深刻的理解三范式的含义. 第一范式,官方解释:关系模式R的每个关系r的属性值都是不可分的原子值.这个官方解释还不算太难,比如

数据库表设计三范式

数据库设计三范式(nomorlization) 1NF:原子性,即每个字段都不可以在分割了. 2NF:唯一性,即每个表只描述一个实体,这个实体要有主键,非主关键字要完全依赖主键,正因为说是完全依赖,是因为在组合主键存在的情况下,非主关键字不能只依赖部分关键字. 3NF:一个表中不能包含其他表中已经存在的非主键字段信息,也就是说只可以包含其他表的主键信息,这样就是主外键,通过主外键就可以进行表之间的连接(join),3NF主要是减少数据冗余. 数据库表设计三范式,布布扣,bubuko.com

mysql监控、性能调优及三范式理解

原文:mysql监控.性能调优及三范式理解 1监控 工具:sp on mysql     sp系列可监控各种数据库 2调优 2.1 DB层操作与调优 2.1.1.开启慢查询 在My.cnf文件中添加如下内容(如果不知道my.cnf的路径可使用find / -name my.cnf进行查找): 在mysqld下添加 Log_slow_queries = ON  作用:开启慢查询服务 Log-slow-queries = /var/log/slowqueries.log 作用:慢查询日志存储路径.

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

一般的数据库设计都需要满足三范式,这是最基本的要求的,最高达到6NF,但是一般情况下3NF达到了就可以 一:1NF一范式的理解: 1NF是关系型数据库中的最基本要求,就是要求记录的属性是原子性,不可分,就是属性不能分,这是关系型数据库的基本要求,不满足这个就不能叫关系型数据库了 例如: 讲师 性别 班级 教室 代课时间 代课时间(开始,结束)韩忠康 Male php0331 102 30天 2013-03-31,2013-05-05韩忠康 Male php0228 106 30天 2013-02

你真的会玩SQL吗?三范式、数据完整性

每次上新功能时都需要添加新表,这时就要涉及到表结构的设计,那就要提到三范式,对于三范式教科书上说得很绕口,那简单点的呢?  三范式 第一范式:属性不可分,不允许存在隐藏字段,属性保持“原子性” 第二范式:要有主键.为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识. 第三范式:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息. 正规化范式(BCDF):所有表中的决定因素必须是一个候选键,如果只有一个候选键,那么就和第三范式是一样的. 第四范式(4NF):消除多值依赖. 第五范式

软考详解---三范式

关系型数据库是现在广泛应用的数据库类型,对关系型数据库的设计就是对数据进行组织化和结构化的过程.对于小规模的数据库我们处理起来还是比较轻松,但是随着数据库规模的扩大我们将发现用户操控数据库的SQL语句将变得笨拙.复杂.更糟糕的是很有可能导致数据不完整,不准确.所以我们有必要将数据设计的更加符合规范.怎样使我们的数据库更加规范呢,在数据库的世界里一共总结了五个范式,常用的有三个,今天小编就简单的总结一下三范式,三范式的内容也是软考中必考内容,希望对小伙伴们有帮助,小编会首先简单的介绍一个各个范式的