【数据库】数据库入门(七): 函数依赖(Functional Dependencies)

前言

一个设计良好的数据库模式(database schema),应该要具备以下特点:

  • 完整性(Completeness)
  • 减少冗余(Redundancy freeness)
  • 一致的含义(Consistent understanding)
  • 良好的性能(Performance)

一个设计不好的数据库模式,可能会出现以下的问题:

  • 数据不一致
  • 数据冗余
  • 更新异常

为什么需要函数依赖(Why Functional Dependencies)

函数依赖(FD)可以以一种正式的方式来定义关系型数据库的“好(goodness)”与“坏(badness)”。函数依赖的设计一般有两种:

  • 自上而下(Top down):从一个大的关系模式和 FD 出发,在这基础上按照确切的正规形式产生较小的数据模式。
  • 自下而上(Bottom up): 从属性和 FD 出发,逐步产生数据模式(现实中不常用)。

定义

一个数据库 R 的一组 FD 可以表示成: X → Y,其中 X 和 Y 是数据库 R 中的两组属性集合,其含义是:对于 R 中的任意两个元组,只要他们的在集合 X 中的属性相等,那么他们在集合 Y 中的属性也相等。这里 X 称为决定因素(Determinant), Y 称为被决定因素(Dependant)

在现实应用中,FD 为数据库明确约束,而且该约束在任何时候都需要保证成立。一般常使用以下两种方法来确定某个数据库的函数依赖:

  1. 分析数据需求
  2. 分析样本数据

举个例子:

A B C D E
1 2 3 4 5
1 2 2 2 2
1 2 3 2 3
2 2 2 4 4

对于以下的函数依赖:

  • ABC → AB (√)
  • A → B (√)
  • ABC → D (×)
  • E → ABCD (√)

阿姆斯特朗推理法则(Armstrong‘s Inference Rules)

反身法则(Reflexive rule): XY → Y
增广法则(Augmentation rule): { X → Y } |= { XZ → YZ }
传递法则(Transitive rule): { X → Y, Y → Z } |= { X → Z }
其中,公式 ∑ |= X → Y 表示函数依赖 X → Y 可以通过集合 ∑ 中的函数依赖推理得出。

在阿姆斯特朗推理法则的基础上,我们进一步衍生出一些实用的法则:

  • 合并律(Union rule): { X → Y, X → Z } |= { X → YZ }
  • 分解律(Decomposition rule): { X → YZ } |= { X → Y, X → Z }

隐含的函数依赖

想要设计一个好的数据库,我们需要考虑到所有的函数依赖,包括一些隐含的函数依赖。我们常用 ∑* 表示由函数依赖集合 ∑ 所隐含的所有可能的函数依赖。

我们规定:如果 ∑1* = ∑2,那么 ∑1 和 ∑2 是等价的。意思就是,∑1 和 ∑2 可以不相同,只要他们对应的 ∑ 是相等的,我们就可以认为这两个函数依赖集合的等价的。

通过一个属性 X 集合推理出来的所有属性集合,称之为该属性 X 的闭包(Closure),记作 X+。所以我们可以这么表示:

Σ |= X → W 等价于 W ⊆ X+

例如,一个数据库 R = {A, B,C,D, E, F} 具有一下的函数依赖集合:Σ = { AC → B, B → CD,C → E, AF → B }。要判断 Σ |= AC → DE 是否成立。我们首先需要找到属性 AC 的闭包:

(AC)+   ⊇ AC         初始化
        ⊇ ACB        根据依赖 AC → B
        ⊇ ACBD       根据依赖 B → CD
        ⊇ ACBDE      根据依赖 C → E
        = ACBDE

其中,我们发现 DE ⊆ (AC)+,所以 Σ |= AC → DE 是成立的。

函数依赖的最小覆盖(Minimal cover)

通过定义函数依赖的最小覆盖,我们可以直接通过最小覆盖推理出数据库的所有函数依赖。一个函数依赖的最小覆盖具有以下特点:

  1. Σm 与 Σ 是等价的。其中 Σm 是最小覆盖,Σ 是数据库给定的函数依赖集合;
  2. Dependant:最小覆盖的每一条函数依赖,其右侧只存在单个的属性;
  3. Determinant:最小覆盖的每一条函数依赖,其左侧可以存在多个属性;
  4. 任何冗余的函数依赖都会被移除。

通过 FD 寻找键

在一个数据库中,一定存在这样的函数依赖关系: K → R , 其中 K 是超键,R 是该数据库所有属性的集合。

算法

输入:数据库 R 的 FD 集合 ∑。
输出:数据库 R 所有超键的集合。
步骤:
对于数据库 R 的每一个属性集合的子集 X,计算它的闭包 X+;
如果 X+ = R,那么 X 就是一个超键;
如果不存在 X 的真子集 Y 满足 Y+ = R,那么 X 就是候选键(主键)。
在这个部分,我们把在候选键中出现的所有属性称为主要属性(Prime attribute),其余的属性则称为非主要属性(Non-prime attributes)

在寻找候选键的过程中,有一些比较好用的小技巧:

  • 如果一个属性从来没有出现在任何 FD 的右侧,那么它肯定是候选键的一部分;
  • 如果一个属性从来没有出现在任何 FD 的左侧,但它出现在某个 FD 的右侧,那么它肯定不是候选键的一部分;
  • 如果某个集合 X 的真子集是候选键,那么 X 肯定不是一个候选键。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 数据字典 数据库系统中存放三层结构定义的数据库称为数据字典(DD),对数据库的操作都要通过DD才能实现。DD系统中...
    panda_say阅读 1,088评论 0 6
  • 第5章 关系数据库理论 学习重点: 关系的形式定义; 数据以来的基本概念; 范式的概念; 第一、二、三、BC、四范...
    TianWuJun阅读 1,041评论 0 0
  • 数据库基础Database4-数据库设计 六 关系设计库设计 一个关系模式: R(U, F) 其中: 关系名R是符...
    sunblog阅读 1,798评论 0 1
  • 二、关系数据库 1.关系数据库概述 关系数据库的产生历史: 1970年IBM的E.F.Codd提出了关系模型,奠定...
    silasjs阅读 1,132评论 0 1
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,095评论 0 3