当前位置: 首页 > 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

相关文章:

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

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

Ubuntu 和 Windows 文件互传

FTP 服务 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到…...

如何在WPF应用程序中全局捕获异常

在WPF (Windows Presentation Foundation) 应用程序中,你可以使用 AppDomain.CurrentDomain.UnhandledException 事件来全局捕获未处理的异常。这个事件会在应用程序中的任何地方发生未处理的异常时触发。以下是一个简单的例子,演示如何在WPF应用程序中全…...

自定义Matplotlib中的颜色映射(cmap)

要自定义Matplotlib中的颜色映射(cmap),您可以按照以下步骤进行操作: 导入所需的库: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap创建自定义颜色映…...

Ansible的filter

环境 控制节点:Ubuntu 22.04Ansible 2.10.8管理节点:CentOS 8 filter 使用filter可以对数据做操作,比如把JSON数据转换为YAML数据,从URL中解析出hostname,提取字符串的SHA1哈希值,做数学运算&#xff0c…...

Qt绘制各种图表

绘制柱状图: void MainWindow::iniBarChart() { //柱状图初始化QChart *chart new QChart(); //创建chartchart->setTitle("Barchart演示");chart->setAnimationOptions(QChart::SeriesAnimations);ui->chartViewBar->setChart(chart); //为…...

【科研新手指南4】ChatGPT的prompt技巧 心得

ChatGPT的prompt心得 写在最前面chatgpt咒语1(感觉最好用的竟然是这个,简单方便快捷,不需要多轮对话)chatgpt思维链2(复杂任务更适用,简单任务把他弄复杂了)机理chatgpt完整咒语1(感…...

龙蜥社区联合浪潮信息发布《eBPF技术实践白皮书》(附下载链接)

随着 eBPF 技术的高速发展,eBPF 已成为 Linux 内核顶级子系统,并扩展到内核网络、存储、内存、调度和安全等子模块。这种可编程底座内核框架构建了全系统,是云计算、运维和安全等领域技术创新的基础。 龙蜥社区在 eBPF 领域进行了广泛的实践…...

屏幕截图软件 Snagit mac中文版软件特点

Snagit mac是一款屏幕截图和视频录制软件,它可以帮助用户快速捕捉屏幕上的任何内容,并将其编辑、标注和共享。 Snagit mac软件特点 多种截图模式:支持全屏截图、窗口截图、区域截图、延时截图等多种截图模式,满足不同用户的需求。…...

四、Ribbon负载均衡

目录 一、负载均衡流程 1、我通过浏览器直接访问userservice/user/1,无法访问,说明是负载均衡做了相应的处理 2、我们来看一下代码中负载均衡的流程是怎样的 3、图像流程 二、负载均衡策略 1、修改负载均衡策略 (方式一) &a…...

【Git】第二篇:基本操作(创建本地仓库)

我们知道,git是一个版本控制器,可以帮我们控制管理电脑上所有格式的文档。 而我们需要使用git管理文件的时候,我们必须将这些文件放到git仓库中,只有在git仓库中的文件才可以被我们的git追踪管理 创建本地仓库 创建本地仓库是需…...

vuex——重置vuex数据

需求描述 登出系统时,需将 vuex 中存储的数据,恢复为最初的默认状态。 实现方法 通过 replaceState 方法,将最初的 vuex 的 state 数据作为参数传入即可 完整代码范例 src\store\index.js import Vue from "vue"; import Vuex fro…...

WebSphere Liberty 8.5.5.9 (三)

WebSphere Liberty 8.5.5.9 将资源先下载,后期本地安装 下载 passwordUtilities-1.0 D:\wlp-webProfile7-java8-8.5.5.9\wlp\bin>installUtility find password 正在建立与已配置存储库的连接... 此过程可能要花几分钟完成。已成功连接至所有已配置的存储库。…...

如何区分一个项目是react还react native

要区分一个项目是 React 还是 React Native,你可以关注以下几个方面: 项目目录结构:React 和 React Native 项目通常具有不同的目录结构。React 项目中的源代码通常位于一个名为 "src" 或 "app" 的文件夹中,包…...

网易有道开源语音合成引擎“易魔声”

概述 11 月 10 日,网易有道正式上线“易魔声”开源语音合成(TTS)引擎,所有用户可免费在开源社区 GitHub 进行下载使用,通过其提供的 web 界面及批量生成结果的脚本接口,轻松实现音色的情感合成与应用。 据…...

[量子计算与量子信息] 2.1 线性代数

2.1 线性代数 符号对照表 量子力学中,向量使用 ∣ ψ ⟩ \ket \psi ∣ψ⟩ (ket)来表示,可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ \bra \psi ⟨ψ∣ ,可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示, ∣ 0 ⟩ \…...

【PG】PostgreSQL 目录结构

目录 1 软件安装目录 2 数据文件目录 base/:存储每个数据库的基本数据文件 global/:包含了全局性质的系统表空间文件 pg_tblspc/:包含了表空间的符号链接 pg_twophase/:包含了两阶段提交中使用的文件 pg_stat_tmp/&#xff…...

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…...

NOIP 2017 宝藏----Java题解

目录 NOIP 2017 宝藏 题目描述 输入描述: 输出描述: 输入 输出 说明 输入 输出 说明 备注: 代码实现&#xff1a; NOIP 2017 宝藏 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO For…...

数据结构和算法的重要性

目录 1.什么是数据结构&#xff1f; 2.什么是算法&#xff1f; 3.数据结构和算法的重要性 4.如何学好数据结构和算法 1.什么是数据结构&#xff1f; 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合 …...

MBTI性格测试

简介 MBTI&#xff08;Myers‑Briggs Type Indicator&#xff0c;迈尔斯‑布里格斯类型指标&#xff09;是基于荣格心理类型理论发展出的性格类型工具&#xff0c;由凯瑟琳库克布里格斯及其女儿伊莎贝尔布里格斯迈尔斯创建。它通过四对偏好维度将个体的认知与行为倾向归纳为 16…...

如何高效批量下载音乐歌词:智能歌词管理完整指南

如何高效批量下载音乐歌词&#xff1a;智能歌词管理完整指南 【免费下载链接】ZonyLrcToolsX ZonyLrcToolsX 是一个能够方便地下载歌词的小软件。 项目地址: https://gitcode.com/gh_mirrors/zo/ZonyLrcToolsX ZonyLrcToolsX 是一款专业的跨平台歌词下载工具&#xff0c…...

可解释AI新突破:基于局部帕累托最优的模型解释框架

1. 项目概述&#xff1a;当AI模型成为“黑箱”&#xff0c;我们如何撬开它&#xff1f;在机器学习项目里摸爬滚打十几年&#xff0c;我见过太多这样的场景&#xff1a;团队花大力气训练出一个准确率高达95%的复杂模型&#xff08;比如深度神经网络&#xff09;&#xff0c;业务…...

2026 文章代码高亮方案选型

将基于 Prism.js 或 Highlight.js 的传统高亮方案与基于 Shiki 的现代化高亮方案进行对比&#xff0c;其核心区别在于底层解析原理的不同&#xff08;正则表达式 vs. TextMate 语法树&#xff09;。 以下是两种方案的底层原理、各自优缺点、核心对比矩阵以及适用场景的详细分析…...

yolo视频识别 车辆速度估计识别 yolo11视频实时速度测量与测速估计

文章目录YOLOv11&#xff1a;视频实时速度测量与测速估计一、YOLOv11概述二、速度测量原理三、距离测量方法四、应用场景五、实践案例以下是关于使用YOLOv11进行视频实时速度测量与测速估计的介绍&#xff1a; YOLOv11&#xff1a;视频实时速度测量与测速估计 随着计算机视觉…...

别再死记硬背了!用UE材质里的点积、叉积,5分钟搞定模型表面动态光效

用UE材质玩转动态光效&#xff1a;点积、叉积实战指南第一次接触UE材质编辑器时&#xff0c;看到那些密密麻麻的数学节点总让人头皮发麻。特别是"点积"、"叉积"这些听起来就很高深的术语&#xff0c;很容易让美术背景的创作者望而却步。但你知道吗&#xf…...

基于STM32与LoRa的低功耗物联网气象站DIY全攻略

1. 项目概述&#xff1a;打造一个低功耗的家庭气象站前阵子想给家里的智能家居系统加点“环境感知”能力&#xff0c;琢磨着搞个能实时监测室外温湿度、风速风向的小玩意儿。市面上成品气象站要么数据出不来&#xff0c;要么功耗感人&#xff0c;不适合长期户外部署。于是&…...

在数据预处理与分析流水线中集成大模型API进行智能标注与摘要

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在数据预处理与分析流水线中集成大模型API进行智能标注与摘要 对于数据工程师而言&#xff0c;处理海量非结构化文本数据是一项常见…...

【C++】零基础入门 · 第 6 节:数组

上一节我们学习了函数,知道了如何把代码封装起来方便复用。但在实际编程中,你很快就会遇到一个问题:如果要存储 100 个学生的成绩,难道要定义 100 个变量吗?这显然不现实。数组就是 C++ 给出的答案——它让我们能用一个变量名管理一组相同类型的数据。 1. 为什么需要数组…...

使用libusb-win32驱动复活老旧USB硬件:以Elektor Magic Eye为例

1. 项目概述&#xff1a;让老硬件在新时代焕发新生手头有一台十多年前的《Elektor》杂志上刊登的“Magic Eye EM84”复古VFD显示屏项目&#xff0c;想把它接到Windows 10电脑上当个酷炫的CPU占用率显示器&#xff0c;却发现官方提供的“AVR309”USB驱动在新系统上彻底罢工了。这…...