【数据库系统概论】第六章关系数据理论

news2024/11/26 18:36:00

一句话,研究关系数据库理论就是为了设计出合适的关系模式,也即合适、高效的表

6.1为什么研究关系数据理论

一:概念回顾:关系模式

关系模式:关系模式就是对关系的描述,可以表示为
R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F)

  • R:关系名
  • U:组成该关系的属性名集合
  • D:U中属性所来自的域
  • DOM:属性向域的映像集合
  • F:属性间数据的依赖关系集合

所以在本章中把关系模式看作一个三元组 R < U , F > R<U,F> R<U,F>
并且仅当U上的一个关系r满足F时,r称为关系模式R < U , F >的一个关系

二:数据依赖

数据依赖:数据依赖是一个关系内部属性与属性之间的一种约束关系。 这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。主要有两种类型的数据依赖
image.png

三:一个例子:不遵循关系数据理论导致的问题

【例】建立一个描述学校教务的数据库,该数据库涉及的对象包括

  • 学生的学号(Sno)
  • 所在系(Sdept)
  • 系主任姓名(Mname)
  • 课程号(Cno)
  • 成绩(Grade)

假设用一个单一的关系模式Student来表示,则该关系模式的属性集合为
U = ( S n o , S d e p t , M n a m e , C n o , G r a d e ) U=(Sno,Sdept,Mname,Cno,Grade) U=(Sno,Sdept,Mname,Cno,Grade)
根据现实世界我们所熟知的,会有以下事实

  • 一个系有若干学生,但一个学生只属于一个系
  • 一个系只有一名(正职)负责人
  • 一个学生可以选修多门课程,每门课程有若干学生选修
  • 每个学生学习每一门课程有一个成绩

这样的语义限制,将会导致属性上的函数依赖
58935dd86c71496992fe3f31f8a6e4e3.png
记作:
F = ( S n o − > S d e p t ) F=(Sno−>Sdept) F=(Sno>Sdept)
S d e p t − > M n a m e Sdept−>Mname Sdept>Mname
( S n o , C n o ) − > G r a d e ) (Sno,Cno)−>Grade) (Sno,Cno)>Grade)


下表是关系模式Student某一时刻的一个实例
f718f2e6ed844908bee9f2c08bdedccf.png
我们说,这样的关系模式是失败的,因为它存在以下问题

  1. 数据冗余:比如,每一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同,这将浪费大量的存储空间
  2. 更新异常:比如,某系更换系主任后,必须修改与该系学生有关的每一个元组
  3. 插入异常:如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库
  4. 删除异常:如果某个系的学生全部毕业了,则在删除该系学生信息的同时,这个系及其系主任的信息也丢掉了

6.2规范化

  • 首先讨论一个关系属性间不同的依赖情况,讨论如何根据属性间依赖情况来判定关系是否具有某些不合适的性质
  • 通常按属性间依赖情况来区分关系规范化程度为第一范式、第二范式、第三范式和第四范式等,然后直观地描述如何将具有不合适性质的关系转换为更合适的形式

一:函数依赖

函数依赖:如果X能确定Y(或者说Y依赖X,记作X->Y)那么就不可能存在两个元组,在X相同时Y却不同

如下在Student关系中,Sno确定Sdept,所以不可能出现两个相同的Sno却对应不同的Sdept
1a9ac44a731c41fba05c6ebfcefbc40e.png

二、平凡函数依赖与非平凡函数依赖

  • 非平凡函数依赖:如果X确定Y,但Y并不是X的子集,那么则称X是Y的非平凡函数依赖
  • 平凡函数依赖:如果X确定Y,Y是X的子集,那么则称X是Y的平凡函数依赖(他依赖别人 还得走关系:是它的子集)

如下是一个典型例子
27184227b4e1454fa7dc23ff811770c7.png
注意
3ec9472dbdff4635ac293af741cd7545.png

三、完全函数依赖与部分函数依赖

  • 完全函数依赖:要想X是Y完全函数依赖,那么X中任何一个分量都不能丢,哪怕少一个,X都无法确定Y
  • 部分函数依赖:X是Y的部分函数依赖,则表明即便去掉X中的一个或多个分量,剩余分量也能确定Y

如下是一个经典例子
5f08c55170074d47a8e8324b06cc5328.png

四、传递函数依赖

