当前位置: 首页 > news >正文

数据库系统原理与实践 笔记 #8

文章目录

  • 数据库系统原理与实践 笔记 #8
  • 关系数据库设计(续)
    • 规范化(Normalization)
      • 范式(Normal Form)
      • 第一范式
      • 第二范式
      • Boyce-Codd范式(BCNF)
      • 将模式分解成BCNF
      • BCNF和保持依赖
      • 第三范式
    • 函数依赖理论
      • 正则覆盖
      • 无关属性
      • 无关属性的验证
      • 无损分解
      • 保持依赖

数据库系统原理与实践 笔记 #8

关系数据库设计(续)

规范化(Normalization)

范式(Normal Form)

  • 各种范式之间包含关系如下:
    5 N F ⊂ 4 N F ⊂ B C N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5NF\subset4NF\subset BCNF\subset3NF\subset2NF\subset1NF 5NF4NFBCNF3NF2NF1NF
  • 某一关系模式R最高属于第n范式,可简记为 R ∈ n N F R\in nNF RnNF

第一范式

  • 如果某个域的元素被认为是不可分的单元,那么这个域就是原子的,如果一个关系模式R的所有属性域都是原子的,我们称关系模式R属于第一范式
  • 非原子的值会造成复杂存储数据冗余

第二范式

  • 定义:若关系模式 R ∈ 1 N F R\in 1NF R1NF,且在 F + F^+ F+中每一个非主属性完全函数依赖于候选码,则 R ∈ 2 N F R\in 2NF R2NF

Boyce-Codd范式(BCNF)

  • 具有函数依赖集F的关系模式R属于BCNF的条件是:对所有 F + F^+ F+中形如 α → β \alpha\rightarrow\beta αβ的函数依赖( α ⊆ R \alpha\subseteq R αR β ⊆ R \beta\subseteq R βR),下面至少有一个成立
    • α → β \alpha\rightarrow\beta αβ平凡的函数依赖(即 β ⊆ α \beta\subseteq\alpha βα)
    • α \alpha α是模式R的一个超码
  • 另一个判断准则:在关系模式R(U,F)中,如果 F + F^+ F+ 中的每一个非平凡函数依赖的决定属性集都包含候选码,则 r ( R ) ∈ B C N F r(R)\in BCNF r(R)BCNF
  • BCNF范式:排除了任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖,也排除了主属性之间的传递依赖

将模式分解成BCNF

  • 假设有模式R,及其一个非平凡依赖 α → β \alpha\rightarrow\beta αβ不属于BCNF,那么我们可以将R分解成: ( α ∪ β ) (\alpha\cup\beta) (αβ) ( R − ( β − α ) ) (R-(\beta-\alpha)) (R(βα))

BCNF和保持依赖

  • 检查包括各种约束(码、check子句、函数依赖、断言等)的开销是很大的,但是如果只涉及到单个关系,检查约束的开销相对较低
  • 如果F上的每一个函数依赖都在其分解后的一个关系上成立,那么这个分解是保持依赖

第三范式

  • 具有函数依赖集F的关系模式R属于第三范式的条件是:对 F + F^+ F+ 中所有形如 α → β \alpha\rightarrow\beta αβ的函数依赖中,至少有以下之一成立
    • α → β \alpha\rightarrow\beta αβ是一个平凡的函数依赖(即 β ⊆ α \beta\subseteq\alpha βα)
    • α \alpha α是R的一个超码啊
    • β − α \beta-\alpha βα的每个属性A都包含在R的候选码中
  • 第三个条件是BCNF的一个最小放宽:即允许存在主属性对候选码的传递依赖和部分依赖,在函数依赖集F中用来满足保持某些函数依赖
  • 等价定义:
    • 关系模式R(U,F)中,若不存在这样的码X、属性组Y及非主属性Z( Z ⊈ Y Z\nsubseteq Y ZY),使得 X → Y ( Y ↛ X ) , Y → Z X\rightarrow Y(Y\nrightarrow X),Y\rightarrow Z XY(YX),YZ,则称R(U,F) ∈ \in 3NF
    • 具有函数依赖集F的关系模式R属于3NF,则R中任何非主属性A不部分依赖于码也不传递依赖于R的码

函数依赖理论

正则覆盖

  • 函数依赖集可能存在冗余依赖(这些依赖可以从其他依赖中推导出来)
  • 直观上,F的正则覆盖 F c F_c Fc没有任何冗余依赖或存在冗余部分的依赖
  • F c F_c Fc具有和F相同的函数依赖集闭包。其意义在于:验证 F c F_c Fc比验证F更容易,3NF算法必备

