软件系统经常使用各种长期保存的信息,这些信息通常以一定方式组织并存储在数据库或文件中,为减少数据冗余,避免出现插入异常或删除异常, 简化修改数据的过程,通常需要把数据结构规范化。
数据规范化 通常用“范式(normal forms)” 定义消除数据冗余的程度。 (1) 第一范式(1NF) 每个属性值都必须是原子值,即仅仅是一个简单值而不含内部结构。 (2) 第二范式(2NF) 满足第一范式条件,而且每个非关键字属性都由整个关键字决定(而不是由关键字的一部分来决定)。 (3) 第三范式(3NF) 符合第二范式的条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述(即一个非关键字属性值不依赖于另一个非关键字属性值)。
通常按照属性间的依赖情况区分规范化的程度。属性间依赖情况满足不同程度要求的为不同范式,满足最低要求的是第一范式,在第一范式中再进一步满足一些要求的为第二范式,其余依此类推。
第一范式(1 NF)数据冗余程度最大,第五范式(5 NF)数据冗余程度最小。但是,范式级别越高,存储同样数据就需要分解成更多张表,因此,“存储自身”的过程也就越复杂。
第二,随着范式级别的提高,数据的存储结构与基于问题域的结构间的匹配程度也随之下降,因此,在需求变化时数据的稳定性较差。
第三,范式级别提高则需要访问的表增多,因此性能(速度)将下降。从实用角度看来,在大多数场合选用第三范式都比较恰当。