第一范式
关键字: 粒度.
一个典型的例子是地址,我们需要把地址作为一个字段,还是分为省,市,详细住址,
简单的回答是根据应用而定.
重构方法,如果你的WHERE语句中需要对一个字段作SUBSTRING之类的操作时,
这说明粒度太粗.要再细分出你要SUBSTRING的部分来.
另外,有些设计人员喜欢给每个表加一个AUTO-INCREMENT的ID,
而不是逻辑主建,这样做将浪费存储空间并降低查询效率.
第二范式
关键字:主键依赖
如果你是个无神论者,那你应该知道你头发的长度不取决于你女朋友的身分证号码.
从OO的观点看,你头发的长度不是你女朋友的属性.
重构方式,参照你的类设计,重点注意与类的属性不对应的数据库字段.
第三范式
关键字:非主键依赖
一个容易理解的例子是学生的记录中不应该有全班学生人数的信息.
从OO的观点来看,全班学生人数是班级的属性,不是学生的属性.
重构方式,参照你的类设计,如果两个类的属性出现在同一表中,你就要注意了.