关系数据理论
本文最后更新于71 天前,其中的信息可能已经过时。

关系数据理论

理论背景

一个关系模式应当是一个五元组 ,但 域模式设计关系不大,因此可以把关系模式看作一个三元组 ,当且仅当 上的一个关系 满足 时, 称为关系模式 的一个关系。

数据依赖是一个关系内部属性与属性之间的一种约束,其中最重要的是:

  • 函数依赖
  • 多值依赖

在只考虑函数依赖这一数据依赖中,可以得到这样的关系模式

但是这样的关系模式存在一下一些问题:

  • 数据冗余
  • 更新异常
  • 插入异常
  • 删除异常

规范化

函数依赖

定义:设 是属性集 上的关系模式, 的子集,若对于 的任意一个可能的关系 中不可能存在两个元组在 上的属性值相等,而 上的属性值不等,则称 函数确定 函数依赖于 ,记作

  • 非平凡函数依赖:若 ,但 ,则称 是非平凡函数依赖。若不是特别声明,总是讨论非平凡函数依赖。
  • 平凡函数依赖:若 ,但 ,则称 是非平凡函数依赖。
  • 决定因素:若 ,则 称为这个函数依赖的决定属性组,也成为决定因素。
  • 完全函数依赖:在 中,如果 ,并且对于 的任何一个真子集 ,都有 ,则称 完全函数依赖。记作
  • 部分函数依赖:若 ,但 不完全函数依赖于 ,则称 部分函数依赖。
  • 传递函数依赖:在 中,如果 则称 Z 对 X 传递函数依赖,记为
  • 直接函数依赖:若 ,则 是直接函数依赖,记为

下面以函数依赖的概念来定义码:

  • 候选码:设 中的属性或属性组合,若 ,则 的候选码。
  • 超码:若 ,则 的超码。候选码是最小的超码。
  • 主码:若候选码多于一个,则选定其中一个为主码。
  • 主属性:包含在任何一个候选码中的属性称为主属性。
  • 非主属性:不包含在任何一个候选码中的属性称为非主属性或非码属性。
  • 全码:整个属性组是码,称为全码。
  • 外码:关系模式 中属性或属性组 并非 的码,但 是另一个关系模式的码,则称 的外部码,也称外码。

范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。

对于各种范式之间的关系有:

一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。

第一范式(1NF): 对于一个二维表,关系模式的每一个分量必须是不可分的数据项,满足这个条件的关系模式就属于第一范式。

是所有关系型数据库的基本要求,在 RDBMS 中,如果数据库的设计不符合这一要求,那么操作一定不会成功。

学号姓名系名系主任课名分数
2024001小明IS张明C195
2024001小明IS张明C290
2024001小明IS张明C388
2024002小红IT张暗C170
2024002小红IT张暗C278

但仅仅符合 的设计,仍会存在数据冗余过大,插入异常,删除异常,修改异常等问题:

  1. 每一个学生的学号、姓名、系名、系主任等数据重复多次——数据冗余过大。
  2. 假如新建一个系,但是暂时没有招收任何一名学生,那么将无法将系名和系主任的数据单独地添加到数据表中去——插入异常。
  3. 假如将某个系中所有学生相关地记录都删除,所有地系与系主任地数据也就一并消失了——删除异常。
  4. 假如小明转到计算机科学系,为保证数据一致性,需要修改小明所有三条记录中的系名与系主任的数据——修改异常。

定义:若 ,且每一个非主属性完全函数依赖于任何一个候选码,则

也就是说, 的基础之上,消除了非主属性对于码的部分函数依赖。

那么在上表中,判断是否符合 的要求,判断方法为:

  1. 找出数据表中所有的码

    • 查看所有每一个单属性,当它的值确定了,剩下的所有属性值是否能确定。
    • 查看所有包含两个属性的属性组,当它的值确定了,剩下的所有属性值是否能确定。
    • ……
    • 查看包含所有属性的属性组,当它的值确定了,剩下的所有属性值是否能确定。

    得到上表的码为(学号,课名)

    未命名文件(1)

  2. 根据码,找出所有主属性——主属性有两个,学号与课名。

  3. 除去所有主属性,剩下的就是非主属性——非主属性有系名、系主任、姓名和分数。

  4. 查看是否存在非主属性对码的部分函数依赖

    • 对于 ,有 ,存在非主属性 对码 的部分函数依赖。
    • 对于 ,有 ,存在非主属性 对码 的部分函数依赖。
    • 对于 ,有 ,存在非主属性 对码 的部分函数依赖。

