数据库原理(2)关系型数据库理论

article/2025/10/9 17:35:30

二、关系型数据库理论

2.1 关系型数据库中基本概念

  • 关系(Relation)

    一个关系就是一张二维表,每个关系都有一个关系名
    
  • 元组

    二维表中的行称为元组
    
  • 属性

    二维表中的列称为属性
    
  • 关系模式

    关系模式是对关系的描述。一般格式为R(D1,D2,D3..)
    R关系名,D为属性名
    例如:学生(学号,姓名,性别,年龄,系别)
    

在这里插入图片描述

关系的性质

> 每一列中的分量必须来自同一个域, 必须是同一类
型的数据。(每一列数据类型一致)
> 不同的列可来自同一个域, 每一列称为属性, 不同的属性必须有不同的名字。(属性名唯一)
> 列的顺序可以任意交换。
> 关系中元组的顺序( 即行序) 可任意。
> 关系中每一分量必须是不可分的数据项。

2.2 关系的键和关系的完整性

  • 候选键(Candidate Key)
能惟一标识关系中元组的一个属性或属性集,称为候选键
  • 主键(Primary Key)
从多个候选键中选择一个作为查询、插入或删除元组的操作变量
,被选用的候选键称为主键。
每个关系必定有且仅有一个主关系键 
  • 外键(Foreign Key)

image-20210923203559965

被参照关系的主码和参照关系的外码必须定义在同一个域上 
  • 关系的完整性
实体完整性【必须满足】:主键不能为空或部分为空
参照完整性【必须满足】:参照关系外键的值必须来自被参照关系的主键,
或取空值。
用户自定义完整性:针对某一具体关系数据库的约束条件。
如:成绩属性的取值范围在0-100之间 

2.3 关系代数

关系代数是一种抽象的查询语言

关系代数的运算对象与结果都是关系

关系代数的运算符

image-20210923204449012

传统的集合运算(并、差、交、笛卡尔积)

相容:1. 两个关系具有相同的度(列数一样)2. 两个关系在第 i 个属性上的值来自同一个域
除笛卡尔积外,其他的集合运算要求关系必须满足相容性定于。

传统的集合运算都只是从行的角度进行的。

image-20210923213338740

专门的关系运算(选择、投影、连接、除法)

image-20210923220749970

2.4 关系规范化提出

不合理的关系模式存在的存储异常问题

  1. 数据冗余

  2. 插入异常

  3. 删除异常

  4. 更新异常

根本原因:属性间存在着数据依赖关系

一个好的关系模式应该具备以下四个条件

  1. 尽可能少的数据冗余

  2. 没有插入异常

  3. 没有删除异常

  4. 没有更新异常

2.5 函数依赖

定义

给定一个X一定能查到Y,就是Y依赖于X,写作X → Y

例子

关系S(学号,姓名,年龄)中学号可以唯一确定一个学生,可以找到姓名和年龄。
就是说(姓名,年龄)函数依赖于学号。

完全函数依赖

在一张表中,若X → Y , 且对于X 的任何一个真子集( 假如属性组x 包含超过一个属性的话), X**′** → Y 不成立, 那么我们称Y 对于X完全函数依赖。

image-20210923233355683

解释:在这张表中,Y是依赖于X的(X → Y)。X中的真子集(学号和课程),通过单独的学号是不能得到分数的,通过单独的课程也是不能得到分数的。
只有X中的所有真子集(学号和课程)一起才能得到Y(分数)。所以说Y是完全依赖于X的。

image-20210923233719761

在来看看这张表,Y是依赖X的,并且因为X的真子集只有一个,所以Y必然是完全依赖于X的。

部分函数依赖

假如Y 函数依赖于x , 但同时Y 并不完全函数依赖于x , 那么我们就称Y 部分函数依赖于
x 。

image-20210923233522001

解释:X的其中一个真子集学号就可以得到系名Y,即Y是部分函数依赖于X的。

传递函数依赖

假如Z函数依赖于Y, 且Y 函数依赖于X , 且Y 不包含于X ,X 不函数依赖于Y , 那么我们就
称Z传递函数依赖于X

