zoukankan      html  css  js  c++  java
  • SqlServer—大话函数依赖与范式

    说明:数据库中的某些概念真的很让人头疼,概念的东西本来就是很枯燥的,再加上枯燥的学习,那就更加枯燥了。概念这东西,你不理解也能生产东西,经验多了就行,但是为了更深入的学习,你还必须理解。这里,我抛开书本的概念,尽量以我简单的理解,介绍一下这些概念:

    • 什么是函数依赖?
    • 什么是完全与部分函数依赖?
    • 什么是平凡和非平凡函数依赖?
    • 什么是属性集的闭包?
    • 3范式的理解?

    (1)什么是函数依赖?

    解释:从这个"函数依赖"短语来看,2个词语,函数+依赖。

    函数:学编程的都知道,但是这里并不仅仅指的指令的集合。让我们回到第一次接触"函数"这个词语的初中或高中时代吧。函数,是一种映射关系,也就是常见的X—>Y的关系,在数学上有很多的函数(Y=X+3),知道了这个关系,我们会有X得出Y,这就是函数,表示2个事物之间的某种对应关系。

    依赖:人生分为4阶段,第一阶段,我依赖于爸妈,第二阶段,我依赖于老婆,第三阶段,爸妈依赖与我,第四阶段,我依赖于我的孩子。这个"依赖"是常用汉语的意思。但在专业术语里面,也就是这么个意思。

    函数依赖:有这么个关系实体,学生(学号,姓名,年级,性别,年龄),我知道了一个学号,就可以知道有关这个学号的其他信息。就像,你们知道了我,就可以知道我爸妈是谁,我老婆是谁,以及我未来的孩子是谁(这个,只有到未来了)。

    说白了:生活中的某个事物(人)具有一些特殊的属性(指纹),我们可以通过这个特殊的属性(指纹)知道它的一些其他的信息,这种关联我把它看做函数依赖。

    (2)什么是完全与部分函数依赖?

    解释:完全和部分,是针对于某个集体而言的。这个集体,指的是主键是多个属性的组合,而不是单个属性的主键。理解了上面的函数依赖,那么这里的完全与部分就不用过多的解释了。

    例如:常见的选课表([学号,课程号],成绩)[]里面是主键。那么完全函数依赖就是:非主键的属性(成绩)必须,全部依赖于主键所有的属性([学号,课程号]),少一个都不可以。说白了,学号+课程号—>成绩,只知道其中(学号,课程号)的一个,就不可以。只知道学号,不知道课程号,是没有办法知道某人的某个课程的成绩的。这,就是完全函数依赖。

    而,部分函数依赖,非主键的属性依赖于主键中部分的属性就可以了。

    (3)什么是平凡和非平凡函数依赖?

    解释:所谓的平凡,就是很普通的意思,那么非平凡就是不普通的意思。唉,你可别小看这个意思,它却让你容易理解概念的东西。那么怎么理解这个"平凡"呢。"平凡"的对立面可以说是特殊,特别,特别就是你平常不见的事物,就很特别,就不平凡。

    例如:这个函数依赖(也就是关系):(学号,课程号)——>课程号,由学号和课程号推出课程号,这不是逗人玩儿吗?谁会这么二呀。已知课程号,你推出课程号,有意思吗?这就是我认为的重复性生产,太平凡的一件事儿了。所以,这就是平凡函数依赖。

    而 (学号,课程号)——>所在系号,从没有推出,这就是很特殊的一面,就是不平凡的。

    说白了,对于一个函数依赖,由左边——>右边,如果右边的属性,在左边出现过,那么就是平凡函数依赖。反之,右边的属性没有在左边出现过,那么就是非平凡函数依赖。

    (4)什么是属性集的闭包?

    解释:属性集的闭包,首先是属性集的拥有,其次是闭包,封闭包含。

    举个例子吧:有这个关系

    SCSno, Sname, Sex, Birthday, Cno, Cname, Grade, Tno, Tname

    满足函数依赖集:

    {Sno→Sname, Sno→Sex, Sno→Birthday, Cno→Cname, Sno, Cno→Grade, Tno→Tname}.

    从这个函数依赖中,我们可以知道主键是Sno, Cno, Tno这三个属性的组合。

    那么我问:属性集(Sno, Tno)的闭包是:?

    从函数依赖集可知:Sno→Sname, Sno→Sex, Sno→BirthdayTno→Tname

    所以,闭包应该是,2个集的并集{Sno, Sname, Sex, Birthday, Tno, Tname}

    属性集的闭包,说白了,就是有属性集中的每个属性,可以通过函数依赖推出的所有属性的集合。

    53范式的理解?

    范式,我的理解就是制定二维表的标准。

    我们常说的1NF是指:表中的每一个属性都是原子属性(不可分割的数据项)。第一范式很容易满足。

    2NF:在1NF的前提下,每一个非主属性对于主键都是完全函数依赖的。换句话说,如果一个主键是单属性的话,那么它肯定是完全函数依赖的。

    3NF:在2NF的基础上,每一个非主属性对于主键不存在函数传递依赖。这个函数传递依赖很容易理解,所以我就没有解释。

    备注:以上纯属个人的理解,有些文字语言没有书本上概念的严谨,还需参考书本理解。

  • 相关阅读:
    Luogu4233 射命丸文的笔记 DP、多项式求逆
    LOJ2267 SDOI2017 龙与地下城 FFT、概率密度函数、Simpson
    LOJ2882 JOISC2014 两个人的星座 计算几何
    UOJ343 清华集训2017 避难所 构造、打表
    Solution -「CTS2019」珍珠
    「珂朵莉树」学习笔记
    CSP2019-J/S 游记
    LeetCode(164)Maximum Gap
    LeetCode(165) Compare Version Numbers
    LeetCode(162) Find Peak Element
  • 原文地址:https://www.cnblogs.com/zi-xing/p/4351888.html
Copyright © 2011-2022 走看看