数据库设计三范式(3NF)
范式,就是规范,就是指设计数据库需要(应该)遵循的原则。
每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“加强要求”。
但是并不一定要遵守。
第一范式(1NF)原子性
原子性:存储的数据应该具有“不可再分性”。
不良做法: (图是找的)
应该:(图是找的)
第二范式(2NF)唯一性
唯一性 :消除非主键依赖联合主键中的部分字段。
需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系。通常,给一个表加主键(也是推荐做法),就可以做到“唯一可区分”。
主键有两种情况:
设定一个字段为主键:此时,表示该一个字段的值就可以明确确定一行数据。
设定多个字段为主键:表示只有这多个字段的值都确定后才能确定一行数据。此时也称为“联合主键”。
依赖:如果确定一个表中的某个数据(A),则就可以确定该表中的其他另一个数据(B),则我们说:B依赖于A。实际上,一个表只要有主键,则其他非主键一定是依赖于主键的。
部分依赖:指某个非主键字段,依赖于联合主键字段的其中部分字段。
不良做法: (图是找的)
应该:(图是找的)
第三范式(3NF)独立性
独立性:消除传递依赖(非主键值不依赖于另一个非主键值,都应该依赖于主键)。
不良做法: (图是找的)
应该:(图是找的)
总结
通常,在实践中,满足3范式只要做到“一个表只存一种类型数据”基本就可以实现。
另外,范式不是绝对要求,有时候我们为了数据的使用方便,还会(需要)故意违反范式。