在初学者在学习数据库技术时,总绕不开1NF、2NF、3NF、BCNF以及4NF。书本对这些的描述就如天书一般难懂。以下是关于上述几种范式各自特点和区别的表格式总结,希望有初学者有帮助。不当之处,欢迎交流指正。
范式名称 | 特征 | 存在问题 |
---|---|---|
1NF | 各属性不可再分 | 非主属性部分依赖于码 |
2NF | 解决1NF存在问题,非主属性完全依赖于码 | 非主属性传递依赖于码 |
3NF | 解决2NF问题,非主属性直接依赖于码 | 主属性部分或传递依赖于码 |
BCNF | 解决3NF问题,主属性完全依赖于码 | 存在多值依赖 |
4NF | 解决BNCF问题,各属性间没有非平凡且非函数依赖的多值依赖 |
拓展解释:
传递依赖:某属性通过中间属性,依赖于码,即属性X决定属性Y,Y决定属性Z,则Z(通过Y)传递依赖于X。
部分依赖:针对于主码是多主属性的情况,某属性仅完全依赖于主码中的部分属性。
一般来说,如果只考虑函数依赖,规范化程度最高的是BCNF,也就是说,在数据库设计时,只要达到BCNF标准就可以了;在某些情况下如果要考虑多会依赖,则需要进一步优化到4NF。
对于一些专业名词(如主属性、码等),可自行参阅相关文章,在此不再赘述。