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

                    

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

                    

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

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

  • 相关阅读:
    jvm系列(八):jvm知识点总览-高级Java工程师面试必备
    jvm系列(七):jvm调优-工具篇
    JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结
    Java ClassLoader详解
    语言堆栈入门——堆和栈的区别
    kubernetes基本了解
    软编码和硬编码的理解
    前台页面传日期类型后台接收问题
    mybatis-plus简单了解
    二叉树基础知识
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3221561.html
Copyright © 2011-2022 走看看