函数依赖

在现实生活中,人扮演着各种各样的角色,编制着千差万别的关系网。我们都说计算机的发展是模拟着这个绚丽多姿的世界而来的,那么针对人类不同的关系网,它是如何通过数据体现出来的呢?

类似人的关系网,数据与数据之间也有着各种的各种关系网,这种关系网的编制就用到了函数依赖。

第一次看到这个的时候觉得很陌生,其实不然,揭开函数依赖的面纱他其实就可以看成咱们初中就学过的二元一次函数。例如:y=2x。从算式来看,y的值与x的值息息相关,换句话说就是x决定y,若是x的值相同,那么y就一样。这就是函数依赖。只不过,现在这函数依赖的关系用到了数据库中而已。那么在数据库中是如何体现的呢?

下面我们就具体来看函数依赖在数据库中如何体现。

问题来了,agemajor间的函数依赖存在吗?

由定义可知不存在。


若是把化学改成英语或者把英语改成化学就成立了。

接下来我有一个问题那就是现实生活中有这样的情况:例如小明的好朋友是小郑,小郑的好朋友是小李,那么如何体现小李也是小明的好朋友呢?

这就需要我们用到逻辑蕴含了。我们具体看看在数据库中如何用到的。

例如:


上面我们看到就是一个典型的逻辑蕴含的关系。

这个问题解决了,一个新的问题又产生了。那什么叫做完全函数依赖

同样举例如下:不同的学生上不同的课程,得到不同的分数,这如何表示?


根据经验,我们可知成绩是与学号、课程号两者共同决定的,在数据库中就是如果非主属性完全依赖于主键,那就满足第二范式。

可能说道这里,大家会有点迷糊,那么我举一个反例子来说明一下,就清楚了。



如上图所示,如果在表中添加一列学分,表示该门课程代表的学分。那么这还满足第二范式吗?

结果肯定是否定的呀。因为他这里存在局部依赖,学分由课程号这个字段就决定了呀。

以上就是我个人对函数依赖的一个理解,若是你有什么不同的见解,欢迎给我留言。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...