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

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

(1)什么是函数依赖?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

举个例子吧:有这个关系

SC(Sno, 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→Birthday而Tno→Tname

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

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

(5)3范式的理解?

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

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

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

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

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

SqlServer—大话函数依赖与范式的更多相关文章

  1. SQL—大话函数依赖与范式

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

  2. SqlServer之数据库三大范式

    分析: 数据库设计应遵循三大范式分别为: 第一范式:确保表中每列的原子性(不可拆分): 第二范式:确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依 ...

  3. 数据库 三范式 BCFN

    # 三范式 范式  设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小.  目前关系数据库有六种范式:第一 ...

  4. sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务

    外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...

  5. Oracle知识梳理(一)理论篇:基本概念和术语整理

    理论篇:基本概念和术语整理 一.关系数据库           关系数据库是目前应用最为广泛的数据库系统,它采用关系数据模型作为数据的组织方式,关系数据模型由关系的数据结构,关系的操作集合和关系的完整 ...

  6. 基于 Django 的手机管理系统

    前段时间和小组一起完成数据库作业,觉得收获挺多的,分享到博客来. 一.概述 打算通过设计数据库,然后结合 Python 框架Django,实现在网页上对数据库的增删改查(本例以手机的管理为例,不考虑订 ...

  7. 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料

    我今天查资料时无意发现的,https://github.com/CyC2018/CS-Notes 这个仓库包含了下列几个维度的计算机学习资料: 深受国内程序员喜爱,已经有超过3万多star了. 1. ...

  8. 口罩预约管理系统——数据库设计(前端+PHP+MySQL)

    目录 一.背景 二.口罩预约管理系统介绍 三.数据库设计 四.MySQL创建数据库以及数据表 五.数据库设计总结 一.背景 2020年的疫情影响了我们的生产生活,政府不断加大力度联防联控,遏制疫情的蔓 ...

  9. 【SqlServer系列】数据库三大范式

    1   概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分:第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关 ...

随机推荐

  1. linux中磁盘分区以及如何将磁盘挂载到系统中

    fdisk 分区 fdisk /dev/sdb -p查看当前分区-t 改分区号-w将分区表写进磁盘-n创建分区 -p主分区 -e拓展分区 partprobe 让内核更新分区信息cat /proc/pa ...

  2. MyEclipse2014安装操作步骤+破解

    第一步 第二步 第三步 第四步 第五步 第六步 破解操作步骤 1.安装完成 MyEclipse2014(适用于 2013 等版本)后,不要打开软件.解压破解文件压缩包,得到一下文件列表:双击 run. ...

  3. mysql8之与标准sql的区别

    一  mysql8概述 在研究mysql8新特性的时候,越来越感觉mysql8朝sql server看齐.看来对于中小型企业级应用也挺有兴趣,但是没有企业级的应用套件,有知道的麻烦告知.本文不探讨my ...

  4. 【java规则引擎】drools6.5.0版本中kmodule.xml解析

    kmodule.xml文件存放在src/main/resources/META-INF/文件夹下. <?xml version="1.0" encoding="UT ...

  5. Aes加密算法加密模式介绍

    本文转自:https://www.jianshu.com/p/582d3a47729a AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中 ...

  6. 自定义标签库_tag

    1)最简单的标签库 1,继承Tag接口,重写doEndTag()方法,返回类型不同后面流程不一样 想要jsp的内容必须重写了setPageContent()方法 再JspWriter out = pa ...

  7. eclipse解决git冲突举例

    本地修改了两个文件,提交时提示有冲突,想来应该是没有从远程仓库下载最新代码导致的.通过右击项目 -> Team -> Sychronized WorkSpace,比较本地仓库和远程仓库的异 ...

  8. java图形用户界面练习。j2se

    总结:主要是如何布局.还是存在很大问题 package clientFrame; import java.awt.FlowLayout; import javax.swing.JButton; imp ...

  9. lnmp一键安装包,安装多版本php,并开启redis与swoole

    安装多版本的php sudo ./install.sh mphp Install ZendGuardLoader for PHP 7.1... unavailable now. Write ZendG ...

  10. linux那点事儿(七)----文件系统管理

    如果你是一位忠实的windows 用户,那么现在请你打开的的c盘,打开WINDWOS目录,下面存放了哪些文件和目录,相信没有人关心过吧!即便是用windows多年的人.额!其实,我也知道WINDOWS ...