数据库设计三范式
第一范式(1NF):
要求数据达到原子性,使数据不可再分;
看一个没有满足第一范式的例子:

对其进行修改后,就符合第一范式了:

第二范式(2NF)
使每一行数据具有唯一性,并消除数据之间的“部分依赖”,使一个表中的非主键字段,完全依赖于主键字段;
经验上:常常是每个表都要设计主键,并通常多数情况下,使用一个自增长的int类型的字段当做主键
实际,有2个方面的要求:
1,每一行数据具有唯一性:只要给表设计主键,就可以保证唯一性。
2,消除数据之间的“部分依赖”;
什么叫做“依赖”?
依赖,就是在一个表中,其中某个字段的值B可以由另一个字段的值A来“决定”,则此时我们就称为:
字段B依赖于字段A,
或:
字段A决定字段B;
其意思是,如果根据字段A的某个值,一定可以找出一个确定的字段B的值,就是A决定B。
对一个有主键的表,这种情况就成了:
确定了主键字段的值,则其他字段肯定都确定了。
也可以这样说:
主键决定了其他字段;
其他字段依赖于主键;
什么叫做部分依赖?
如果某个字段,只依赖于“部分主键字段”,此时就称为“部分依赖”
——发生此情况的前提一定是:主键字段有多个!!!
什么叫做完全依赖:
就是某个字段,是依赖于“主键的所有字段”。
——推论:如果一个表的主键只有一个字段,则此时必然是完全依赖。
一个不良例子:

改进之后:

第三范式(3NF)
独立性,消除传递依赖:
使每个字段都独立地依赖于主键字段(独立性),而要消除其中部分非主键字段的内部依赖——这种内部依赖会构成“传递依赖”
不良做法:

修正之后:

经验总结:
通常,在设计表的时候,基本只要遵循这样一个原则,就可以满足前述3范式要求:
每一种数据,使用一个表来存储。
浙公网安备 33010602011771号