数据库设计三范式

第一范式(1NF):

要求数据达到原子性,使数据不可再分;

看一个没有满足第一范式的例子:

 

 

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

第二范式(2NF)

使每一行数据具有唯一性,并消除数据之间的“部分依赖”,使一个表中的非主键字段,完全依赖于主键字段;

经验上:常常是每个表都要设计主键,并通常多数情况下,使用一个自增长的int类型的字段当做主键

实际,有2个方面的要求:

1,每一行数据具有唯一性:只要给表设计主键,就可以保证唯一性。

2,消除数据之间的“部分依赖”;

 

什么叫做“依赖”?

依赖,就是在一个表中,其中某个字段的值B可以由另一个字段的值A来“决定”,则此时我们就称为:

字段B依赖于字段A,

或:

字段A决定字段B;

其意思是,如果根据字段A的某个值,一定可以找出一个确定的字段B的值,就是A决定B。

对一个有主键的表,这种情况就成了:

确定了主键字段的值,则其他字段肯定都确定了。

也可以这样说:

主键决定了其他字段;

其他字段依赖于主键;

 

什么叫做部分依赖?

如果某个字段,只依赖于“部分主键字段”,此时就称为“部分依赖”

——发生此情况的前提一定是:主键字段有多个!!!

什么叫做完全依赖:

就是某个字段,是依赖于“主键的所有字段”。

——推论:如果一个表的主键只有一个字段,则此时必然是完全依赖。

 

一个不良例子:

 

改进之后:

 

 

 

第三范式(3NF)

独立性,消除传递依赖:

使每个字段都独立地依赖于主键字段(独立性),而要消除其中部分非主键字段的内部依赖——这种内部依赖会构成“传递依赖”

 

不良做法:

修正之后:

 

经验总结:

通常,在设计表的时候,基本只要遵循这样一个原则,就可以满足前述3范式要求:

每一种数据,使用一个表来存储。

 

posted @ 2016-07-27 15:18  z2168465  阅读(156)  评论(0)    收藏  举报