SQL—大话函数依赖与范式
说明:数据库中的某些概念真的很让人头疼,概念的东西本来就是很枯燥的,再加上枯燥的学习,那就更加枯燥了。概念这东西,你不理解也能生产东西,经验多了就行,但是为了更深入的学习,你还必须理解。这里,我抛开书本的概念,尽量以我简单的理解,介绍一下这些概念:
- 什么是函数依赖?
- 什么是完全与部分函数依赖?
- 什么是平凡和非平凡函数依赖?
- 什么是属性集的闭包?
- 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的基础上,每一个非主属性对于主键不存在函数传递依赖。这个函数传递依赖很容易理解,所以我就没有解释。
备注:以上纯属个人的理解,有些文字语言没有书本上概念的严谨,还需参考书本理解。
SQL—大话函数依赖与范式的更多相关文章
- SqlServer—大话函数依赖与范式
说明:数据库中的某些概念真的很让人头疼,概念的东西本来就是很枯燥的,再加上枯燥的学习,那就更加枯燥了.概念这东西,你不理解也能生产东西,经验多了就行,但是为了更深入的学习,你还必须理解.这里,我抛开书 ...
- 你真的会玩SQL吗?三范式、数据完整性
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- SQL server 视图、范式
视图 1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询 或一个虚拟表.视图来 ...
- Sql入门学习——关系范式
--------关系 --------范式 一.三种关系 1.一对一关系 关系数据库中,第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关. 2.一 ...
- SQL数据库设计三范式
关系型数据库将数据库设计需要遵循的一些规则叫做“范式”,最基本的三个范式(1NF.2NF.3NF)简称三范式.第一范式是满足第二范式的基础,而第一.二范式又是满足第三范式的基础. 第一范式 表中的字段 ...
- SQL Server设计三范式
第一范式(1NF) (必须有主键,列不可分) 数据库表中的任何字段都是单一属性的,不可再分 create table aa(id int,NameAge varchar(100)) insert aa ...
- sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务
外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...
- 你真的会玩SQL吗?之逻辑查询处理阶段
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- 你真的会玩SQL吗?和平大使 内连接、外连接
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
随机推荐
- Spring 容器
Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口. 他们都可代表Spring容器, ...
- 自己对Extjs的Xtemplate的忽略
之前学习extjs Xtmeplate受一些书籍的误导,说Xtemplate不支持else ,今天仔细看了官网的示例,才恍然大悟,卧槽!不仅支持if-elseif-else结构 连switch都能够支 ...
- 检查或遍历android手机应程
检查android手机中是否存在某应程 public boolean checkApp(String packageName) { if (packageName == null || ...
- Cracking-- 1.1 判断字符串中是否有重复字符
第三种方法为位运算的方法. 位运算符: << 左移 & 与 | 或 #include <iostream> #include <string> #incl ...
- HttpWebRequest 请求数据
string fullUrl = "http://vip.AAA.cn/PreviewInterfaceAction.action?code=vip0008&data_digest= ...
- Oracle中rownum和rowid的理解(转)
本文转自地址http://www.linuxidc.com/Linux/2012-04/58300.htm rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每 ...
- Framework manager编写SQL错误整理
BMT-MD-0059 这个报错是由于导入了表全部的列,而之引用了部分列,所以未被引用的列将要被删除 XQE-PLN-0248 在模型中找不到“MONTHLY_FORECAST_FACT”的列“mon ...
- P1906联合权值
描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...
- struts2 validation.xml 注意点
1.首先应该注意validation.xml的名字,一定要以Action的类名加“-validation.xml”作为文件名.入LoginAction-validation.xml. 2.LoginA ...
- PHP项目感悟 -- 从CI框架来看iOS的MVC
其实这几天一直都想找时间把这个感悟整理出来,也是这一段一直思考的问题,因为这一段参加一个PHP后台项目的开发,框架使用的是CI,随着项目的进展,对于CI接触的也越多,但是由于理解的可能并不深刻,我也只 ...