边学边思考——数据库中函数依赖与多值依赖的辨析
我们先复习下什么是函数:函数是发生在集合之间的一种对应关系(我喜欢用图理解)
图中表示的是函数中的单射、满射和双射。简而言之就是集合的对应关系,而集合中的值一般满足一对一和多对一的关系,不能存在一对多的关系。
基于上述对函数的理解,我们给出函数依赖的定义:
设R(U)是属性集U上的关系模式,X,Y是U的子集,若对R(U)的任意一个可能的关系r,r中不可能存在两个元祖在X上的属性值相等,而在Y中的属性值不等,则记为X→Y。简而言之,函数依赖是某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。(事实上就是不能出现一对多的关系)
我们先区分函数依赖与属性集中属性的三种关系
设R(U)是属性集U上的关系模式,X、Y是U的子集:
● 如果X和Y之间是1:1关系(一对一关系),如学校和校长之间就是1:1关系,则存在函数依赖X → Y和Y →X。
● 如果X和Y之间是1:n关系(一对多关系),如年龄和姓名之间就是1:n关系,则存在函数依赖Y → X。
●如果X和Y之间是m:n关系(多对多关系),如学生和课程之间就是m:n关系,则X和
用数学上的映射关系来理解,比如f(x)=2x;f(x,y)=x^+2y;f(x,y,z)=x+y-z等等,函数中变量元对应U中的X,所有X中的确定值经过函数关系的运算后组成Y。
其次,函数依赖包括以下几种
1.平凡函数依赖
当关系中属性集合Y是属性集合X的子集时,存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
2.非平凡函数依赖
当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
3.完全函数依赖
设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
4.部分函数依赖
设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
5.传递函数依赖
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。(如果Y→X,则X→Z成立了)
用一个例子来理解上述的定义(A—\ →B表示A 不函数依赖于 B)
表1——学生(学号, 姓名, 性别, 年龄, 学院)
假设我们做表不允许重名
学号→ 性别, 学号 → 年龄, 学号→ 学院,学号←→ 姓名,,姓名→ 性别, 姓名→ 年龄,姓名→ 学院,但性别—\ →Sage
-----------------------------------------------------------------------------------------------------------------
表2——学生课程(学号,课程,成绩)
学号→课程,(学号,课程)→成绩
-----------------------------------------------------------------------------------------------------------------
表3——学院系(学号,系名,系主任)
学号 → 系名,系名 → 系主任
在上述例子中:
平凡函数依赖: (学号,课程)→学号,(学号,课程)→课程。
因为学号和课程都是(学号,课程)的子集。
非平凡函数依赖: (学号,课程)→成绩(数据库中讨论得比较多是非平凡函数依赖,而平凡意义不大)
因为成绩不是(学号,课程)的子集。
部分函数依赖:(学号,姓名)→ 性别
因为(学号,姓名)→ 性别 且 学号 → 性别
完全函数依赖:(学号,课程号)→ 成绩
因为(学号,课程号)→ 成绩,学号 —\→ 成绩,课程号 —\→ 成绩。
传递函数依赖: 学号 → 系主任
因为学号 → 系名,系名 → 系主任 且 系名 —\→ 学号。
而多值依赖呢?给出定义
多值依赖的定义:
设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。
依然用函数的映射关系来理解,引入f(x,y),假设f(x,y)=+-(x^),若z=f(x,y),则一个x值可以得出两个互为相反数的z。在这个二元函数关系中,y的取值事实上是不影响结果的。类比到关系模式上,即x为X集的属性值,y为Y集的属性值,z为Z集的属性值。
看看一个例子
(课程C) ——(教师T)—(参考书B)
数据库概率 —顾国生老师——数学分析
数据库概率 —顾国生老师——高等代数
数据库概率 —顾国生老师——微分方程
上述例子U{C,T,B},其中课程C和教师T唯一确定一组B,却与T无关,经由C决定,然而T并不是空集,所以是非平凡的多值依赖。
事实上,当T为空的时候,如果C中的每一个值c对应B中的一个确定的值,则变为函数依赖,所以函数依赖是多值依赖的一种特殊情况。
总计下:
1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。(例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立)
3. 函数依赖通常以集合抽闲出来讨论。
4. 数据库设计者根据需求对函数关系进行制定。例如认为“姓名→年龄”在特定表中可行。
5. 数据库设计者根据现实规定做强制要求。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定
的函数依赖,若发现有同名人存在, 则拒绝装入该元组。
边学边思考——数据库中函数依赖与多值依赖的辨析相关推荐
- 在oracle符号,学在oracle数据库中插入特殊符号
oracle 特殊字符的插入 环境配置: server:9 db server: oracle817.4 client os:windows2000 pro oracle client: oracle ...
- Oracle数据库中字符串相关字段类型辨析
本文来自李明子csdn博客(http://blog.csdn.net/free1985),商业转载请联系博主获得授权,非商业转载请注明出处! 1 引子 字符串类型的字段在各关系数据库中均占有重要地位. ...
- 数据库之函数依赖、多值依赖
一.函数依赖(Functional Dependency)的概念 函数依赖是数据依赖的一种,它反映属性或属性组之间依存,互相制约的关系,即反应现实世界的约束关系. 设R(U)是属性U上的一个关系模式, ...
- mysql 手动写时间_关于数据库中如何存储时间的一点思考
1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...
- 光脚丫学LINQ(044):数据库中的计算所得列
视频演示:http://u.115.com/file/f220dc8a89 演示重点 数据库中的计算所得列实质上指的是列的数值是由表达式的计算结果提供的. 比如,下面的SQL语句,创建了一个包含Tot ...
- mysql查询m到n条数据库,对查询数据库中第M到N条记录的思考
呵呵,以前听庄明学长说过查询数据库中第M到N条记录的好多种方法,自己为是那样,但是从来没有实践过,今天学到Sql server 2005 的查询语句了,于是就想来实践实践自己的想法! 首先我要声明一下 ...
- 数据库中各表关联图及其说明_如何在图中思考:图论及其应用的说明性介绍
数据库中各表关联图及其说明 by Vardan Grigoryan (vardanator) 由Vardan Grigoryan(vardanator) 如何在图中思考:图论及其应用的说明性介绍 (H ...
- 对于数据库中表示状态或类型字段表示方法的思考
在设计数据库的时候,经常碰到那些表示状态或类型的字段,比如订单的状态,或者支付的类型.要为这一类数据选择合适的数据类型,比较常用的有以下两种方法. 方法一:tinyint+byte(枚举) 数据库中类 ...
- flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...
看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...
最新文章
- vue 修改div宽度_vue 拖动调整左右两侧div的宽度
- YUV2RGB c++ python
- 操作系统:多处理器编程-- 蒋炎岩老师
- js里面如何才能让成员方法去调用类中其他成员
- sql能查到数据 dataset对象里面没有值_新零售数据分析报告
- python数据结构之栈
- 开源cms 和 开源博客_BackBee CMS如何以及为何开源
- 决定要放下的人,要不要好好道个别?
- 详解:CDH预警配置 QQ邮箱 与 企业实操
- 查看apache的日志与状态
- SQL优化面试题及答案
- 官方高清标准地图素材下载地址
- SpringBoot兼容人大金仓数据库
- 钽电容失效、爆炸、烧毁的种种原因!
- 计算机文件自定义排序6,文件夹如何自定义排序
- GEE-Python遥感大数据分析、管理与可视化实践技术
- go mod vendor 如何使用
- android7.0后台,安卓7.0带来一键清理后台 真能使手机变快吗
- 巴菲特给出了六条人生的建议
- 跑步耳机哪种好,目前最适合运动的五款耳机推荐
热门文章
- Win10+940MX显卡配置PyTorch1.0.0的痛苦经历
- 设计模式之行为型模式(7种)
- 国有银行信息科技岗笔试都考什么?
- github上传文件遇到错误:kex_exchange_identification: read: Software caused connection abort banner exchange:
- 计算机毕业设计PHP创意摄影交流平台(源码+程序+VUE+lw+部署)
- 可视化服务器集群管理与调度系统,一种基于Slurm作业管理的可视化调度系统技术方案...
- Web渗透_扫描工具Arachni
- ADRC的simulink仿真实现与m代码实现
- 动规之-分组背包问题
- 【Gradle】Gradle配置全局阿里云镜像仓库