【数据库】五、关系数据理论

news2025/1/11 18:25:43

文章目录

  • 五、关系数据理论
    • 1 数据依赖
      • 1.1 概念回顾
      • 1.2 关系模式的形式化定义
      • 1.3 函数依赖
    • 2 范式
      • 2.1 第一范式(1NF)
      • 2.2 第二范式(2NF)
      • 2.3 第三范式(3NF)
      • 2.4 BC范式
    • 3 关系规范化
      • 3.1 关系规范化程度原理图
      • 3.2 关系规范化步骤

五、关系数据理论

1 数据依赖

1.1 概念回顾

  • 关系:描述实体与属性、实体间的联系
  • 关系模式:用于定义关系,对关系的描述
  • 关系数据库:一组关系的组成
  • 关系数据库模式:定义这组关系的关系模式的全体

1.2 关系模式的形式化定义

R(U,D,DOM,F)

  • R:关系名
  • U:属性集合
  • D:属性类型(域)
  • DOM:属性向域的映像集合
  • F:属性间数据的依赖关系集合(函数依赖)

简化为:R(U,F)

当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系

1.3 函数依赖

数据依赖指的是一个关系中属性间的依赖关系。主要的数据依赖是函数依赖。

函数依赖:R中的所有关系实例均要满足的约束条件。

多值依赖:一个X对应多个Y,即X→→Y

非平凡多值依赖:X→→Y,但Z=空。非平凡多值依赖:X→→Y,也X→→Z

举个例子:(函数依赖)

  • 一个表中人不允许重名,则:姓名 → 年龄,学号 → 姓名
  • 即:姓名决定年龄,学号决定姓名
  • X → Y:X决定Y;Y依赖于X
  • X ↔ Y:相互依赖,相互决定

函数依赖分类

  • 平凡函数依赖:若 X → Y,但 Y ⊆ X(废话)
  • 非平凡函数依赖:若 X → Y,但 Y ⊄ X
  • 完全函数依赖:X是一个集合(不是也行),他能 X → Y,但X的子集不能推出Y,X —> f _f f Y
  • 部分函数依赖:X是一个集合,他能 X → Y,但X的子集也能推出Y,X → p _p p Y
  • 传递函数依赖:X → Y,Y → Z,且Y⊄X,Y!→X,则Z传递函数依赖于X

设K是关系模式R(U,F)中的属性或者属性集合

如果:K → f _f f U,即U完全依赖于K,则称K为R的一个候选码,若关系模式中有多个候选码,则选其中一个作为主码

码的特点:

  • 候选码能唯一的表示关系的元组,是关系模式中一组最重要的属性
  • 组成候选码的属性称为主属性,其他属性称为非主属性

如何推出候选码?

把所有的函数依赖写出来,选出能决定所有属性的属性集合,这个集合就是码

2 范式

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

范式:符合某一种级别的关系模式的集合

某一关系模式R为第n范式,简记为 R ∈ n N F R∈nNF RnNF

2.1 第一范式(1NF)

定义:要求一个关系模式中所有的属性都是不可分的基本数据项

特点:

  • 对关系模式最基本的要求就是满足第一范式
  • 不满足第一范式的数据库模式不能称为关系数据库
  • 满足第一范式的关系模式不一定是一个好的关系模式

缺点:存在很多不完全函数依赖会有很多问题,如:

  • 插入异常、数据冗余、删除异常等
  • 插入异常:由于码值的一部分为空而不能将有用的信息作为一个元组插入到关系中
  • 更新异常:例如改员工的组,那么员工的所有销售额对应的分组和组长都要更新。维护数据完整性代价大
  • 删除异常:例如将某个组的员工移动到另一组,这个组的信息会随着组员的调动而全部丢失

原因:存在于模式中的某些数据依赖引起的

解决:分解关系模式来消除不合适的数据依赖

2.2 第二范式(2NF)

