三范式的依赖,小小的知识,大大的学问

        三范式使得数据库的设计变得有据可依,数据库的冗余大大减少。然而,三范式的定义,却不那么让人省心,一堆文字外加数学知识,让人着实有点小蒙。

        虽然说完全按照三范式设计数据库并不可取,但是要想设计一个好的数据库,三范式的知识是必不可少的。

        要想更好理解三范式的定义,那么了解依赖是必不可少的,了解了这几种依赖,那么理解起来三范式将会变的很容易。

        首先,来说下最最基本的概念——函数依赖

        专业术语:若对于R(U)的任意两个可能的关系r1、r2,若r1[x]=r2[x],则r1[y]=r2[y],或者若r1[x]不等于r2[x],则r1[y]不等于r2[y],称X决定Y,或者Y依赖X。

        其实很简单,就是说知道X就可以知道Y:

                

        函数依赖的三种类型:

        1、平凡与非平凡函数依赖

        还是先看专业术语:若属性x->y(决定),但是y不是x的子集(主键的一部分),则称为x->y是非平凡依赖。否则是平凡依赖。(关于一些特性的东西不再多说)

                1)平凡函数依赖

                        

                2)非平凡函数依赖

                        

        2、部分与完全函数依赖

        专业术语:属性y依赖属性x中的部分属性x‘,也就是说只要一个x’就可以决定y,那么称为y部分依赖x,否则成为完全依赖。

                1)部分依赖

                        

                2)完全依赖

                        

        3、传递依赖、函数依赖

        专业术语:若x->y和y->z,并且x不依赖y,则x->z,这种现象称传递依赖。

                            若是x->y和y->z,并且y->x,则x->z是直接的函数依赖,而不是传递依赖。

                1)传递依赖

                        

                2)函数依赖

                        

        以上几种依赖的关系:

                

        而第二范式和第三范式分别要求消除部分依赖和传递依赖,因为都用自增id或者uuid这样的来当做主键,那么非平凡函数依赖也可以消除,通过删减,就成了这样的图:

                

        而平凡函数依赖和完全函数依赖的图又是一样一样的,所以最后就成了这样的一个图:

                

        这些图从简单演变到复杂,最后又删减到最简单,我个人感觉通过这些图理解了三种依赖,那么理解三范式就不成什么问题了,因为映像中,三范式的概念貌似就是这几个范式来回倒腾。

        最后在恭喜一下你顺利的理解了数据库三范式~~

 

posted @ 2013-07-28 20:36  坚固66  阅读(344)  评论(0编辑  收藏  举报