数据库原理第二章
第二章 关系数据库
2.1 关系数据库概述
2.1.1 关系数据库的产生历史
1970年 IBM的E.F.Codd提出了关系模型,奠定了关系数据库的理论
20世纪70年代末 关系方法理论研究和软件系统的研制取得了重大突破
1981年 出现了比较成熟的关系数据库管理技术。证实了
关系数据库的优点:
高级的非过程语言接口、较好的数据独立性。
20世纪80年代后 网状模型和层次模型与底层实现的结合紧密,关系模型具 有坚实理论基础,成为主流数据模型
2.2 关系数据模型
2.2.1 关系数模型的组成要素
数据模型的要素包括:数据结构、数据操作、数据约束
关系数据模型的组成要素:关系数据结构、关系操作集合、关系完整性约束
2.2.2 关系数据结构
表(Tbale)
也称为关系,是一个二维的数据结构,由表名、列、若干行数据组成
每一表有唯一的表名,表中每一行数据描述一条具体的记录值
关系(Relation)
一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行表示
关系的三种类型:基本关系、查询表、视图表
基本关系(基本表、基表)实际存在的表
查询表 和 视图表 为导出的虚表
列(Column)
也称为字段(Field)或属性(Attribute)
同一个表中 表名必须唯一 字段名必须唯一
不同表中可以出现相同的字段名
属性(Attribute)= 列
属性的个数称为关系的 元或度,
列的值称为 属性值,其取值范围称为 值域
行(Row)
也称为元组(Tuple)或记录(Record)。表中的数据按行存储
分量(Component) = 具体的数据项
元组(行)中的一个属性值,称为分量
码和键(Key)
属性(或属性组)的值都能用来唯一标识该关系的元组,则称这些属性或属性组为该关系的码或键
属性组表示 多个属性的组合
超码或超键(Super Key)
在码中去除某个属性,它仍然是这个关系的码
候选码或候选键(Candidate Key)
在码中不能从中移去任何一个属性,否则它就不再是这个关系的码或键
候选码或候选键是这个关系的最小超码或超键
主属性(Primary Attribute )或非主属性(Noprrimary Attribute )
包含在任何一个候选码中的属性称为主属性或码属性
主码或主键(Primary Key)(主观意识决定)
在若干个候选码中指定一个唯一标识关系的元组(行)
全码或全键(All Key)
一个关系模式的所有属性集合是这个关系的主码或主键,这样的主码或主键称为全码或全键
外码或外键(Foreign Key)
某个属性或属性组不是这个关系的主码或候选码,而是另一个关系的主码
参照关系(Referencing Relation)和被参照关系(Referenced Relation)
参照关系也称为从关系,被参照关系也称为主关系,它们是指以外码相关联的两个关系
域(Domain)
表示属性的取值范围
数据类型
每个列都有相应的数据类型,它用于限制(或容许)该列中存储的数据
关系模式
关系模式=表头
关系模式是型,关系是值,即关系模式是对关系的描述
关系模式是静态的、稳定的
关系是动态的随时间不断变化
关系数据库(Relation Database)
所有关系的集合,构成一个关系数据库
以关系模型作为数据的逻辑模型,并采用关系作为数据组织方式的一类数据库,其数据库操作建立在代数的基础上
关系数据库对关系的限定/要求:
1)每一个属性都是不可分解的(不允许表中有表)
2)每一个关系仅仅有一种关系模式
3)每一个关系中的属性必须命名,属性名不同;
4)同一个关系中不允许出现候选码或候选键值完全相同的元组
5)在关系中元组的顺序是无关紧要的,可以任意交换
6)在关系中属性的顺序是无关紧要的,可以任意交换
2.2.3 关系操作
基本关系操作
增删改查
查询为一类
插入删除修改为一类表示更新
查询:
传统:选择 投影 并 差 笛卡尔积
专门:连接 除 交
特点:集合操作方式 一次一集合
2.2.4 关系数据语言
关系代数语言
SQL结构化查询语言
关系演算语言 元组关系演算,域关系演算
共同特点:
具备完备的表达能力,是非过程化的集合操作语言,功能强,能够独立使用也可以嵌入高级语言使用
过程化:没有独立的自主思考,分步
非过程化:无需要分步骤,具有自主独立思考的
高级语言:例如C++ Java Python等等
2.2.5 运算符
任何一种操作都包含三大要素:
操作对象
操作符
操作结果
2.2.6 传统的集合运算符
这里是关系代数的传统的集合运算
并U、差-、交N、笛卡尔积X
并:两个关系必须有相同的属性个数(只需要加上相同)
差:两个关系必须有相同的属性个数(只需要减去相同)
交:两个关系必须有相同的属性个数(只需要相同)
笛卡尔积:行 有两个表的行数相乘, 列是两个表的列相加(行乘列加)
2.2.7 专门的关系运算符
选择 投影 连接 除
选择:F表示条件,R表示表名
投影(PROJECTION):A表示属性名, R表示表名
连接(JOIN),分为等值连接和自然连接
1、笛卡尔积
2、只留属性值相等的
3、去掉重复列
2.2.8 完整性约束
关系的完整性约束
数据库的数据完整性是指数据库中数据的正确性、相容性、一致性
在一个关系表中,学生的学号必须是唯一的,性别必须是男女,不是漂亮美丽,学生所选修的课程必须是已开设的课程
分类:
实体完整性约束:
主码的组成不能为空,主属性不能是空值NULL(候选码也是不能为空的)
参照完整性约束:
定义外码和主码之间的引用规则
要么外码等于主码中某个元组的主码值,要么为空值NULL(等于主码,或为空)
实体性完整性约束与参照完整性约束 关系的两个不变性
用户定义完整性约束
应用领域不同,用户定义也不尽相同
域完整性约束(针对某一应用环境的完整性约束)、其他
1)执行插入需要的完整性约束:
检查实体完整性约束、
检查参照完整性约束(一定是向参照关系插入时才需要)
检查用户完整性约束
2)执行删除需要的完整性约束:
删除的数据满足三个完整性约束
需要检查参照完整性约束(一般只需要对被参照关系检查参照完整性约束)
2)执行更新需要的完整性约束:
先删除再插入
2.3 关系数据库的规范化理论
关系模式有如下存在的问题:
数据冗余:指同一数据被反复存储的情况
更新异常:数据冗余造成的,多个内容更改使操作错误
插入异常:
删除异常:
函数依赖于关键字
函数依赖:关系中属性间的对应关系
设R为任一给定关系,如果对于R中属性X的每一个值,R中的属性Y只有唯一值与之对应,则称X函数决定Y或称Y函数依赖于X,记作X->Y(X决定Y)。其中X称为决定因素
实际上X就是码的概念
对于关系R中的属性X和Y,若X不能函数决定Y,记作X≠>Y(X不能决定Y)
完全函数依赖
设R为任一给定关系,X、Y为其属性集,若X->Y,且对X中的任何真子集都有X`,都有X`≠>Y,则称Y完全函数依赖于X
此时这里的X为候选码
部分函数依赖
设R为任一给定关系,X、Y为其属性集,若X->Y,且对X中存在一个真子集X`,都有X`->Y,则称Y部分函数依赖于X
此时X为超码
传递函数依赖
设R为任一给定关系,X、Y、Z为其不同属性集,若X->Y,Y≠>X, Y->Z,则有X->Z,则称为Z传递函数依赖于X
关键字的定义
设R为任一给定关系,U为其所含的全部属性集合,X为U的子集,若有完全函数依赖X->U,则X为R的一个候选关键字(候选码)
第一范式1NF
设R为任一给定关系,若果R中每个列于行的交点处的取值都是不可再分的基本元素,则R为第一范式
存在数据冗余高、删除异常、插入异常
第二范式2NF
设R为任一给定关系,若R为第一范式
且其所有非主属性都完全函数依赖于候选关键字,
则R为第二范式
第一范式消除部分函数依赖就是第二范式
第三范式3NF
设R为任一给定关系,若R为第二范式
且其每一个非主属性都不存在传递函数依赖于候选关键字,
则R为第二范式
第二范式消除传递函数依赖就是第三范式
第三范式的改进形式BCNF
设R为任一给定关系,X,Y为其属性集,F为其函数依赖集,
若R为第三范式
且其F中所有函数依赖X->Y(Y不属于X)中的X必包含候选关键字,
则R为BCNF
一般称为3.5NF
满足第4NF一定满足BCNF
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战