传递函数依赖:如果X是Y的非平凡函数依赖,且Y不是X的函数依赖,同时Y是Z的非平凡函数依赖,则称Z对X传递函数依赖,记作
image.png
注意,如果Y是X的函数依赖,则称Z直接依赖于X

6.3码

一、码的相关概念

7c384cf31bda4c1897cc81198d994f3f.png
image.png
image.png
image.png
image.png

其中:姓名,性别,期末分数都是非主属性

二、求解候选码

在范式之后,将求解候选码和第几范式放在一起

6.4秒杀范式

一、一句话解释清楚概念

  • 1NF:非主属性 部分依赖于 候选码

  • 2NF:非主属性 完全依赖 任何一个候选码

  • 3NF: 消除 非主属性 的部分依赖 和 传递依赖

    或 关系中元素均为主属性 也是3NF

  • BCNF:3NF+在关系中,所有决定因子(箭头左侧都是候选码本身不可以是子集

image.png
解释:单属性不代表都是主属性,但是单属性一定是没有了非主属性,所以必定是2NF

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

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

相关文章

C++指针解读(4)-- 指针和数组(一维数组)

1、数组及数组的访问 1.1 数组的存储方式 在内存中&#xff0c;数组是一块连续的区域。数组的存储结构有如下特点&#xff1a; &#xff08;1&#xff09;数组中的元素是同质的数据&#xff1b; &#xff08;2&#xff09;索引从0开始&#xff1b; &#xff08;3&#xff…

数据库安全-H2 databaseElasticsearchCouchDBInfluxdb漏洞复现

目录 数据库安全-H2 database&Elasticsearch&CouchDB&Influxdb 复现influxdb-未授权访问-jwt 验证H2database-未授权访问-配置不当CouchDB-权限绕过配合 RCE-漏洞CouchDB 垂直权限绕过Couchdb 任意命令执行 RCE ElasticSearch-文件写入&RCE-漏洞Elasticsearch写…

Linux Kernel 4.13 RC6发布:正式版9月3日发布

美国当地时间上周末&#xff0c;大神Linus Torvalds发布了Linux Kernel 4.13内核的又一候选版本。上周发布的RC5版本更新幅度也要比上上周的RC4要小&#xff0c;Linus Torvalds表示本周发布的RC6版本属于常规更新&#xff0c;在过去一周的开发过程中并没有出现任何意外。RC6版本…

ESP32网络开发实例-从SD卡加载Web页面文件

从SD卡加载Web页面文件 文章目录 从SD卡加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码实现5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在SD卡中的 HTML 和 CSS 文件提供服务。 我们不必将 HTML 和 CSS 文本硬编码入代码中,而是创建…

如何提升网站排名和用户体验:优化网站速度

网站的排名和用户满意度直接受到站点内容的加载速度影响深远。通过精心的网站优化&#xff0c;您不仅可以提高排名&#xff0c;还可以提供更出色的用户体验&#xff0c;尽管用户可能不会察觉到您的网站加载得更快&#xff0c;但这是一个非常有意义的改进。在这篇文章中&#xf…

计算机毕业设计 基于Web铁路订票管理系统 火车订票管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Git纯操作版 项目添加和提交、SSH keys添加、远程仓库控制、冲突解决、IDEA连接使用

Git 文章目录 Git项目简单克隆通用操作添加和提交回滚分支变基分支优选 远程项目推送认证抓取、拉取和冲突解决 IEDA类软件连接 最近学原理学的快头秃了&#xff0c;特此想出点不讲原理的纯操作版&#xff0c;不过还是放个图吧 项目简单克隆 git在本人日常中最重要的功能还是…

ExposureDiffusion: Learning to Expose for Low-light Image Enhancement论文阅读笔记

南洋理工大学、鹏城实验室、香港理工大学在ICCV2023发表的暗图增强论文。用diffusion模型来进行raw图像暗图增强&#xff0c;同时提出了一个自适应的残差层用来对具有不同信噪比的不同区域采取不同的去噪策略。 方法的框图如下所示&#xff1a; 一张raw图片可以由信号和噪声…

scratch绘制多彩五角星 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch绘制多彩五角星 一、题目要求 1、准备工作 2、功能实现 二、案例分析

Cadence 设计实践笔记-小哥allegro 2层板笔记

本章节主要跟着B站PCB入门首选视频-小哥Cadence Allegro 2层板视频,结合自己的实践一步步完成一个完整的PCB板的设计。 视频链接地址: PCB入门首选视频-小哥Cadence Allegro 2层板视频_哔哩哔哩_bilibili 规范建立文件夹 建立八个文件夹 DATASHEET 主要存放设计项目…

强化科技创新“辐射力”,中国移动的数智化大棋局

作者 | 曾响铃 文 | 响铃说 丝滑流畅的5G连接、每时每刻的数字生活服务、无处不在的智能终端、拟人交流的AI助手、梦幻般的XR虚拟现实、直接感受的裸眼3D…… 不知不觉&#xff0c;那个科幻片中的世界&#xff0c;越来越近。 数智化新世界的“气氛”&#xff0c;由一个个具…

window系统进行goolge代理配置(falcon proxy+burpsuite)

linux系统自带burpsuite抓包软件&#xff0c;只要火狐下个代理扩展就可以抓包了&#xff0c;想着每次抓包还得去虚拟机抓就有点小烦躁&#xff0c;所以想着给自己本机也弄个burpsuite&#xff0c;有想法就开整&#xff01; 一、goole代理扩展插件falcon proxy 1、由于goole应…

项目管理工具的功能与帮助一览

项目管理的概念并不新鲜&#xff0c;但是伴随着技术解决方案的出现&#xff0c;项目管理工具帮助企业建立规范科学的管理流程&#xff0c;为企业的管理工作提供助力。 Zoho Projects 是一款适合全行业的标准化项目管理工具&#xff0c;它提供了重要的功能&#xff0c;如任务列…

海康威视、大华、宇视rtsp实时读取网络摄像头

目录 1 RTSP介绍 1.海康 1.2 大华 1.3 宇视 2.实时读取 2.1 cv2.VideoCapture打开视频流 2.2 ffmpeg打开视频流 2.3 c 1 RTSP介绍 RTSP&#xff08;Real-Time Streaming Protocol&#xff09;是一种用于实时流媒体传输的网络协议。它被设计用于在客户端和服务器之间传输…

双指针--浅试

在做题中发现一件很奇怪的事情&#xff1a; 我看到了题目描述&#xff0c;心中有了一个解题的思路&#xff0c;然后尝试解题&#xff0c;看题解的时候发现“双指针法”我很熟悉但是又感觉不太懂。 把题解代码看了以后却与我的代码大差不差&#xff0c;才恍然大悟&#xff0c;原…

非类型模板参数+模板的特化

目录 一、非类型模板参数 二、模板的特化 &#xff08;一&#xff09;函数模板特化 &#xff08;二&#xff09;类模板举例 1. 全特化 2. 偏特化 一、非类型模板参数 模板参数分类&#xff1a;类型形参与非类型形参。类型形参即&#xff1a;出现在模板参数列表中&#x…

String、StringBuilder、StringBuffer区别

String、StringBuilder、StringBuffer区别 面试官&#xff1a;请你谈谈String、StringBuilder、StringBuffer区别 作为经典Java八股&#xff0c;是面试必考的热门点。 下面让我们一起来看一下他们的区别吧&#xff01; 主要是测试他们的效率和应用场景&#xff0c;具体语法不在…

苍穹外卖(六) redis缓存解决数据库压力

二节 直接用代码操作redis缓存 三, 四节 间接使用Spring Cache 注解完成redis缓存操作 可直接看三,四节 需要帮助理解注释 回去看第二节 一.问题说明 二. 实现思路 通过Redis来缓存菜品数据, 减少数据库查询操作 Redis简介 Redis是一个基于内存的key-value结构数据库。Redi…

2. vue-sy-admin: 基于vue3+TypeScript的自定义指令(directives)的封装及示例

自定义指令directives在项目特别是后台管理类的项目中使用的尤其多(个人经验)&#xff0c;每个人编写的自定义指令也各不相同&#xff0c;一个人的时候还没啥感觉&#xff0c;在多人合作的项目中统一编码规范就变得很有必要了&#xff0c;这样看着舒服的同时也更方便后期维护。…

【PyTorchTensorBoard实战】GPU与CPU的计算速度对比(附代码)

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 本文基于PyTorch通过tensor点积所需要的时…