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

2023-11-09

前言

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

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

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

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

 

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

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

  1. 自上而下(Top down):从一个大的关系模式和 FD 出发,在这基础上按照确切的正规形式产生较小的数据模式。
  2. 自下而上(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)

  1. 反身法则(Reflexive rule): XY → Y
  2. 增广法则(Augmentation rule): { X → Y } |= { XZ → YZ }
  3. 传递法则(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 肯定不是一个候选键。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据库】数据库入门(七): 函数依赖(Functional Dependencies) 的相关文章

  • LTE上行SC-FDMA 下行采用OFDMA的原因

    LTE下行是OFDMASC FDMA Single carrier Frequency Division Multiple Access 单载波频分多址 是LTE的上行链路的主流多址SC FDMA是单波载 Single carrier 与O
  • 进程调度的过程以及进程与线程的区别

    一 什么是进程 进程是操作系统对一个正在运行的程序的一种抽象 换言之 可以把进程看作程序的一次运行过程 同时 在操作系统内部 进程又是操作系统进行资源分配的基本单位 注意以上的运行出来的可执行程序 这些程序就是 进程 二 那么操作系统是如何
  • 中国移动:《2020年区块链+边缘计算白皮书》 PDF文字版

    中国移动 2020年区块链 边缘计算白皮书 PDF文字版 下载 访问密码 168168 中国移动5G联合创新中心与中兴通讯 区块链技术与数据安全工业和信息化部重点实验室 北京大学新一代信息技术研究院合作 共同发布了 区块链 边缘计算白皮书

随机推荐

  • 低版本Mac OS安装合适xcode的方法

    在虚拟机上安装完Mac OS10 14 在Apple Store上准备安装xcode时出现 xcode 不能安装在 Macintosh HD 上 因为需要 OS X V10 14 3 或更高版本 导致无法安装Xcode 如图 解决方法 不在
  • Oracle sql 判断某个字段不等于某个值

    看着很简单的一个问题 直接写sql select from user where userName 张三 但是运行一下 就会发现 如果userName有null值 那null值的记录也查不出来了 就是这么神奇 正确的sql select f
  • 手机已经开启调试模式还提示This adb server‘s $ADB_VENDOR_KEYS is not setTry ‘adb kill-server‘ if that seems wrong

    手机已经开启调试模式还提示This adb server s ADB VENDOR KEYS is not set Try adb kill server if that seems wrong Otherwise check for a
  • WPS进行分类汇总计算,并且提取统计结果的详细步骤

    1 首先选中要进行分类统计的数据 2 选择 数据 选项 3 然后找到 分类汇总 选项 再次弹出对话框 选择按照那一列进行分类汇总 并选择统计的计算方法 点击确定 5 默认统计结果都会在每一组的下一行 点击 隐藏明细数据 选项 即可仅显示统计
  • java软件工程师工作业绩_java软件工程师的工作描述怎么写

    展开全部 1 负责研发62616964757a686964616fe4b893e5b19e31333365656636公司应用软件的模块设计 开发和交付 2 负责编码 单元测试 3 按照功能组件的详细设计 4 对其他软件工程师的代码进行审核
  • 【网络】nmcli 网络管理工具

    目录 nmcli 命令 前提 重启网络服务 重启网卡 实例 nmcli输出说明 3种网络配置方法 nmcli的命令参数 Tips ethtool 命令 IP命令 添加网卡到配置文件 Linux系统怎么查看网卡的UUID nmcli 命令 原
  • 4:Git的树对象

    树对象 tree object 它能解决文件名保存的问题 就是树对象有自己的名字 也允许我们将多个文件组织到一起 Git 以一种类似于 UNIX 文件系统的方式存储内容 所有内容均以树对象和数据对象 git 对象 的形式存储 其中树对象对应
  • 本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录

    文章目录 前言 1 安装宝塔 2 安装cpolar内网穿透 3 远程访问宝塔 4 固定http地址 5 配置二级子域名 6 测试访问二级子域名 转载自cpolar极点云文章 Linux安装宝塔 并实现公网远程登录宝塔面板 内网穿透 前言 宝
  • 【软件测试学习笔记】黑盒测试方法及案例

    文章目录 一 黑盒测试基本概念 二 黑盒测试的主要目的 三 优缺点 优点 缺点 四 黑盒测试的策略 五 黑盒测试方法 等价类划分 分类 划分方法 原则 等价类划分案例 边界值分析法 原则 边界值分析法案例 因果图法 四种因果关系 五种约束
  • 05

    1 Harbor简介 Harbor是由VMWare公司开源的容器镜像仓库 实际上 Harbor是在Docker Registry上进行相应的企业级扩展 从而获得了更加广泛的应用 组件 功能 harbor adminserver 配置管理中心
  • CentOS7安装MySQL5.7.26

    安装MySQL 在CentOS中默认安装有MariaDB 这个是MySQL的分支 但为了需要 还是要在系统中安装MySQL 而且安装完成之后可以直接覆盖掉MariaDB 下载并安装MySQL官方的 Yum Repository root l
  • django添加数据库字段进行数据迁移

    1 修改view py里面的变量 2 在model py新增字段 3 打开terminal并将环境切到项目所在环境 切换方式为 4 执行命令 python manage py makemigrations backend python ma
  • Redis(主从复制、哨兵模式、集群)概述及部署

    目录 引言 壹 Redis主从复制 一 Redis的高可用 二 Redis持久化 1 Redis 提供两种方式进行持久化 2 RDB 持久化 三 Redis主从复制 1 Redis主从复制的概念 2 Redis主从复制 四 Redis主从复
  • Linux系统删除文件夹下所有文件

    这篇文章来为大家介绍一下如何在 Linux 系统下删除文件 当 Linux 系统使用时间过长以后 难免会产生一些垃圾文件 这些文件除了会占用磁盘空间之外还会降低系统的运行效率 所以长时间运行后我们需要及时的清理一下这些垃圾文件 rm 是一个
  • 基于Hadoop的云盘系统上传和下载效率优化及处理大量小文件的解决方法

    基于任何平台实现的云盘系统 面临的首要的技术问题就是客户端上传和下载效率优化问题 基于Hadoop实现的云盘系统 受到Hadoop文件读写机制的影响 采用Hadoop提供的API进行HDFS文件系统访问 文件读取时默认是顺序 逐block读
  • 第7章 指针 第6题

    题目 Julian历法是用年及这一年中的第几天来表示日期 设计一个函数将Julian历法表示的日期转换成月和日 如Mar8 注意闰年的问题 函数返回一个字符串 即转换后的月和日 如果参数有错 如天数为第370天 返回NULL 代码 incl
  • superset官方文档的安装和配置

    原文 https superset incubator apache org installation html 下载 git clone https github com apache incubator superset cd incu
  • 数据结构-----顺序表与单链表的实现

    1 顺序表 实现顺序表的初始化 插入 删除 查找 逆置 合并等操作 include
  • Python numpy函数:reshape()

    reshape 是数组对象中的方法 用于改变数组的形状 形状变化是基于数组元素不能改变的 变成的新形状中所包含的元素个数必须符合原来元素个数 如果数组元素发生变化的时候 就会报错 reshape函数生成的新数组和原始数组公用一个内存 也就是
  • 【数据库】数据库入门(七): 函数依赖(Functional Dependencies)

    前言 一个设计良好的数据库模式 database schema 应该要具备以下特点 完整性 Completeness 减少冗余 Redundancy freeness 一致的含义 Consistent understanding 良好的性能