学习目标:
1、了解数据库范式的概念
2、掌握数据库设计的三大范式
3、能使用三大范式指导数据库的设计
学习过程:
仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构,如果数据库设计不良好会有导致很多问题。其中一个就是会有数据冗余。表中包含大量的冗余,可能会导致数据多种异常:更新异常、添加异常、删除异常。
上一节课数据库建模就已经完成了,但是我们又如何知道自己设计得好不好呢?这里介绍数据库规范化的三个级别,简称三范式。
Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:
第一范式(1st NF -First Normal Fromate)
第二范式(2nd NF-Second Normal Fromate)
第三范式(3rd NF- Third Normal Fromate)
下面我们逐一简介一下三大范式具体是什么?
一、第一范式
第一范式的目标是确保每列的原子性 n如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
如下面这个例子:
地址可以在分为国家和城市。所以不满足第一范式,要进行修改。
二、第二范式
如果一个关系满足1NF,并且除了主键以外的其他列,都依赖与该主键,则满足第二范式(2NF) 第二范式要求每个表只描述一件事情
如下面这个例子:
订单编号与产品价格没有依赖关系。所以不满足第二范式,修改成为两张表。
二、第三范式
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)
顾客姓名并不直接依赖订单编号,所以应该删除,才能满足第三范式。
四、总结
规范是死的,只是一个指导原则而已,在真正做数据库设计时并不一定都得满足,有时候为满足某种商业目标,数据库性能比规范化数据库更重要。通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间。通过在给定的表中插入计算列(如成绩总分),以方便查询,虽然都会操作数据的冗余,但是却大大提高了查询性能,这也是可取的。
所以,进行规范化的同时,还需要综合考虑数据库的性能。