所以上表中,存在非主属性对码的部分函数依赖,所以只符合 ,不符合 的要求。

为了符合 的要求,必须消除这些部分函数依赖,那么就需要将大表拆分成多个小的数据表,在拆分过程中,达到更高一级范式的要求,这个过程叫做“模式分解”。

未命名文件(1)

模式分解以后的数据表为:

学号课名分数
2024001C195
2024001C290
2024001C388
2024002C170
2024002C278
学号姓名系名系主任
2024001小明IS张明
2024002小红IT张暗

模式分解以后,是否还存在问题:

  1. 小明转到计算机科学系,只需修改李明对应的系的值就可以了——修改异常有改进。
  2. 学生的姓名、系名、系主任等不像之前重复多次——数据冗余有改进。
  3. 删除某个系全部学生记录,该系信息仍就丢失——删除异常无改进。
  4. 插入一个没有学生的新系,学生表的码为学号,不能为空,插入失败——插入异常无改进。

定义:设关系模式 ,若 中不存在这样的码 ,属性组 及非主属性 使得 成立,,则称

也就是说, 的基础之上,消除了非主属性对码的传递函数依赖

在上表中,经过模式分解,分为了两个表,一个学生表,一个选课表。

对于选课表,主码为 ,主属性为学号和课名,非主属性只有分数,不存在传递依赖,所以符合

对于学生表,主码为 ,主属性为学号,非主属性为姓名、系名、系主任。然而 ,同时 ,所以存在非主属性系主任对主码学号的传递函数依赖,所以学生表不符合 的要求。

为满足 ,需要再次进行模式分解。

未命名文件(1)

模式分解以后的数据表为:

学号课名分数
2024001C195
2024001C290
2024001C388
2024002C170
2024002C278
学号姓名系主任
2024001小明张明
2024002小红张明
系名系主任
IS张明
IT张明

模式分解以后,是否还存在问题:

  1. 小明转到计算机科学系,只需修改李明对应的系的值就可以了——修改异常无影响。
  2. 数据重复更少——数据冗余有改进。
  3. 删除某个系全部学生记录,该系信息不会丢失——删除异常有改进。
  4. 插入一个没有学生的新系,学生表和系表是独立的两张表,不影响——插入异常有改进。

此时,符合 要求的数据库设计,基本满足了数据冗余过大、插入异常、修改异常、删除异常的问题。

定义:关系模式 ,若 必包含有码,则

的定义可以得到结论,一个满足 BCNF 的关系模式有:

  • 所有非主属性对每一个码都是完全函数依赖。
  • 所有主属性对每一个不包含它的码也是完全函数依赖。
  • 没有任何属性完全函数依赖于非码的任何一组属性。

由于 ,按定义排除了任何属性对码的传递依赖与部分依赖,所以 。但是若 未必属于

下面用一个例子来解释

  1. 若某公司有若干仓库;
  2. 每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
  3. 一个仓库可以存放多种物品,一个物品也可以存放在不同的仓库中,每个物品在每个仓库中都有对应的数量。

那么该关系模式为:

已知的函数依赖集为:

码:

主属性:仓库名、管理员、物品名

非主属性:数量

仓库名管理员物品名数量
上海仓张三15S30
上海仓张三Air40
北京仓李四15S50
北京仓李四Mini60

该关系模式不存在非主属性对码的部分函数依赖和传递函数依赖,因此属于

试进行以下几种操作:

  1. 新增一个仓库,但未存放任何物品,是否可以为该仓库指派管理员——不可以,因为物品名也是主属性,根据实体完整性,主属性不能为空。
  2. 某仓库被清空后,需要删除所有与这个仓库相关的物品存放记录——会使得仓库本身和管理员的信息也被随之删除。
  3. 如果仓库更换管理员——这个仓库有几条物品存放记录,就要修改多少次管理员信息。