定义:若关系模式满足1NF,且每一个非主属性完全依赖于关系模式的码,则该关系模式满足2NF

缺点:存在传递函数依赖,导致冗余异常。主属性可能部分函数依赖于码

解决:继续分解(投影分解法)===>3NF

2.3 第三范式(3NF)

定义:若关系模式满足1NF,且不存在非主属性对码的传递函数依赖,则该关系模式满足3NF

特点:2NF是特殊的3NF,可证明,即 R ∈ 3 N F R∈3NF R3NF可推出 R ∈ 2 N F R∈2NF R2NF

缺点:主属性可能部分函数依赖于码。导致数据冗余等异常。

2.4 BC范式

定义:满足1NF基础上,每一个函数依赖的决定属性集都包含候选码,则 R ∈ B C N F R∈BCNF RBCNF

性质:

  • 非主属性完全函数依赖每个候选码
  • 主属性完全依赖于不包含它的候选码
  • 没有任何属性完全依赖于非码的任何一组属性

和3NF的关系:

  • 属于BC范式,必属于3NF
  • 属于3NF,且只有一个候选码,必属于BC

重要性:

  • 如果一个关系模式满足BC范式,说明它已经在函数依赖的范畴内实现了彻底分解
  • 达到最高的规范化程度
  • 消除了插入异常和删除异常

3 关系规范化

3.1 关系规范化程度原理图

消除非主属性对码的部分函数依赖
消除非主属性对码的传递函数依赖
消除主属性对码的部分和传递函数依赖
消除非平凡且非函数依赖的多值依赖
消除不是由候选码所蕴含的链接依赖
1NF
2NF
3NF
BCNF
4NF
5NF

3.2 关系规范化步骤

无损连接性的模式分解:

  • 原始关系模式 与 分解后的所有子关系模式自然连接的总结果 相等
  • 保证不丢失信息
  • 会丢失函数依赖

保持函数依赖的模式分解:

  • 原始模式的函数依赖一定也由分解得到的某个关系模式中函数依赖所包含
  • 减轻或解决各种异常情况

注:分解后必须满足无损链接和保持函数依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASP.NET Core 实现微服务 - Consul 配置中心

这一次我们继续介绍微服务相关组件配置中心的使用方法。本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来。因为前面我们已经介绍了使用Consul 做为服务注册发现的组件 ,那么干脆继续使用 Consul 来作为配置…

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…

深入学习RabbitMQ的Direct Exchange(直连交换机)

RabbitMQ作为一种高性能的消息中间件&#xff0c;在分布式系统中扮演着重要角色。它提供了多种消息传递模式&#xff0c;其中Direct Exchange&#xff08;直连交换机&#xff09;是最基础且常用的一种。本文将深入介绍Direct Exchange的原理、应用场景、配置方法以及实践案例&a…

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种&#xff0c;按照数据传送方式可分为串行通信和并行通信&#xff1b; 按照通信的数据同步方式&#xff0c;可分为异步通信和同步通信&#xff1b; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…

本地手集博客id“升级”在线抓取——简陋版——(2024年终总结1.1)

我之前每每发布笔记都用csv纯文本记录&#xff0c;一个机缘巧得文章列表api实现在线整理自已的文章阅读量数据。 (笔记模板由python脚本于2025年01月10日 18:48:25创建&#xff0c;本篇笔记适合喜欢钻牛角尖的coder翻阅) 【学习的细节是欢悦的历程】 Python官网&#xff1a;htt…

高等数学学习笔记 ☞ 洛必达法则与泰勒公式

1. 洛必达法则 1. 型与型未定式&#xff08;洛必达法则&#xff09; &#xff08;1&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; &#xff08;2&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; ①&#xff1a;当时&…

Qt官方下载地址

1. 最新版本 Qt官方最新版本下载地址&#xff1a;https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图&#xff1a; 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装&#xff0c;请转至此链接进行下载&#xff1a;https://download.qt.i…

