关系数据库

一些关系数据模型常见概念->数据库概论-CSDN博客

目录

1、关系数据结构

1.1 笛卡尔积

1.2 关系的定义

1.3 关系的性质

2、关系代数

2.1 传统的集合运算

1. 并(union)

2. 交(intersection)

3. 差(difference)

4. 广义笛卡尔积(extended cartesian product)

2.2 专门的关系运算

1. 选择(Selection, σ)

2. 投影(Projection, π)

3. 连接(Join, ⋈)

1. θ连接

2. 等值连接

3. 自然连接(Natural Join)

4. 外连接

4. 除(Division, ÷)

3、优化查询

4、函数依赖

4.1 问题的提出

4.2 函数依赖的定义

1. 函数依赖的定义

2. 完全函数依赖和部分函数依赖

3. 传递函数依赖

4. Armstrong公理

5、关系的规范化

5.1 范式(normal form NF)

5.2 第一范式(1NF)

5.3 第二范式(2NF)

5.4 第三范式(3NF)

5.5 BC范式(BCNF)

5.6 模式分解


1、关系数据结构

1.1 笛卡尔积

  • 给定一组D1, D2, …, Dn(这些域中可以有相同的域),这些域的笛卡尔积表示为:D1×D2×…×Dn = {(d1, d2, …, dn) | di ∈ Di, i = 1, 2, …, n}。
  • 其中,每一个元素(d1, d2, …, dn)叫作一个n元组,简称元组。元组中的每一个值di叫作一个分量。
  • 笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。

1.2 关系的定义

1.关系是从笛卡尔积中取出有实际意义的元组来构造的。关系是笛卡尔积的子集

2.关系中的每个元素是关系中的元组,通常用 t 表示。关系是元组的集合

3. n个属性称为关系的n目(度)n元关系,其元组为n元组

1.3 关系的性质

1. 每一列的值是同类型的数据,来自同一个域

2. 不同的列 可以来自同一个域,需要给不同的属性名。

3. 元组不能重复

4. 元组中的每一个分量都是不可再分的数据项,即不允许表中有表。

5. 行,列的顺序无所谓

2、关系代数

2.1 传统的集合运算

进行处理

1. 并(union)

设关系R和S,都有n个属性,且对应的属性取自同一个域,

R∪S={t∣t∈R 或 t∈S},

结果关系为n目,会消除重复元组

2. 交(intersection)

设关系R和S,都有n个属性,且对应的属性取自同一个域,

R∩S={t∣t∈R 且 t∈S},

结果关系为n目。

3. 差(difference)

设关系R和S,都有n个属性,且对应的属性取自同一个域,

R−S={t∣t∈R 且 t∈/S},

结果关系为n目。

4. 广义笛卡尔积(extended cartesian product)

设关系R为n目,S为m目

R×S={(r,s)∣r∈R 且 s∈S},

结果关系为(n+m)目

R×S前n个属性值是R的一个元组,后m个属性值是S的一个元组,

若R有a个元组,S有b个元组,R×S有a×b个元组

2.2 专门的关系运算

行和列进行处理

1. 选择(Selection, σ)

功能:从关系中选出满足特定条件元组(即)。

符号:通常表示为 σF(R),其中 F 选择条件R 关系

如:一个学生表 Students(ID, Name, Age, Major),

选择所有主修为计算机科学的学生,

σMajor='Computer Science'(Students)。用的是单引号

2. 投影(Projection, π)

功能:从关系中选出指定的属性(即),并返回这些属性构成的新关系

符号:通常表示为 πA(R),其中 A 属性集合R 是关系

如:一个学生表 Students(ID, Name, Age, Major),

投影出学生的名字和专业,

πName, Major(Students)。

注意:会去重复元组,因为是关系。

3. 连接(Join, ⋈)
1. θ连接

R⋈S

 I θ J     I,J分别是关系R,S的属性组, θ是算数比较运算符(><=等)

相当于,笛卡尔积+条件I θ J

2. 等值连接

 θ “=” 时,为等值连接

3. 自然连接(Natural Join)

R⋈S

根据来自相同的属性(组)相等的属性值(集)进行连接,并在结果中去除重复的属性

如:

  ⋈  

 = 

都来自CourseID,相等的属性值进行连接,删除了重复的CourseID属性。

4. 外连接

OUTER可省略

左外连接(Left Outer Join),以左表为主(),右表不满足补NULL

返回左表中的所有记录,以及右表中与左表匹配的记录。如果右表中没有与左表匹配的记录,则结果集中对应部分为NULL。

右外连接(Right Outer Join),以右表为主(),左表不满足补NULL