因此,即使关系模式满足 ,仍会有插入异常、修改异常与删除异常等问题。

因为存在着主属性对码的部分函数依赖与传递函数依赖(本例中主属性仓库名对码 存在部分函数依赖)。

解决办法就是在 的基础上消除主属性对码的部分/传递函数依赖。

这样插入异常、修改异常与删除异常的问题就解决了。

所以 就是在 的基础上消除主属性对码的部分函数依赖和传递函数依赖。

注:参考知乎

多值依赖

定义:设 是属性集 上的一个关系模式。 的子集,并且 。关系模式 中的多值依赖 成立,当且仅当对 的任一关系 ,给定的一对 值,有一组 的值,这组值仅仅决定于 值而与 值无关。

例:学校中某一门课程由多个教授讲授,它们使用相同的一套参考书。每个教师可以讲授多门课程,每种参考书可以供多门课程使用。可以用一个非规范化的关系来表示教室 T、课程 C 和参考书 B 之间的关系。

课程 C教师 T参考书 B
物理
数学
计算机数学

在关系模式 中,对于一个(物理,光学原理)有一组 值{李勇,王军},这组值仅仅决定于课程 上的值(物理)。也就是说对于另一个(物理,普通物理学),它对应的一组 值仍是{李勇,王军},尽管这时参考书 的值已经改变了,因此 多值依赖于 ,即

平凡的多值依赖:若 ,而 ,即 为空,则称 为平凡的多值依赖。

非平凡的多值依赖:反之就是非平凡多值依赖。

多值依赖性质

  • 多值依赖具有对称性:若 ,则 ,其中
  • 多值依赖具有传递性:若 ,则
  • 函数依赖可以看作是多值依赖的特殊情况:若 ,则

定义:关系模式 ,如果对于 的每个非平凡多值依赖 都含有码,则称

就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖

规范化小结

关系模式的规范化过程是通过对关系模式的分解来实现的,即把低一级的关系模式分解为若干个高一级的关系模式。

未命名文件(2)

*数据依赖的公理系统

定义 1:对于满足一组函数依赖 的关系模式 ,其任何一个关系 ,若函数依赖 都成立(即 中任意两元组 ,若 ,则 ),则称 F 逻辑蕴涵

Armstrong 公理系统:是一套推理规则,是模式分解算法的理论基础。主要用于求给定关系模式的码,从一组函数依赖求得蕴涵的函数依赖。

Armstrong 公理系统设 U 为属性集总体, 上的一组函数依赖,于是有关系模式 ,对 来说有以下的推理规则:

  • A1 自反律:若 ,则 所蕴涵。
  • A2 增广律:若 为 F 所蕴涵,且 ,则 所蕴涵。
  • A3 传递律:若 为 F 所蕴涵,则 所蕴涵。

【注】由自反律所得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于

根据 A1,A2,A3 这三条推理规则得到下面三条推理规则:

  • 合并规则:由 ,由有
  • 伪传递规则:由 ,有
  • 分解规则:由 ,有

引理 1:根据合并规则呵分解规则,可知: 成立的充分必要条件是 成立()。

定义 2:在关系模式 中为 所逻辑蕴涵的函数依赖的全体叫做 的闭包,记为

Armstrong 公理系统具有有效性和完备性:

  • 有效性:由 出发根据 Armstrong 公理推导出 中。
  • 完备性 中的每一个函数依赖,必定可以由 出发根据 Armstrong 公理推导出来。

定义 3。设 为属性集 上的一组函数依赖, 能根据 Armstrong 公理导出 称为属性集 关于函数依赖集 的闭包。

引理 2:设 为属性集 上的一组函数依赖, 能由 根据 Armstrong 公理导出的充分必要条件是

定义 4:如果 ,就说函数依赖集 覆盖 的覆盖,或 的覆盖)。

引理 3 的充分必要条件是

定义 5:如果函数依赖集 满足下列条件,则称 为一个极小函数依赖集,也称为最小依赖集或最小覆盖。

  • 中任一函数依赖的右部仅含有一个属性;
  • 中不存在这样的函数依赖 ,使得 等价;
  • 中不存在这样的函数依赖 有真子集 使得 等价。

