数据库设计的三大范式对我们设计数据库具有很重要的指导意义,但目前大多数博客或者教材都讲解得晦涩难懂 ,让人摸不着头脑。本人参考了大量博客以及教材(特别是数据库系统设计这本书),力争以通俗易懂的方式对三大范式进行一下探讨。
现在要建立一个数据库来描述学生的一些情况,面临的对象有:学生(用学号SNO描述),系(用系名SDEPT描述),课程(用课程名CNAME来描述),课程编号(用CNO来表示),成绩(G) ,住处(用SLOC来描述,每一个系的学生住在一个地方)
第一范式:数据库表中的每一列都是不可分割的基本数据项,确保每一列的原子性
第一范式一般很好满足,但此种情况是相对的,应根据实际需求来具体判断。如“地址”这一属性,既可以把它当做一个字段,也可以把它分解为“国家”、“省份”、“城市”等多个字段
第二范式:非主属性完全依赖于主键(也可称为码)(不存在部分依赖)