image-20210924000845793

2.6 候选码判定

  1. 如果有属性不在函数依赖集中出现,那么它必须包含在候选码中。
  2. 如果有属性只在函数依赖集右边出现,那么它必不包含在候选码中。
  3. 如果有属性只在函数依赖集的左边出现,则该属性一定包含在候选码中。
  4. 如果有属性或属性组能唯一标识元组,则它就是候选码,也就是说,通过函数依赖所求出的候选码的闭包中,能够包含所有的属性。

什么是闭包?

有关系R(A,B,C,D),函数依赖集F(D →B,B →D,AD→B,AC→D)

A的闭包:A

B的闭包:B、D

C的闭包:C

D的闭包:D、B

AC的闭包:A、C、D、B

例子

有关系模式R<U,F>,U={A,B,C,D},

1)F={A→B,B→C,C→D,D→A}
2)F=Φ(空集)
3)F={A→B,B→A,A→C}
4)F={(A,B)→C,D→A}
5)F={(A,B)→C,C→A}

1):所有属性ABCD在左右两侧均出现,因此前三条判断均不起作用。通过(4)的判断方法可以得知,A的闭包为{A,B,C,D};B的闭包为{A,B,C,D};C的闭包为{A,B,C,D};D的闭包为{A,B,C,D}。四者的闭包均包含了所有的属性,因此此关系模式的候选码为A、B、C、D。
2):函数依赖为空集,根据(1)可知,此关系模式的候选码为A、B、C、D。
3):属性D在函数依赖集中从未出现,因此候选码中一定有它,而属性C只在右侧出现,因此候选码中一定没有它,结合上述方法(4)闭包的判断,候选码为(A,D),(B,D)。
4):同上,C只在右侧出现,而B和D只在左侧出现,因此候选码中一定有D无C,最后判断A,可知候选码为(B,D)
5):同理,候选码为(A,B,D)和(B,C,D)

2.7 关系模式的范式

第一范式

关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF。

image-20210924111832462

上图是不满足1NF的,很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

存在问题:

  1. 数据冗余

  2. 插入异常

  3. 删除异常

  4. 更新异常

第二范式

在1NF的基础上,数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,也即所有非关键字段都完全依赖于任意一组候选关键字。简称2NF。

image-20210924114419234

存在问题

  1. 数据冗余

    同一门课程由n个学生选修,"学分"就重复n-1次;
    同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
    
  2. 插入异常

    假设要开设一门新的课程,暂时还没有人选修。这样,
    由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
    
  3. 删除异常

    假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表
    中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,
    这也会导致插入异常。
    
  4. 更新异常

    若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,
    否则会出现同一门课程学分不同的情况。
    

规范化

消除部分函数依赖,满足完全函数依赖,就可以得到2NF。

把选课关系表改为如下三个表:

image-20210924115441612

这样的数据库表是符合第二范式的。不过2NF还是存在数据冗余、插入、删除、修改异常的。
所以需要继续对关系进行规范化。

第三范式

在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。简称3NF。

image-20210924121234098

存在问题

  1. 数据冗余
  2. 插入异常
  3. 删除异常
  4. 更新异常

自行分析可以得知。

规范化

消除函数传递依赖。就可以得到3NF

把学生关系表分为如下两个表:

image-20210924122602458

这样的数据库表是符合第三范式的。3NF解决了2NF中存在的四个问题:

  1. 数据冗余降低了
  2. 不存在插入异常
  3. 不存在删除异常
  4. 不存在更新异常

巴斯-科德范式(BCNF)

在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BCNF范式。

image-20210924134302693

存在问题

  1. 删除异常
  2. 插入异常
  3. 更新异常

规范化

把仓库管理关系表分解为二个关系表

image-20210924134622518

这样的数据库表是符合BCNF的,消除了删除异常、插入异常和更新异常。

2.8 小结

image-20210924163253696

http://chatgpt.dhexx.cn/article/wI6TAejT.shtml

相关文章

锂离子电池的国际标准和国家标准(含安全方面IEC62133等,IEC61060电性能和UN38.3 GB4943运输存储标准)

