范式是具有最小冗余的表结构,三范式的概念如下所述。
第一范式
如果每列都是不可再分的最小数据单元(也叫作最小的原子单元),则满足第一范式,第一范式的目标是确保每列的原子性。如下图所示,其中的Address列违背了第一范式列不可再分的原则,要满足第一范式,就需要将Address列拆分为Country列和City列。
第二范式
第二范式在第一范式的基础上,规定表中的非主键列不存在对主键的部分依赖,即第二范式要求每个表只描述一件事情。如下图所示,Orders表既包含订单信息,也包含产品信息,需要将其拆分为两个单独的表。
第三范式
第三范式的定义为:满足第一范式和第二范式,并且表中的列不存在对非主键列的传递依赖。如图 7-5所示,除了主键的订单编号,顾客姓名依赖于非主键的顾客编号,因此需要将该列去除。