设计数据库的一些规范化的标准:通常满足第三范式已经足够规范了。
第一范式:消除重复数据。要求不允许多值属性。如果一个数据单元格中存在多个值,通过给定值来检索会带来问题。这一范式的核心就是:不允许有重复的列。比如在TestFormat列存在“Multiple choice, essay”这样的值是不允许的,应该使用TestFormat1和TestFormat2的两个不同的列,而不是使用TestFormat一个单独的列。总之,无论是单个列多个值,还是多个列处理相似数据,都不希望有重复的数据。
第二范式:消除部分依赖。这种情况是:表中的主键是复合主键,也就是主键由多个列组成,这一范式表明没有列能够之和主键的一部分相关。比如Grades表的主键由Student列和Test列组成的复合主键,问题出在TotalPoint列,TotalPoint列事实上只和考试相关,和学生无关。这一范式规定,表中所有非主键的列指向的是整个键,而不是键的一部分。
第三范式:消除过度依赖。这一范式所指的情况是,表中的列指向的不是主键,而是指向同一表中的另一个非键的列,比如,Assistant实际上是Teacher的一个属性,Assistant与老师相关而和主键(考试或者学生)无关,这表明该信息不属于这个表。