做锂电池测试的相关标准 锂离子电池相关标准&#xff1a; 国家标准公开系统&#xff1a;国家标准全文公开 国家标准|GB 31241-2022下载和预览 GB31241-2022《便携式电子产品锂离子电池和电池组 安全技术规范》与2014变化内容 GB31241-2022国家强制标准&#xff0c;2024年1月1…

IEC 60664-1-2020【现行】低压供电系统内设备的绝缘配合第1部分:原则、要求和试验

IEC 60664-1-2020【现行】低压供电系统内设备的绝缘配合第1部分:原则、要求和试验 IEC60664-1-2020【现行】低压供电系统内设备的绝缘配合第1部分:原则、要求和试验-咨询文档类资源-CSDN下载IEC60664-1-2020【现行】低压供电系统内设备的绝缘配合第1部分:原则、要求和试验&…

IEC60958/61937协议

目录 第零节 本文内容 第一节 IEC60958/61937协议概述 第二节 IEC60958/61937硬件接口 第三节 IEC60958数据格式 第四节 IEC61937数据格式 第零节 本文内容 IEC60958/61937协议是我们音频开发中常见的一种协议&#xff0c;本文就叙述一下该协议的架构&#…

c 17 语言标准下载,C++ 17 标准手册(含C++ 17 STL Cookbook) 官方pdf原版

这里提供C 17 标准手册&#xff1a;Working Draft, Standard for Programming Language C 和C 17 STL Cookbook下载&#xff0c;包含C17 标准 ISOIEC 14882 2017 官方pdf文档&#xff0c;需要的朋友可下载试试&#xff01; C17 是继 C14 之后&#xff0c;C 编程语言 ISO/IEC 标…

漫谈工业软件(2)-IEC61499标准

IEC 61499是用于分布式工业过程测量与控制系统(IPMCSs)功能块的标准。该标准的名称表明了两个重要的概念 -分布式工业过程测量与控制系统 (IPMCSs)表明该标准针对的是工业分布式系统-由多台设备通过网络构成的系统。相比之下&#xff0c;IEC61131 PLC 标准针对的是单台设备的…

行业认证标准:IEC 62304-医疗设备软件安全分类标准

什么是IEC 62304? IEC 62304标准在医疗设备行业中使用,它是一种软件安全分类,它为软件生命周期过程提供了一个框架,其中包含为安全设计和维护医疗设备软件所必需的活动和任务。美国FDA接受IEC 62304合规性作为证明医疗设备软件已根据要求的法规/标准进行设计的证据,因为它…

c语言c11标准 下载,【整理】C语言的各种版本:C89,AMD1,C99,C11

【背景】 之前就知道了有个C90和C99。 后来又在&#xff1a; 期间知道有C11。 现在去整理一下&#xff0c;关于C语言的版本方面的更详细的内容。 参考内容&#xff1a; C语言版本历史 C语言主要有三个版本&#xff1a; ANSI CC89C90 ANSI C standardX3.159-1989 1989年批准通过…

iec611313标准下载_IEC 60249-1-1982(R1993)

基本信息 标准号&#xff1a;IEC 60249-1-1982(R1993) 标准名称&#xff1a;Base Materials For Printed Circuits. Part 1: Test Methods 外文名&#xff1a; Base Materials For Printed Circuits. Part 1: Test Methods 标准状态&#xff1a; 废止 被以下替代标准&#xff1…

iec611313标准下载_IEC 61730-1-2016

基本信息 标准号&#xff1a;IEC 61730-1-2016 标准名称&#xff1a;Photovoltaic (Pv) Module Safety Qualification – Part 1: Requirements For Construction 外文名&#xff1a; Photovoltaic (Pv) Module Safety Qualification – Part 1: Requirements For Construction…

iec611313标准下载_IEC 62108-2016

基本信息 标准号&#xff1a;IEC 62108-2016 标准名称&#xff1a;Concentrator Photovoltaic (Cpv) Modules And Assemblies – Design Qualification And Type Approval 外文名&#xff1a; Concentrator Photovoltaic (Cpv) Modules And Assemblies – Design Qualification…