怎么用NodeJS脚本对接TTS播报音响

怎么用NodeJS脚本对接TTS播报音响呢&#xff1f; 本文描述了使用NodeJS脚本调用HTTP接口&#xff0c;对接TTS播报音响&#xff0c;。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能语音音柱|10W统软物联2智能语音壁挂音箱|款式…

计算机存储之图解机械硬盘

问&#xff1a;机械硬盘是如何工作的&#xff1f; 答&#xff1a;请看VCR 一、机械硬盘物理结构 1.1、盘片(platter) 视频中银白色的圆盘称为盘片&#xff0c;二进制数据就是存储在盘片上&#xff0c;盘片解剖后如下图所示&#xff1a; 一圈一圈的同心圆称为磁道&#xff08;…

HTML前端从零开始

第一天 HTML部分 什么是HTML HTML&#xff08;Hypertext Markup Language&#xff09;超文本标记语言。HTML是万维网的基石。 超&#xff1a; 超字第一层意义是指最重要的标签&#xff0c;超链接标签 超越文本的意思 HTML的发展历程 HTML1990年出现&#xff0c;web之父…

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

【Leetcode-移动零】利用将非零元素移动至数组前解决移动零问题(剪枝优化)

题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例1 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例2 输入: nums [0] 输出…

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年&#xff0c;大模型技术已经普及并逐步渗透到各行各业&#xff0c;2025年注定是大模型应用井喷式发展的一年&#xff0c;AI在快速发展的同时&#xff0c;其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载&#xff1a;600多…

第21篇 基于ARM A9处理器用汇编语言实现中断<三>

Q&#xff1a;怎样编写ARM A9处理器汇编语言代码配置按键端口产生中断&#xff1f; A&#xff1a;使用Intel Monitor Program创建中断程序时&#xff0c;Linker Section Presets下拉菜单中需选择Exceptions。主程序在.vectors代码段为ARM处理器设置异常向量表&#xff0c;在…

直流无刷电机控制(FOC):电流模式

目录 概述 1 系统框架结构 1.1 硬件模块介绍 1.2 硬件实物图 1.3 引脚接口定义 2 代码实现 2.1 软件架构 2.2 电流检测函数 3 电流环功能实现 3.1 代码实现 3.2 测试代码实现 4 测试 概述 本文主要介绍基于DengFOC的库函数&#xff0c;实现直流无刷电机控制&#x…

(四)结合代码初步理解帧缓存(Frame Buffer)概念

帧缓存&#xff08;Framebuffer&#xff09;是图形渲染管线中的一个非常重要的概念&#xff0c;它用于存储渲染过程中产生的像素数据&#xff0c;并最终输出到显示器上。简单来说&#xff0c;帧缓存就是计算机图形中的“临时画布”&#xff0c;它储存渲染操作生成的图像数据&am…

Linux离线部署ELK

文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…

LabVIEW数据库管理系统

LabVIEW数据库管理系统&#xff08;DBMS&#xff09;是一种集成了数据库技术与数据采集、控制系统的解决方案。通过LabVIEW的强大图形化编程环境&#xff0c;结合数据库的高效数据存储与管理能力&#xff0c;开发人员可以实现高效的数据交互、存储、查询、更新和报告生成。LabV…

微服务实现高并发 秒杀系统,前后端实现

一、前端实现 前端项目初始化 首先&#xff0c;我们需要创建一个新的 Vue 3 项目。你可以使用 Vue CLI 来快速搭建项目。 安装 Vue CLI&#xff08;如果尚未安装&#xff09; bash npm install -g vue/cli 创建 Vue 项目 bash vue create seckill-frontend cd seckill-f…

Http请求响应——请求

Http概述 Http协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是一种用于传输网页数据的协议&#xff0c;规定了浏览器和服务器之间进行数据传输的规则&#xff0c;简单说来就是客户端与服务器端数据交互的数据格式。 客户端…