【注】每一个函数依赖集 均等价于一个极小函数依赖集 。此 称为 的最小依赖集。

模式的分解

定义 1:关系模式 的一个分解是指 其中 ,并且没有 上的投影。

定义 2:函数依赖集合 的一个覆盖 叫做 在属性 上的投影。

模式分解的三个定义

对于一个模式的分解是多种多样的,但是分解后产生的模式应与原模式等价。对“等价”的概念形成了三种不同的定义:

  • 分解具有无损连接性:对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来。
  • 分解要保持函数依赖:对关系分解时,原关系的闭包与分解后关系闭包的并集相等。
  • 分解既要保持函数依赖,又要具有无损连接性

这三个定义是实行分解的三条不同的准则。按照不同的分解准则,模式所能达到的分离程度各不同,各种范式就是对分离程度的测度。

分解的无损连接性和保持函数依赖性

首先定义一下记号

的一个分解, 的一个关系。定义 中各关系模式上投影的连接

,即 中每一个元组 在属性 上的取值。

注意 的含义不同于一般的自然连接,它是一种特殊的连接运算。上式的含义为:

  1. 如果两个关系中有相同的属性列,则按第二章中的自然连接的定义进行;
  2. 如果两个关系中没有相同的属性列,则按笛卡尔积运算进行;

将运算后得到的结果与其他关系进行重复 1、2 步计算,直到完成全部的连接运算。

引理:设 为关系模式 的一个分解, 的任一个关系,,则:

  1. ,即 的投影连接包含 ,分解后再连接起来的 肯定不会比原来小。
  2. 如果 ,则 ,投影连接后再投影到子关系模式 直接投影到该子关系模式。即
  3. ,多次投影连接的结果等于一次投影连接后的结果。

分解后的关系进行自然连接必包括分解前的关系,即分解不会丢失信息,但能增加信息,只有 时,分解才具有无损连接性。

无损连接定义:关系模式 的一个分解:,若对于 的任何一个关系 均有 成立,则称分解 具有无损连接性,简称 为无损连接。

定理 1:如果算法终止时表中有一行为 ,则 为无损连接分解。

当关系模式 分解为两个关系模式 时有下面的判定准则。

定理 2:对于 的一个分解 ,如果 ,则 具有无损连接性。

保持函数依赖定义:若 ,则 的分解 保持函数依赖。

模式分解的算法

关于模式分解的几个重要事实

若要求分解保持函数依赖,那么模式分解总可以达到 ,但不一定能达到

若要求分解既保持函数依赖,又具有无损连接性,可以达到 ,但不一定能达到

若要求分解具有无损连接性,那一定可以达到

算法(合成法): 转换为 的保持函数依赖的分解

算法: 转换为 既有无损连接性又保持函数依赖的分解

算法(分解法): 转换为 的无损连接分解

引理 1:若 的一个无损连接分解, 的一个无损连接分解,那么,,均为 的无损连接分解。

引理 2

定理 :关系模式 中, 中函数依赖 和多值依赖 的集合。则 成立的充分必要条件是: 的分解 具有无损连接性,其中

算法: 达到 的具有无损连接性的分解

首先使用算法(分解法)得到 的一个达到 的无损连接分解 ,然后对某一个 ,若不属于 ,则可按 定理 进行分解,直到一个关系模式均属于 为止。

包含函数依赖和多值依赖的有效且完备的公理系统

A1:若 ,则

A2:若 ,且 ,则

A3:若 ,则

A4:若 ,则

A5:若 ,则

A6:若 ,则

A7:若 ,则

A8:若 ,则

由以上 8 条公理得知如下 4 条有用的推理规则:

  • 合并规则:,则
  • 为传递规则:,则
  • 混合为传递规则:,则
  • 分解规则:,则

总结

  1. 关系模式的规范化,其基本思想如下:
    未命名文件(1)
  2. 规范化理论为数据库设计提供理论的指南和工具,仅仅是指南和工具。
  3. 并不是规范化程度越高,模式就越好,必须结合应用环境和现实世界的具体情况合理地选择数据库模式。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