国际著名标准化组织及ISO/IEC/ASTM/IEEE等国际标准免费下载地址

在知识经济时代&#xff0c;标准已被称作世界的通用语言。你看不懂语言没关系&#xff0c;但是一个标准的图形符号&#xff0c;你就能看明白&#xff0c;很快能GET到你需要的信息。在没有标准的世界&#xff0c;不仅人与人之间难以沟通&#xff0c;机器、零部件以及产品之间的联…

光伏产品标准 - IEC 61215:2021版系列简介及标准下载

光伏产品标准 - IEC 61215:2021版全系列简介及标准下载 2021年初&#xff0c;IEC正式发布了光伏产品IEC 61215:2021相关系列标准的更新版本&#xff0c;这也是IEC 61215:2016发布以来的首次更新。近五年来光伏行业技术发展迅猛&#xff0c;新标准的推出也迫在眉睫&#xff0c;历…

Java入门教程(二)程序设计基础

Java入门 二.Java程序设计基础1.标识符和关键字1.1标识符概述1.2标识符1.3关键字概述1.4关键字特点&#xff1a; 2.注释2.1概述2.2注释分类 3.Java常量3.1常量概述3.2常量分类 4.数据类型4.1计算机存储单元4.2数据类型4.3内存占用和取值范围 5.Java变量5.1变量概述5.2变量定义5…

Java程序设计教程——第四、六章习题

1、判断题 下标是用于指出数组中位置的数字或变量。&#xff08;X&#xff09;同一个数组中可以存放多个不同类型的数据。&#xff08;X&#xff09;[数组是相同数据类型的数据元素的集合]数组的下标可以是int型或float型。&#xff08;X&#xff09;数组可声明为任何数据类型…

Java程序设计与实践教程

Java简介&#xff1a; Java的名字来源于印度尼西亚爪哇岛的英文名&#xff0c;这个小岛因盛产咖啡而闻名。JavaBeans&#xff08;咖啡豆&#xff09;&#xff0c;Sun和Java的标识也正是一杯冒着热气的咖啡。Sun&#xff08;Stanford University Network&#xff09;公司被美国…

java入门-java程序

前言 java入门系列&#xff0c;自我学习总结&#xff0c;用来记录一些入门简单的知识点和自己的思考总结&#xff0c;不会很详细的进行记录。 参考文档地址&#xff1a;菜鸟教程 参考文档地址&#xff1a;廖雪峰 Java 教程 参考视频笔记&#xff1a;b站尚硅谷 什么是计算机程…

《Java语言程序设计》

一、Java概述 Java是简单的&#xff0c;面向对象的语言&#xff0c;具有分布性、安全性、健壮性&#xff1b;最初版本是解释执行的&#xff0c;后期增加了编译执行&#xff1b;是多线程的、动态的&#xff1b;最主要的是与平台无关&#xff0c;解决了软件移植的问题。 Java语…

Java程序设计教程(第3版)雍俊海 全书例程-1

按书的页码排列 如果代码有误&#xff0c;欢迎评论区指正&#xff01; p14简单招呼程序例程 public class J_HelloJava {public static void main(String args[ ]){System.out.println("Java语言&#xff0c;您好!");System.out.println("我将成为优秀的Java程…

Java程序设计基础——简单Java程序

简单Java程序 一、Java应用程序1.HelloWorldApp源代码&#xff1a;编译运行&#xff1a; 二、Java小应用程序1.HelloApplet源代码&#xff1a;编译运行&#xff1a; 2.firstApplet源代码&#xff1a;编译运行&#xff1a; 一、Java应用程序 1.HelloWorldApp 源代码&#xff1…

java程序入门

java程序基础入门 第1章 认识java1.1 Windows系统Java开发环境搭建1.2 Java运行及原理分析1.3 java基础语法1.4 本章小结 第2章 变量&运算符2.1 变量的概念和作用2.2常量2.3 数据类型2.4 运算符2.5 本章小结 第3章 流程控制语句3.1 选择结构3.2 循环语句 第1章 认识java J…