三大范式

发表时间:2017-05-11 16:47:09 浏览量( 34 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构,如果数据库设计不良好会有导致很多问题。其中一个就是会有数据冗余。表中包含大量的冗余,可能会导致数据多种异常:更新异常、添加异常、删除异常。

上一节课数据库建模就已经完成了,但是我们又如何知道自己设计得好不好呢?这里介绍数据库规范化的三个级别,简称三范式。

Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:

第一范式(1st NF -First  Normal Fromate)

第二范式(2nd NF-Second  Normal Fromate)

第三范式(3rd NF- Third  Normal Fromate)

下面我们逐一简介一下三大范式具体是什么?

一、第一范式

第一范式的目标是确保每列的原子性 n如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

如下面这个例子:

attcontent/c8fae7aa-bcae-411c-9c98-a94afe803e56.png

地址可以在分为国家和城市。所以不满足第一范式,要进行修改。

二、第二范式

如果一个关系满足1NF,并且除了主键以外的其他列,都依赖与该主键,则满足第二范式(2NF)  第二范式要求每个表只描述一件事情

如下面这个例子:

attcontent/25a7b9a5-8b92-411c-947c-ae4447807976.png

订单编号与产品价格没有依赖关系。所以不满足第二范式,修改成为两张表。

二、第三范式

如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF) 

attcontent/134301a1-492f-4782-a3e9-4604657875a2.png

顾客姓名并不直接依赖订单编号,所以应该删除,才能满足第三范式。

四、总结

规范是死的,只是一个指导原则而已,在真正做数据库设计时并不一定都得满足,有时候为满足某种商业目标,数据库性能比规范化数据库更重要。通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间。通过在给定的表中插入计算列(如成绩总分),以方便查询,虽然都会操作数据的冗余,但是却大大提高了查询性能,这也是可取的。

所以,进行规范化的同时,还需要综合考虑数据库的性能。