返回右表中的所有记录,以及左表中与右表匹配的记录。如果左表中没有与右表匹配的记录,则结果集中对应部分为NULL。

全外连接(Full Outer Join),左,右表不满足时,各自对应位置补NULL。

4. 除(Division, ÷)

R ÷ S,其中 R 和 S 是关系

用于找出在关系R包含全部S信息(即S的投影)的那些元组,但只保留R中去掉S属性后的那些列。(相当于约掉了)

如:

假设我们有两个关系:

  • 学生选课关系R(Sno, Cno, Grade)
  • 课程关系S(Cno, Cname)

现在,我们想要找出选修了S中所有课程的学生的Sno。

πSno,Cno(R)÷πCno(S)

3、优化查询

1. 选择尽量先执行

2. 把笛卡尔积和其后的操作 合并成 连接

3. 将一连串的选择和投影 合并

4、函数依赖

4.1 问题的提出

说了那么多,那对于一个具体问题,应该建几个关系?每个关系由哪些属性组成?

如:student(sno,specialty(专业),group(社团),leader(社长),group_addr(社团地址),date(入团时间)),

一个学号对应一个学生,一个学生对应一个学号。

一个专业有多个学生,而一个学生只属于一个专业。

一个学生可以报多个社团,一个社团有多名学生。

一个社团只有一个社长,一个社团只有一个地址。

学生+社团确定入团时间。

sno->specialty(学号确定专业,专业依赖于学号),group->leader,group->group_addr,(sno,group)->date

所以,sno+group,是主码

1. 插入异常

主码不能为空,当一个group成立时,没有学生,导入不了group,leader,group_addr。

2. 删除异常

若一个group的学生都毕业了,删除了所有元组,那么group,group_addr,leader信息丢失了。

3. 数据冗余

一个group有多少个学生,learder,group_addr,就重复几次。

4. 跟新异常

group_addr改变,所有的元组都要改变。

4.2 函数依赖的定义

1. 函数依赖的定义

对于X的每一个值,都有Y唯一的具体的值与之对应,称X决定Y,或者Y依赖X,记作X→Y

2. 完全函数依赖和部分函数依赖

X->Y,X1是X的真子集,若存在X1->Y,则Y对X部分函数依赖,若不存在,则完全函数依赖。

注意:若X->U,U完全函数依赖X,则 X是候选码,有多个时,选一个为主码。

3. 传递函数依赖

若 X->Y,Y->Z,则 X->Z。

4. Armstrong公理

自反律:若 Y包含于X,则 X->Y。如:XY->X,XY->Y,XY->XY

增广律:若 X->Y,则 XZ->YZ。

传递律:若 X->Y,Y->Z,则 X->Z。

合并规则:若 X->Y1,X->Y2,则 X->Y1Y2。

分解规则:若 X->W,Z包含于W,则 X->Z。

例:关系模式R(A,B,C,D,E,F),R满足下列函数依赖:F={A → BC,CD → EF},

证明:函数依赖AD → F成立。

A->C(分解),AD->CD(增广),CD->F(分解),AD->F(传递)

5、关系的规范化

5.1 范式(normal form NF)

满足特定要求的集合。一共有六个级别,级别越高,表越规范。

5NF ⊆ 4NF ⊆ BCNF ⊆ 3NF ⊆ 2NF ⊆ 1NF

5.2 第一范式(1NF)

关系R的所有属性不能再分,则 R 属于第一范式不允许表中有表,关系至少是第一范式。

5.3 第二范式(2NF)

关系R是第一范式,且每个非主属性完全函数依赖于R的某个候选码,则 R 属于第二范式

非主属性不依赖于候选码的真子集。

例:SG(sno,specialty(专业),group(社团),group_addr(社团地址),date(入团时间))

F = {sno->specialty,group->group_addr,(sno,group)->date}

只有一个候选码sno,group有非主属性group_addr依赖于group(候选码的真子集)

所以不是第二范式。

改:(sno,specialty),(group,group_addr),(sno,group,date)

5.4 第三范式(3NF)

关系R是第二范式,且R中的每个非主属性不传递依赖于R的某个候选码

例:SS(sno,sdpet(系),sdpet_leader(系主任))

F = {sno->sdpet,sno->sdpet,sdpet->spdet_leader}

只有一个候选码sno因为sno->sdpet,sdpet->spdet_leader,spdet_leader传递依赖于sno,所以不是第三范式

改:(sno,sdept),(sdept,sdept_leader)

5.5 BC范式(BCNF)

关系R是第三范式,且R中的每一个决定因素包含码,则 R 属于BC范式

