关系模型的数据结构是:
二维表结构
,它是
关系型数据库
的基础。
关系数据模型由
关系数据结构、关系操作和关系完整性约束
三部分组成。
关系必须是
规范化
的,满足一定的
规范条件
。
关系数据库必须满足
1NF
范式,即一张表中不包含
子表
。(
关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表
)
关系模型只是
常用的数据模型
的一种,数据模型按照
数据之间的联系
可以划分为:
-
层次
模型
-
网状
模型
-
关系
模型
-
面向对象
模型
2、关系模型的基本概念
关系模型在1970年提出,操作语言是
结构化查询语言SQL
(Structural Querry Language)
-
关系
:通常指一张
表
-
元组
:表中的一行
记录
-
属性
:表中的一
列
,有
属性名和属性值(分量)
-
分量
:元组中的一个
属性值
-
关系模式
:对关系的
描述
,通常有几张表就有几个关系模式
-
域
:属性值的
取值范围
-
键
:
-
超键(关键字)
:在关系中能
唯一标识元组的属性集
-
候选键
:不含有
多余属性
的
超键(候选键中的所有属性都是必须的,缺少任何一个属性,都不能唯一标识一个元祖)
-
主键
:用户
选作
元组标识的
候选键
(
人为设定
)
-
外键
:
如果关系模式R中的属性k是其他关系模式的主键,则k是R中的外键
(表与表的关系通过外键来描述)外键表中的外键不能有主键表中
不存在
的数据。(保证数据的完整性和一致性)
-
主属性
:一个属性只要在
任何一个候选键
中出现过,这个属性就是主属性。
-
非主属性
:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。
举例说明超键、候选键等概念的含义:
假设有如下两张表:学生信息
(学号 身份证号 性别 年龄 身高 体重 宿舍号)和
宿舍信息
(宿舍号 楼号)
超键
:只要含有“学号”或者“身份证号”两个属性的集合就叫超键,例如R1(学号 性别)、R2(身份证号 身高)、R3(学号 身份证号)等等都可以称为超键!
候选键
:不含有多余的属性的超键,比如(学号)、(身份证号)都是候选键,又比如R1中学号这一个属性就可以唯一标识元组了,而有没有性别这一属性对是否唯一标识元组没有任何的影响!
主键
:
就是用户从很多候选键选出来的一个键就是主键
,比如你要求学号是主键,那么身份证号就不可以是主键了!
外键
:宿舍号就是学生信息表的外键
主属性
:出现在候选键中的属性称为主属性,如上面学号、身份证号都是主属性。
非主属性
:没有在任何候选键中出现的属性,称为非主属性。如上面性别、年龄、身高、体重、宿舍号都是非主属性。
关系的完整性约束
-
实体完整性
:关系必须有
主键
,且
主键不能重复
,
不能为空
-
参照完整性
:以
外键
的形式维护实体间的引用关系,可以
为空
或者值为
被参照关系的主键值
-
用户自定义完整性
:用户由应用环境决定的针对
具体关系数据库
的约束(属性类型等)
3、关系代数
我们以如下的两张表作为原始数据:
并操作(Union)
关系(表) R 与关系 S 的并(∪)由
属于 R 或属于 S
的元组(记录)组成。
差操作(except)
关系R与关系S的差由
属于R而不属于S
的所有元组组成。
交操作(intersection)
关系R与关系S的差由
属于R且属于S
的所有元组组成。
笛卡尔积(cartesian product)
这里的笛卡尔积严格地讲是
广义笛卡尔积
。在不会出现混淆的情况下广义笛卡尔积也称为笛卡尔积。
两个分别为n目和m目的关系R和S的广义笛卡尔积是一个
n+m列
的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有
k1×k2
个元组。
R中的每一行元素与S中的每一行元素连接。
相当于:
select 列名 from 表A,表B
或者
select 列名 from 表A join 表B
投影(projection)
关系R上的投影是从R中选择出
若干属性列
组成新的关系。
相当于:
select 列名 from 表名
。
选择(selection)
选择又称为限制(Restriction)。它是在关系R中
选择满足给定条件的诸元组
。
相当于:
select * from 表名 where 条件
。
除(division)
除法运算是一个复合的二目运算。如果把笛卡尔积看作“乘法”运算,则除法运算可以看作这个“乘法”的逆运算。
若T=R÷S,则S×T的结果应该
全部包含
在R中。
关系数据库中,除法的计算,详细过程参见
https://blog.csdn.net/weixin_42023723/article/details/80876568
。
连接(join)
关系R与关系S的连接运算是从两个关系的
广义笛卡尔积
中选取
属性间满足一定条件
的元组形成一个新的连接。(如果不加任何条件,那么默认的连接就是两张表的广义笛卡尔积)。连接可以分为
内连接
、
自然连接
和
外连接,
其中外连接又可以分为左外连接、右外连接、全外连接。
(1)等值连接(equal join)
从关系R和S的广义笛卡尔积中选取
A、B属性值
相等的那些元组。
对应的SQL语句为:
select * from R join S on R.A = S.B
(2)自然连接(natural join)
自然连接是一种
特殊的等值连接
,它要求两个关系中进行比较的分量必须是
相同的属性组
,并且在结果中把
属性重复的列
去掉。
对应的SQL语句为:
select * from R natural join S。
等值连接与自然连接的区别和联系:
1、自然连接
一定
是等值连接,但等值连接
不一定
是自然连接。
2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量
必须是公共属性
。
3、等值连接不把重复的属性除去;而自然连接要
把重复的属性除去
。
(3)内连接(inner join)
内连接是将两张表中
共有某属性值
的记录挑选出来。与等值连接类似,二者都是取
交集
。
(4)左外连接(left join)
在自然连接的基础上,保证
左表完全显示
,右表若不存在则
用null填满
。
(5)右外连接(right join)
在自然连接的基础上,保证
右表完全显示
,左表若不存在则
用null填满
。
(6)全外连接(OUTER JOIN)
左连接+右连接+去重=全连接
在MySQL中不支持FULL JOIN(全连接),但是可以通过UNION来实现,通过将左外连接和右外连接的结果求并得到。
(SELECT * FROM test1 LEFT JOIN test2 on test1.C=test2.d) UNION (SELECT * FROM test1 RIGHT JOIN test2 on test1.c = test2.C);
4、函数依赖
平凡的函数依赖
如果X→Y,但Y∈X,则称X→Y是平凡的函数依赖.
非平凡的函数依赖
如果X→Y,但Y∉X,则称X→Y是非平凡的函数依赖。通常情况下总是讨论
非平凡的函数依赖
.
完全函数依赖
如果存在 X 属性集(注意是集合,说明是
联合主键
)决定唯一的 Y ,且
X 中的任一子集都不能决定 唯一的 Y
,则 Y 完全依赖于 X。
例子:学生数学成绩完全由该学生的学号和数学课决定,所以
数学课成绩完全依赖于(学号,数学课)
部分函数依赖
如果存在 X 属性集(注意是集合,说明是
联合主键
)决定唯一的 Y ,且
X 中的任一子集也可以决定 唯一的 Y
,则 Y 部分依赖于 X。
例子:学生学号和姓名可以决定唯一的学生,但是学号
也可以
决定唯一的学生。
传递函数依赖
如果X→Y,Y∉X,Y→Z,Y不完全函数依赖于X,则称Z对X
传递依赖
。
例如:书的出版编号是唯一,版权归出版社所有,所以只能由该出版社出版。所以存在函数依赖:
书出版编号—>出版社名,出版社名—>出版社地址
,但是出版社名不能决定唯一的出版书编号(除非出版社只出版过一本书,那我没话说?),则有出版书编号传递依赖于出版社地址。
5、关系范式
范式是
符合某一种级别的关系模式的集合
。
设计
性能较优
的关系模式称为
规范化
,规范化主要的理论依据是关系规范化理论。目的是
消除插入、删除异常和数据冗余,提高数据库性能。
一般而言,我们只要让数据库中的所有表符合
第三范式或者BCNF
即可。
数据冗余是指
各个数据文件中存在重复的数据
。会导致:
在文件管理系统中各数据文件中难免有许多数据相互重复,数据的冗余度比较大。数据库系统更注重文件之间的联系。数据库系统中的数据具有
共享性
,因而尽可能地避免了数据的重复存储,减少和控制了数据的冗余。
然而,DBS中也不是不存在数据冗余的现象。
当存在传递依赖或者部分依赖时,必然会出现数据冗余现象
,我们要依据
关系范式
进行
数据表分解
,从而减轻冗余。
第一范式1NF(原子性)
表中的每一列都是
不可分解的基本数据项
,每一个属性
不可拥有
多个值。是关系数据库的
基本要求
。需要满足
原子性
。
第二范式2NF(消除部分依赖)
前提是满足1NF。此外:一个表必须有主键,
非主属性必须完全依赖于主键。
(
消除非主属性对主键的部分依赖
)
第三范式3NF(消除传递依赖)
前提是满足2NF。此外:
任意一个非主属性都不可传递依赖于主键
。(消除非主属性对主键的
传递依赖
)(要求依赖右侧全部为候选键或者它的成员)
BC范式BCNF(主属性不能依赖于主属性)
前提是满足3NF。此外:
不能存在主键的一部分被另一部分或者非主键的其它部分所决定
。(消除所有部分依赖与传递依赖)(要求依赖右侧全部为候选键)
要求把同一表内的多对多关系删除。
从最终结构重新建立原始结构。
闭包指的是:
由一个属性或者属性组直接或间接推导出的所有属性的集合
。
求闭包的算法:
循环迭代
,每一次迭代过程中找到能够被当前闭包中的属性直接推出的属性加入到闭包中。直到无法加入新属性。
7、关系型数据库和非关系型数据库
数据库 类型
|
特性
|
优点
|
缺点
|
关系型数据库:SQLite、Oracle、mysql
|
1、关系型数据库,是指采用了
关系模型
来组织数据的数据库;
2、关系型数据库的最大特点就是事务的
一致性
;
3、简单来说,关系模型指的就是
二维表格模型
,而一个关系型数据库就是由
二维表及其之间的联系
所组成的一个数据组织。
|
1、
容易理解
:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
2、
使用方便
:通用的SQL语言使得操作关系型数据库非常方便;
3、
易于维护
:丰富的完整性:实体完整性、参照完整性和用户定义的完整性。大大减低了
数据冗余和数据不一致
的概率;
4、
支持SQL
,可用于复杂的查询。
|
1、为了维护一致性所付出的巨大代价就是其
读写性能比较差
;
2、固定的
表结构
;
3、不适合
高并发
读写需求;
4、不适合
海量数据
的高效率读写;
|
非关系型数据库:MongoDb、redis、HBase
|
1、使用
键值对(也可以是文档形式、图片形式等)
存储数据;
2、
支持分布式
;
3、一般不支持事务的
ACID特性
;
4、非关系型数据库严格上不是一种数据库,应该是一种
数据结构化存储方法的集合
。
|
1、无需经过sql层的解析,
读写性能很高
;
2、基于键值对,数据没有
耦合性
,
容易扩展
;
3、存储数据的格式:nosql的存储格式是
key,value形式、文档形式、图片形式
等等,而关系型数据库则只支持基础类型。
|
1、不提供sql支持,
学习和使用成本较高
;
2、
无事务处理
,附加功能bi和报表等支持也不好;
|
数据的持久存储,尤其是
海量数据的持久存储
,还是需要一种
关系数据库
。
参考资料:
1、
https://blog.csdn.net/weixin_42023723/article/details/80876568
2、
https://hillzhang1999.gitee.io/2020/05/29/shu-ju-ku-fu-xi-ji-yu-mysql/#toc-heading-39
一、关系模型基础知识1、关系模型概述关系模型的数据结构是:二维表结构,它是关系型数据库的基础。关系数据模型由关系数据结构、关系操作和关系完整性约束三部分组成。关系必须是规范化的,满足一定的规范条件。关系数据库必须满足1NF范式,即一张表中不包含子表。(关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表)关系模型只是常用的数据模型的一种,数据模型按照数据之间的联系可以划分为:层次模型 网状模型 关系模型 面向对象模型2、关系模型的基本概念关系模型在1970年提
r÷s=ΠR−S(r)–ΠR−S((ΠR−S(r))×s–ΠR(r))
r \div s = \Pi_{R-S}(r) – \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r))r÷s=ΠR−S(r)–ΠR−S((ΠR−S(r))×s–ΠR(r))
包含着投影、笛卡尔积、差
关系
运算
理解:除法...
关系
的组成
$D_1\times D_2\times D_3\times...\times D_n$的子集叫做域在$D_1,D_2, D_3,...,D_n$上的
关系
,表示为:
R(D_1,D_2,D_3,...,D_n)
R:
关系
名
n:
关系
的目或度
关系
中的每个元素是
关系
中的元组,通常用t表示...
第一步:找出
关系
R和
关系
S中相同的属性,即Y属性。在
关系
S中对Y做投影(即将Y列取出);所得结果如下
第二步:被除
关系
R中与S中不相同的属性列是X ,
关系
R在属性(X)上做取消重复值的投影为{X1,X2};
第三步:求
关系
R中X属性对...
5.
数据库
管理系统的类型:
- 层次型
数据库
管理系统(HDBMS):数据以树形结构组织,不适用于复杂的数据结构
- 网状型
数据库
管理系统(NDBMS):数据以网状结构组织,可以处理更复杂的数据结构
-
关系
型
数据库
管理系统(RDBMS):数据以表格形式组织,最常用的类型
- NoSQL
数据库
管理系统:非
关系
型
数据库
,适用于大数据和分布式系统
希望这些
笔记
能够对你的
复习
有所帮助!