Can I fly high in the Sky?

Never say never.

导航

[读书笔记]规范化

Posted on 2015-03-04 15:22  lsr_flying  阅读(174)  评论(0编辑  收藏  举报

规范化的对象:

目的:将数据转变成一个有逻辑的、无重复的格式,可以很容易将此格式再重新组合成一个整体。

     就是减少表的数据冗余,减少数据存储空间,使每个表的用途更加明确,各表之间的关系更加科学。

范式种类:6种

但实际上只需要做到3种范式就可以,后面三种只是有学术讨论的意义

 

规范化总结:

规范化就是键,整个键,只是键。

(分别对应第一范式,第二范式,第三范式)

 

前提:

1.表只描述一个实体(不要简化或组合);

2.所有行必须唯一,而且必须有一个主键;

3.列和行的顺序必须是无关的。

 

第一范式:消除重复数组和保证原子性(数据是自包含和独立的)

  原子性:每一列都单独记录一个数据,而不记录过多的数据。比如一个列里,包含了数量,单价和总价。那么就要拆成三列。

第二范式:在第一范式的基础上,每列必须依赖于整个键

  如果一个行是组合键,有一列只依赖于其中一个键,那么就要把这个列单独分在一张表中。比如一行:班级,学号,班主任,座位号。组合键为班级和学号,班主任只依赖于班级。

第三范式:在第二范式的基础上,任何列都不能依赖于非键列,不能有派生的列

   不能有派生列,比如,有两个列:单价和总量,还有另外一个列为总价。可以看出,总价是根据单价和总量派生出来的,应该删掉。

  mark:有时需要反规范化——添加派生列,比如用户需要经常查询总价,如果进行第三范式,那么用户每次查询总价都要查询另外两列,并进行运算,加大了查询时间。通过反规范化,这里牺牲点存储空间,提高查询效率,是值得的。

 

反规范化

要记住数据库的设计的原则应该是具有适用性,要根据实际情况灵活设计表格,而不是一味地进行规范化

比如,添加派生列,可以提高搜索速度,降低查询时间。