数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
1.第一范式(确保每列保持原子性)也就是列都是不可再分
第一范式的目标是确保每列的原子性:
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
理解:
一范式就是属性不可分割。属性是什么?就是表中的字段
不可分割的意思就按字面理解就是最小单位,不能再分成更小单位了。
这个字段只能是一个值,不能被拆分成多个字段,否则的话,它就是可分割的,就不符合一范式。
2.第二范式(2nd NF -每个表只描述一件事情)
首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。
第二范式要求每个表只描述一件事情。
理解:
二范式就是要有主键,要求其他字段都依赖于主键。
为什么要有主键?没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,所以要主键。
其他字段为什么要依赖于主键?因为不依赖于主键,就找不到他们。更重要的是,其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的。
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖
除了主键订单编号外,顾客姓名依赖于非主键顾客编号。
理解:
三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”
消除冗余应该比较好理解一些,就是各种信息只在一个地方存储,不出现在多张表中。
综上:回答一下什么是第三范式?
首先,表中列都不可再分;
其次,表中非主键列不存在对主键的部分依赖;
第三,表中的列不存在对非主键列的传递依赖;
满足以上三点的范式是第三范式。
所谓的范式,是用来学习参考的,设计的时候根据情况,未必一定要遵守。