数据库的3大范式

第一范式(1NF)

第一范式是指数据库表的每一列都是不可分割的基本数据项同一列中不能有多个值即实体中的某个属性不能有多个

值或者不能有重复的属性

这就是第一范式的基本概念什么意思呢举个例子吧在一个表里有一个“电话”字段其值既有手机号又有座机号那么

这样就不符合

第一范式的要求了此时应该将“电话”拆分为“手机”跟“座机” 这样一来就变成了一个符合第一范式的数据表了, 数据库表中的字段都是单一

属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。如地址还可以再细分为国家、省等

总结:字段不能再分

第二范式(2NF)

第二范式是在第一范式的基础上建立起来的即满足第二范式必须先满足第一范式第二范式要求数据库表中的每个

实例或行必须可以被惟一的区分为实现区分通常需要为表加上一个列以存储各个实例的惟一标识

要求实体的属性完全依赖于主键要讨论一个表符不符合第二范式的前提是这个表的主键为组合主键如果不是组合主

键那就谈不上符不符合第二范式了。

如订单表:订单编号、产品编号、订购日期、价格

订单编号为主键,产品编号与订单编号没有相关,订单编号不依赖订单编号,应该放到产品表中

总结:不能部分依赖,就是说当一个表有组合主键时,其他非主键的字段必须完全依赖于主键。只抽取当前对象的直接属性,相差对象的属性另外抽取

第三范式(3NF)

第三范式是要符合第二范式第三范式就是一个数据表中不能存在其他数据表中的非主键字段也就是说如果存在其他

表中的字段就一定得是那个表的主键

假如一个表有有a b c三个字段a—>b b—>c 那么c与a就是传递依赖这样就不符合第三范式而且不管a能不能直接确

定c都属于传递依赖所以只有b跟c不依赖于a以外的任何字段才符合第三范式

如订单表:订单编号、订购日期、价格、顾客编号、顾客姓名,

顾客编号与订单相关,顾客编号又与顾客姓名相关,经过传递依赖,顾客姓名与订单也相关,所以应该去掉顾客姓名,放入到顾客表中。

总结:不可以有传递依赖,就是说主键以外的字段必须依赖主键而不能依赖其他字段

为了满足三大范式,我们的数据操作性能会受到相应的影响,所以,在实际的数据库设计中,既要考虑三大范式,避免数据的冗余和各种数据

的操作异常,又要考虑数据言访问性能,有时,为为减少表之间的连接,提高数据库的访问性能,允许适当的数据冗余列,可能是最合适的数据库设计方案。

广州东方标准职业教育培训中心

网址: https://www.360docs.net/doc/014419832.html,/https://www.360docs.net/doc/014419832.html,

电话:020-******** 020-********

地址:广州市天河区五山路华南理工大学科技园金华园C112

广州市海珠区新港西路135号中山大学科技综合楼A座1503室

相关文档
最新文档