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

  • 什么是函数依赖?
  • 什么是完全与部分函数依赖?
  • 什么是平凡和非平凡函数依赖?
  • 什么是属性集的闭包?
  • 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. HDU - 3374:String Problem (最小表示法模板题)

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  2. iOS设置translucent 引发的坐标问题

    iOS  NavigationBar  + 导航栏 tablevie时候的布局情况,之前迷惑了我很久,怎么也没法理解透明度会影响布局. 接下来看一下以下三种情况的运行结果 1.全部系统默认情况下利用m ...

  3. sapconnector.dll download

    Sapnoc30Demo_Yan.rar Sap30Server.rar SAPNCO_Sample_Code.zip sapcon3.0_X64.rar DbEntry.Net.4.1.Setup. ...

  4. JAVA内置注解 基本注解

    温故而知新,可以为师矣! 每天复习,或者学习一点小东西,也能水滴石穿! 今天复习5个JAVA内置基本注解(贴代码胜过千言万语): package com.lf.test; import java.ut ...

  5. Redis、Memcache和MongoDB

    一.Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰 ...

  6. aop log切面

    @Aspect:描述一个切面类,定义切面类的时候需要打上这个注解 @Component:spring-boot配置类 package com.*.*.tools; import org.aspectj ...

  7. mysql导入导出表结构

    mysql导入导出表结构 导出整个库的表结构如下:mysqldump -uroot -p -d databasename > createtab.sql 如果只想导出表: test1,test2 ...

  8. cors,跨域资源共享,Java配置

    一.概念 1. 如果两个页面的协议.域名和端口是完全相同的,那么它们就是同源的,不同则为跨域 2. ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允 ...

  9. DHCP(一)

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

  10. php单链表实现

    php单链表实现 <?php //单链表 class Hero{ public $no; public $name; public $nickname; public $next=null; f ...