无关属性

  • 如果去除函数依赖中的一个属性不改变该函数依赖集的必报,则称该属性是无关属性
  • 形式化定义:考虑函数依赖集 F F F及其 F F F中函数依赖 α → β \alpha\rightarrow\beta αβ
    • 如果 A ∈ α A\in\alpha Aα并且 F F F逻辑蕴含( F − { α → β } ∪ { ( α − A ) → β } F-\{\alpha\rightarrow\beta\}\cup\{(\alpha-A)\rightarrow\beta\} F{αβ}{(αA)β}),则属性A在 α \alpha α中是无关的
    • 如果 A ∈ β A\in\beta Aβ并且函数依赖集( F − { α → β } ∪ { α → ( β − A ) } F-\{\alpha\rightarrow\beta\}\cup\{\alpha\rightarrow(\beta-A)\} F{αβ}{α(βA)})逻辑蕴含F,则属性A在 β \beta β中是无关的

无关属性的验证

  • 验证方法:考虑函数依赖集F及F中的函数依赖 α → β \alpha\rightarrow\beta αβ,验证属性 A ∈ α A\in\alpha Aα是不是多余的

无损分解

  • 对于 R = ( R 1 , R 2 ) R=(R_1,R_2) R=(R1,R2),我们要求模式 R R R上的所有可能关系r都有 r = ∏ R 1 ( r ) ⋈ ∏ R 2 ( r ) r=\prod_{R_1}(r)\bowtie\prod_{R_2}(r) r=R1(r)R2(r)
  • 如果下面的依赖中至少有一个属于 F + F^+ F+,那么将R分解成 R 1 R_1 R1 R 2 R_2 R2是无损分解连接:
    • R 1 ∩ R 2 → R 1 R_1\cap R_2\rightarrow R_1 R1R2R1
    • R 1 ∩ R 2 → R 2 R_1\cap R_2\rightarrow R_2 R1R2R2
    • R 1 ∩ R 2 R_1\cap R_2 R1R2 R 1 R_1 R1 R 2 R_2 R2超码
  • 上述函数依赖测试只是无损连接的一个充分条件,只有当所有约束都是函数依赖时,它才是必要条件

保持依赖

  • F为模式R上的一个函数依赖集, R 1 , R 2 , . . . , R n R_1,R_2,...,R_n R1,R2,...,Rn为R的一个分解,F在 R i R_i Ri上的限定 F + F^+ F+中所有只包含 R i R_i Ri中属性的函数依赖的集合 F i F_i Fi
http://www.lryc.cn/news/230022.html

相关文章:

  • Ubuntu 和 Windows 文件互传
  • 如何在WPF应用程序中全局捕获异常
  • 自定义Matplotlib中的颜色映射(cmap)
  • Ansible的filter
  • Qt绘制各种图表
  • 【科研新手指南4】ChatGPT的prompt技巧 心得
  • 龙蜥社区联合浪潮信息发布《eBPF技术实践白皮书》(附下载链接)
  • 屏幕截图软件 Snagit mac中文版软件特点
  • 四、Ribbon负载均衡
  • 【Git】第二篇:基本操作(创建本地仓库)
  • vuex——重置vuex数据
  • WebSphere Liberty 8.5.5.9 (三)
  • 如何区分一个项目是react还react native
  • 网易有道开源语音合成引擎“易魔声”
  • [量子计算与量子信息] 2.1 线性代数
  • 【PG】PostgreSQL 目录结构
  • H5游戏源码分享-超级染色体小游戏
  • NOIP 2017 宝藏----Java题解
  • 数据结构和算法的重要性
  • 2023.11.10 信息学日志
  • 0基础学习VR全景平台篇第120篇:极坐标处理接缝 - PS教程
  • Python---综合案例:通讯录管理系统---涉及点:列表、字典、死循环
  • Vite探索:构建、启程、原理、CSS艺术与插件魔法
  • 网工内推 | 网工校招,金融、软件行业,HCIE认证优先,最高15薪
  • CVE-2023-25194 Kafka JNDI 注入分析
  • MySQL--主从复制和读写分离
  • JavaScript使用webcomponent的简单示例
  • LeetCode(10)跳跃游戏 II【数组/字符串】【中等】
  • 浅谈数据结构之递归
  • 在CentOS7环境下安装Mysql