zoukankan      html  css  js  c++  java
  • 三范式的依赖,小小的知识,大大的学问

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

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

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

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

            专业术语:若对于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这样的来当做主键,那么非平凡函数依赖也可以消除,通过删减,就成了这样的图:

                    

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

                    

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

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

  • 相关阅读:
    docker介绍与安装
    HTML5之Notification简单使用
    移动端实现复制内容至剪贴板
    flex基本概念
    nodejs建立websocket通信
    使用FileReader实现前端预览所选图片
    去除字符串中的空格
    用swing做一个简单的正则验证工具
    使用命令行生成jar包
    C#语言 语句
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3221561.html
Copyright © 2011-2022 走看看