每个决定因素是候选码。

例1:SJP(S,J,P),F = {(S,J)->P,(S,P)->J},

决定因素(S,J),(S,P)都是候选码。所以是BC范式

例2:SJP(S,J,P),F = {(S,J)->P,(S,P)->J,P->J},

决定因素P不是候选码,所以不是BC范式

改:P和J放在一个表中,(P,J),(S,P)或(P,J),(S,J)

5.6 模式分解

低范式->高范式。

1. 无损。通过自然连接能恢复。

2. 分解后相互独立。

3. 分解要点写出对应关系,找出候选码,分清非主属性,判断函数依赖。

例:患者(患者编号(1),患者姓名(2),患者性别(3),医生编号(4),医生姓名(5),诊断日期(6),诊断结果(7),恢复情况(8),科室编号(9),科室名称(10))。判断第几范式,并改成第三范式。

1->(2,3),4->(5,9),(1,4)->(6,7,8),9->10

显然,(1,3)是码2非主属性依赖于1(候选码的真子集),所以不是第二范式,是第一范式

改成第三范式:

(1,2,3),(4,5,9),(1,4,6,7,9),(9,10)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity中实现人物残影效果

今天火柴人联盟3公测了&#xff0c;看到一个残影的效果&#xff0c;很有意思&#xff0c;上网查询了一下实现方式&#xff0c; 实现思路&#xff1a; 将角色的网格复制出来&#xff0c;然后放置到新建的物体的MeshFilter组件上&#xff0c;每隔几十毫秒在玩家的位置生成一个&a…

计算机网络习题(第1章 概论 第2章 数据通信基础)

第1章 概论 1、计算机网络 2、互联网 3、计算机网络体系结构 分层模型 OSI/RM 7层模型 TCP/IP 5层模型 协议、PDU、SDU、SAP等术语 数据封装&#xff08;计算&#xff09; 第2章 数据通信基础 1、数据通信系统组成 2、主要性能指标 数据传输速率 码元速率 时延 3…

【连续学习之随机初始化算法 】2024Nature期刊论文Loss of plasticity in deep continual learning

1 介绍 年份&#xff1a;2024 期刊&#xff1a;Nature Dohare S, Hernandez-Garcia J F, Lan Q, et al. Loss of plasticity in deep continual learning[J]. Nature, 2024, 632(8026): 768-774. 本文提出的算法是“持续反向传播”&#xff08;continual backpropagation&a…

Android Studio | 连接手机设备后,启动App时出现:Waiting For DebuggerApplication (App名)...

在这种情况下&#xff0c;打开目录文件&#xff0c;出现 Is:/storage/emulated/: Permission denied 问题分析&#xff1a; 以上两种情况表明应用程序试图访问Android设备的存储空间中的/storage/emulated/目录&#xff0c;但是没有足够的权限去执行这个操作。 解决办法&…

NodeRed使用心得,实现增删改查等

使用场景介绍 在VUE中使用nodeRed实现对节点的 增删改查等功能&#xff0c;且储存成功之后下点击时启动对应流程 安装与配置 1.安装NodeRed npm install -g --unsafe-perm node-red 安装完成后&#xff0c;你可以通过运行以下命令来启动Node-RED node-red-start2. 配置文件 N…

金仓数据库安装-Kingbase v9-centos

在很多年前有个项目用的金仓数据库&#xff0c;上线稳定后就没在这个项目了&#xff0c;只有公司的开发环境还在维护&#xff0c;已经好多年没有安装过了&#xff0c;重温一下金仓数据库安装&#xff0c;体验一下最新版本&#xff0c;也做一个新版本的试验环境&#xff1b; 一、…

“AI考训分析系统:让考试和训练更智能、更高效

大家好&#xff0c;我是你们的老朋友&#xff0c;一个资深的产品经理。今天咱们来聊聊一个教育领域的新宠儿——AI考训分析系统。这个系统可是个厉害角色&#xff0c;它不仅能帮学生提高学习效率&#xff0c;还能让老师们的工作变得更加轻松。下面我就跟大家伙儿分享一下这个系…

UE5 丧尸类杂兵的简单AI

A、思路 1、关卡初始化时&#xff0c;自动产生随机巡逻点&#xff0c;小兵到达后&#xff0c;去另一个随机巡逻点。 2、加入视力&#xff0c;发现主角后&#xff0c;不再巡逻&#xff0c;而开始追击主角并攻击。条件循环。 3、加入听力。主角的奔跑与射击会产生噪音&#xf…

【Compose multiplatform教程11】【组件】TextField组件

查看全部组件​编辑https://blog.csdn.net/b275518834/article/details/144751353 TextField 功能说明&#xff1a;提供用户输入文本的功能&#xff0c;可设置默认文本、提示文本以及文本样式&#xff0c;方便获取用户输入的内容&#xff0c;常用于数据采集场景。示例场景&am…

C# 将图片转换为PDF文档

将图片&#xff08;JPG、PNG&#xff09;转换为PDF文件可以帮助我们更好地保存和分享图片。此外&#xff0c;PDF文件还具有强大的安全特性&#xff0c;将图片转换为PDF后&#xff0c;我们可以通过设置密码来文件内容不被泄露。本文将介绍如何将JPG/PNG图片转换为PDF文档。 文章…

计算机的错误计算(一百九十三)

摘要 用两个大模型化简计算 其中有关数字取弧度&#xff0c;结果保留5位有效数字。一个大模型进行了一次化简&#xff0c;另外一个大模型没有化简。两个大模型​​​​​均给出错误结果。 例1. 化简计算 其中有关数字取弧度&#xff0c;结果保留5位有效数字。 下面是与一个…

大模型-ChatGLM-6B模型部署与微调记录

大模型-ChatGLM-6B模型部署与微调记录 模型权重下载&#xff1a; 登录魔塔社区&#xff1a;https://modelscope.cn/models/ZhipuAI/chatglm2-6b 拷贝以下代码执行后&#xff0c;便可快速权重下载到本地 # 备注&#xff1a;最新模型版本要求modelscope > 1.9.0 # pip instal…

梳理你的思路(从OOP到架构设计)_介绍Android的Java层应用框架01

目录 1、传统无框架 2、 单层框架 3、 复合型框架 4、 双层框架 1、传统无框架 传统上&#xff0c;在没有框架的环境里&#xff0c;应用程序(Application,简称AP或App)会调用平台(如Linux或Windows等)平台的函数&#xff0c;如下图所示&#xff1a; 由于控制权掌握在App开…

基于SpringBoot在线音乐系统平台功能实现十七

一、前言介绍&#xff1a; 1.1 项目摘要 随着互联网技术的迅猛发展和普及&#xff0c;人们对音乐的获取和欣赏方式发生了巨大改变。传统的音乐播放方式&#xff0c;如CD、磁带或本地下载的音乐文件&#xff0c;已经不能满足用户日益增长的需求。用户更希望通过网络直接获取各…

SpringBoot配置文件、热部署、YAML语法、配置文件值注入

SpringBoot的配置文件 文章目录 SpringBoot的配置文件1.SpringBoot的热部署2.配置文件2.1配置文件的作用2.2YAML配置文件&#xff1a;2.3YAML 与 JSON 和 XML 的对比 3.YAML语法3.1键值对3.2值的写法3.3对象、Map&#xff08;属性和值&#xff09;&#xff08;键值对&#xff0…

Linux | 零基础Ubuntu安装部署 Nginx服务

目录 介绍 安装部分 更新 安装 查看状态 测试网页 配置部分 备份默认文件 编辑文件 创建站点文件夹 编辑默认文件 Nginx检测 重新加载Nginx 测试网站 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。…

云边端一体化架构

云边端一体化架构是一种将云计算、边缘计算和终端设备相结合的分布式计算模型。该架构旨在通过优化资源分配和数据处理流程&#xff0c;提供更高效、更低延迟的服务体验。 下面是对这个架构的简要说明&#xff1a; 01云计算&#xff08;Cloud Computing&#xff09; — 作为中心…

springboot 工程使用proguard混淆

在 Maven 构建的 Spring Boot 项目中使用 ProGuard 进行代码混淆时&#xff0c;需要正确配置 Maven 插件和 ProGuard 的混淆规则。由于 Spring Boot 项目通常会依赖大量的反射机制和动态代理&#xff0c;因此必须特别小心确保这些部分在混淆过程中不会被破坏。 步骤 1&#xf…

vue3和springboot使用websocket通信

前端端口&#xff1a;9090 后端端口&#xff1a;8080 vue3 引入依赖&#xff1a; npm install sockjs-client stomp/stompjs vue页面 <template><div><h1>WebSocket 示例</h1><button click"sendMessage">发送消息</button>…

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化 前言 ArrayBuffer ArrayBuffer内部包含一块Native内存&#xff0c;该ArrayBuffer的JS对象壳被分配在虚拟机本地堆&#xff08;LocalHeap&#xff09;。与普通对象一样&#xff0c;需要经过序列化与反序列化拷贝传递&#x…