数据库系统概论学习笔记

文章目录

  • 前言
  • 数据库系统概论复习
    • 一、绪论
      • 概念模型
      • 逻辑模型
      • 三层模式结构 外模式+模式+内模式
    • 二、关系数据库
      • 关系数据结构
      • 关系的操作
        • 关系代数运算符
        • 笛卡尔积
        • 选择
        • 投影
        • 连接
          • 自然连接
          • 外连接
      • 关系的完整性
    • 三、SQL语言
        • 查询
          • 查询&起别名
          • 结果去重 distinct
          • 条件查询
          • 多重条件查询
          • 嵌套查询
          • 带有exists谓词的子查询
          • 关于exists和not exists的一些理解
        • 插入
        • 修改
        • 删除
    • 五、数据库的完整性
      • 三大完整性
      • 断言
      • 触发器
    • 六、关系数据理论
      • 依赖
        • 完全函数依赖和部分函数依赖
        • 传递函数依赖
      • 候选码
      • 三大范式
        • 1NF
        • 2NF
        • 3NF
        • BCNF
      • 最小依赖集
      • 模式分解
    • 七、数据库设计
      • 数据库设计的基本步骤
      • ER图
      • ER图转关系模型
    • 九、关系查询处理和查询优化
    • 十、数据库恢复技术
      • 事务
        • 事务的ACID特性
        • 恢复策略
    • 十一、并发控制
      • 并发带来的问题
      • 解决办法
      • 封锁协议


前言

参考教学视频:bilibili 张旭
由于排版问题,建议大家到我的个人网站,慢慢食用 传送门


数据库系统概论复习

一、绪论

概念模型

  • 实体:客观存在并可相互区别的事物,人
  • 属性:实体所具有的性质和特性
  • 码:唯一标识实体的属性。学号id等
  • 实体型:用实体名和其属性集合来刻画同类实体。如分数为100的学生
  • 实体集: 同一类型的集合

实体之间有一对一、一对多和多对多等多种联系

概念模型的一种表示方法:实体-联系方法,用E-R图来描述现实世界的概念模型,也叫E-R模型

逻辑模型

  • 层次模型
    • 有且只有一个节点没有双亲节点,这个节点成为根节点
    • 根节点以外其他节点有且只有一个双亲节点
  • 网状模型
    • 允许一个以上的节点无双亲
    • 一个节点可以有多个双亲
  • 关系模型
    • 一张表包含字段属性等

关系:一个关系对应通常说的一张表

元组:表的一行

属性:表的一列

码:也称码键,表中某个属性组

域:是一组具有相同数据类型的值得集合

分量:元组的一个属性

三层模式结构 外模式+模式+内模式

  • 外模式:用户能够看到的局部数据逻辑结构
  • 模式:也称为逻辑模式,数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
  • 内模式:也称存储模式,一个数据库只能够有一个内模式,它是数据物理结构和存储方式的描述,数据在内部的组织方式

数据库系统概论学习笔记_第1张图片

二、关系数据库

关系数据结构

笛卡尔积

关系

​ – 关系,属性,元组

​ – 候选码,主码,主属性

​ – 基本关系的性质

关系的操作

  • 查询
    选择、投影、连接、除、并、交、差

  • 数据更新
    插入、删除、修改

  • 基本运算
    并、差、笛卡尔积、投影、选择

关系代数运算符

数据库系统概论学习笔记_第2张图片

交并差这里不再赘述。

笛卡尔积

数据库系统概论学习笔记_第3张图片

笛卡尔积即是两个表的元组之间排列组合

选择

比如 在student表中选择sdept=‘2s’的全部信息
σ s d e p t = ′ 2 s ′ ( s t u d e n t ) \sigma_{sdept}='2s'(student) σsdept=2s(student)

投影

查询指定属性,如查询sname,sex在student表中
π s n a m e , s e x ( s t u d e n t ) \pi_{sname,sex}(student) πsname,sex(student)
比如在表SC中查询学号(sno)为95001的学生选修的课程号(cno)
π c n o ( σ s n o = ′ 9500 1 ′ ( S C ) ) \pi_{cno}(\sigma_{sno}='95001'(SC)) πcno(σsno=95001(SC))

连接

自然连接

自然连接:把共同属性进行等值连接

悬浮元组:在连接时,R中某些元组可能不存在与公共属性相等的值,从而造成关系R中的这些元组被舍弃,这些被舍弃的元组称为悬浮元组。如下面例子当中的第二三五行就是悬浮元组

例如表R连接表S表示为
R ⋈ S R\bowtie S RS
数据库系统概论学习笔记_第4张图片

外连接
  • 外连接
    外连接:把悬浮元组也包括在结果当中,其他属性为null。
  • 左外连接
    左外连接:只保存左边关系的悬浮元组
  • 右外连接
    右外连接:只保存右边关系的悬浮元组

除:保留R中满足S的(R和S的共同属性),而且R中列要去掉S的列

数据库系统概论学习笔记_第5张图片 数据库系统概论学习笔记_第6张图片

关系的完整性

  • tab 实体完整性
    主码唯一且非空
  • 参照完整性
    外码要么为空,要么对应另一表的主码
  • 用户定义完整性
    实体的属性要完整,比如学号多少,姓名,班级,专业之类

三、SQL语言

查询

数据库系统概论学习笔记_第7张图片

查 询 条 件 谓 词
比 较 =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空 值 IS NULL,IS NOT NULL
多重条件(逻辑运算) AND,OR,NOT

案例

数据库系统概论学习笔记_第8张图片
查询&起别名
  • 查询所有

​ select * from edu_student;

  • 查询id(别名标志),title(别名课程名称),从edu_course表(别名ec)中

​ select id 标志,title 课程名称 from edu_course ec;

结果去重 distinct
  • 去掉重复的课程名称

​ select distinct title 课程名称 from edu_course;

条件查询
  • where 查询价格大于等于88的课程名称

​ select title 课程名称 from edu_course where price>=88

  • in 查询结果是否在集合中

​ select 3 in (1,2);

  • like 模糊匹配

​ select * from edu_course where title like ‘_速成’;

'-'代表一个不确定字符

'%'代表多个不确定字符

isnull 和is not null不再赘述

多重条件查询

and 和or不再赘述

  • 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列

​ select sno,grade from sc where cno=‘3’ orderby grade desc;

数据库系统概论学习笔记_第9张图片

  • 查询学生总人数

​ select count(*) from student;

  • 查询1号课程的学生平均成绩

​ select avg(grade) from sc where cno =‘1’;

嵌套查询

如:

​ select sno,sname,sdept from student where sdept in

​ (select sdept from student where sname = ‘刘晨’);

  • 查询其他系中比cs系某一学生 年龄小的学生姓名和年龄

​ select sname,sage from student where sage ‘cs’;

带有exists谓词的子查询

数据库系统概论学习笔记_第10张图片

主要是解决“至少选择了”、“只选择了”和“选择了全部”类似的问题

例如:

数据库系统概论学习笔记_第11张图片 数据库系统概论学习笔记_第12张图片 数据库系统概论学习笔记_第13张图片
关于exists和not exists的一些理解

这里的exists和not exists有些绕,我加入了一些自己的理解:

比如上面的例子,可以理解为一条一条数据来判断,从最外层开始,首先查询所有的学号sno,传入下一层的是第一个sno,接下来对这个sno进行判断,

下一层select中查询出来的是学号为‘20021522’学生所选全部课程,传入下一层的是第一个sno+第一个课程cno

最后一层进行判断,sno是否选修了cno,接下来判断sno是否选修了cno2,依次类推,如果都选修了,那么最后一层传出的是false(因为是not exists),再往上一层传的是ture(又是not exits),所以这条数据就被保留了,接下来就是第二个学生sno2传入下一层,

以此类推,就可以找出所有“至少选修了所有学号为‘200215122’学生选修课程的学生”

插入

insert into 表名[(字段列表)] values (值列表)

修改

update 表名 set 字段1=值,字段2=值…where 条件

删除

delete from 表名 [where 条件]

五、数据库的完整性

三大完整性

  1. 实体完整性

    主码唯一且非空

  2. 参照完整性

    外码要么为空,要么对应另一表的主码

  3. 用户定义完整性

    实体的属性要完整,比如学号多少,姓名,班级,专业之类

    • 非空
    • 列表唯一
    • 满足某一个条件表达式 如性别只有男女之分

断言

断言assertion

格式: create assertion <断言名>

触发器

触发器即 事件->条件->动作

当对一个表中增删改时,对触发器里面的条件进行检查,如果成立就执行触发器里面的动作,否则不执行

格式:

create trigger <触发器名>    /*每当触发事件发生时,该触发器被激活*/

{before|after} <触发事件> on <表名> /*指明触发器激活时间是在执行触发器前或后*/

referencing {new|old} row as <变量>/*referencing 指出引用的变量*/

for each{row|statement} /*定义触发器的类型,指明动作体执行的频率*/

[where<触发条件>] <触发动作体>/*仅当触发条件为真时才会触发动作体*/

六、关系数据理论

依赖

  • 非平凡的函数依赖

    X->Y,但Y不属于X,则称X->Y是一个非平凡的函数依赖

  • 平凡的函数依赖

    X->Y,且Y属于X,X->Y是一个平凡的函数依赖

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

数据库系统概论学习笔记_第14张图片

传递函数依赖

数据库系统概论学习笔记_第15张图片

候选码

选候选码

  1. 只出现在左边的一定是候选码(包括未出现的)
  2. 只出现在右边的一定不是候选码
  3. 左右都出现的不一定
  4. 左右都不出现的一定是候选码
  5. 再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码;否则,要把每一个可能的值放进当前确定的候选码中进行求闭包。

(1)L类:仅仅出现在F中的函数依赖左部的属性

(2) R类:仅仅出现在F中的函数依赖右部的属性

(3) N类:不出现在F中的函数中的属性

(4) LR类:出现在F中的函数依赖左部又出现在右部的属性

结论:
(1) 若X是L类属性:则X必然属于任一候选键的成员
(5) 若X是L类属性:且X包含了R的所有属性,则X必然属于唯一候选键
(2) 若X是R类属性:则X不属于任何候选键
(3) 若X是N类属性:则X必然属于任一候选键的成员
(4) 若X是LR类属性:且X包含了R的所有属性,则X必然属于唯一候选键

案例

数据库系统概论学习笔记_第16张图片

数据库系统概论学习笔记_第17张图片
  • 超码:包含候选码的集合,也就是能够表示出所有属性的集合,候选码是最小的超码
  • 主码:候选码中的任意一个都是主码
  • 主属性:包含所有候选码的属性
  • 非主属性:除去所有候选码的属性
  • 全码:所有属性都是主码

三大范式

范式是符合某一种级别 的关系模式的集合

关系数据库中的关系必须满足一定的要求 。满足不同程度要求的为不同范式

范式的种类

第一范式(1NF)

第二范式(2NF)

第三范式(3NF)

BC范式(BCNF)

第四范式(4NF)

第五范式(5NF)

只需知道BC范式以上即可

1NF

所有字段值都是不可再分的原子值

如地址和省份城市详细地址的关系

第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库

2NF

一个表只能包含一种数据,不可以把多种数据保存在同一张表中,即每一个非主属性完全函数依赖 于码

3NF

确保数据表中的每一列数据都和主键直接相关,而不能间接相关

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立联系,而不可以在订单表中添加客户的其他信息

BCNF

消除每一属性对候选码的传递依赖,BCNF是修正的第三范式

最小依赖集

  1. 拆右边为多个元素 如A->BC 拆为A->B A->C
  2. 除去当前左边元素,求它的闭包,依次求完
  3. 左边最小化,如BCD,遮住B看CD能推出B吗,如果能就把B去掉

解题过程

数据库系统概论学习笔记_第18张图片

模式分解

准则: 无损连接 和 保持函数依赖

无损: 就是分解后再次连接,和分解之前一样

依赖:依赖不变

例题部分

设关系模式为 R, U={A,B,C,D,E,P },
F={A→D,E→D,D→B,BC→D,DC→A }
(1)求(AD)+;
(2)求R的候选码,指出哪些属性是主属性,哪些是非主属性。
(3)判断是第几NF

数据库系统概论学习笔记_第19张图片

例题二

  1. 设有关系模式R,其中U={A,B,C,D,E},F={A→C, B→AC, D→AC, E→B},试求:
    (1)求出候选码;(3分)
    (2)判断关系R是第几NF。(3分)
数据库系统概论学习笔记_第20张图片

七、数据库设计

数据库设计的基本步骤

  1. 需求分析
  2. 概念结构设计 :ER图或者是设计数据字典
  3. 逻辑结构设计 :把ER图转为逻辑模型
  4. 物理结构设计 :把逻辑模型转为物理模型
  5. 数据库实施 :写SQL代码
  6. 数据库运行维护

ER图

  • 实体是长方形
  • 属性是椭圆形
  • 关系式菱形

ER图转关系模型

  • 1对1:要把关系合并到任意一个表,并且把另外的表里面的主键放到另外一个里面
  • 1对n:把1的主码放到n里面,然后把关系的属性放到n里面
  • m对n:需要两边的实体主键和自身的属性单独作为一个关系模式

例题部分

设在需求分析阶段,经初步分析,有如下实体及其属性:

学生:学号、学院、姓名、性别、年龄、选修课程名
课程:编号、课程名、开课学院、任课教师号
教师:教师号、姓名、性别、职称、讲授课程编号
学院:学院名称、电话、教师号、教师名
调研后确定系统中存在如下联系:
(1)一个学生可选修多门课程,一门课程可为多个学生选修;
(2)一个教师可讲授多门课程,一门课程可为多个教师讲授;
(3)一个学院可有多个教师,一个教师只能属于一个学院。
试完成如下设计:
(1)设计包括各实体及其联系的全局E-R图(为避免E-R图图形复杂,可省去实体属性,注意:需求分析的实体属性仅为初步分析,存在重复和多余属性) (12分)
(2)将该全局E-R图转换为等价的关系模型表示的数据库逻辑结构。(6分)

解答

数据库系统概论学习笔记_第21张图片

(2) 关系模式
学院(学院名,电话)
教师(教师号,姓名,性别,职称,学院名)
课程(课程编号,课程名,学院名)
学生(学号,姓名,性别,年龄,学院名)
讲授(教师号,课程编号)
选修(学号,课程编号)

例题二

销售部门管理系统数据库设计:(共15分)
假定一个部门的数据库包括以下信息:
a. 职工的信息:职工号、姓名、地址。
b. 部门的信息:部门号、部门名、经理。
c. 产品的信息:产品名、产品内部编号。
d. 制造商的信息:制造商名称、地址。
需求分析:一个部门有多个职工,每个职工只属于一个部门; 每种产品可以由不同部门销售,一个部门可以销售多种产品;每种产品可以由不同制造商生产,每个制造商可以生产多种产品,每个制造商生产的每种产品对应不同价格。
要求:(1)根据上述语义画出E-R图;(9分)
(2)将E-R图转换成对应的关系模式并标注每个关系的主码。(6分)

解答

数据库系统概论学习笔记_第22张图片

关系模式:
职工(职工号,姓名,地址,所在部门) -----1分
部门(部门号,部门名称、经理) -----1分
产品(产品内部编号,产品名称) -----1分
制造商(制造商名称,地址) -----1分
销售(部门号,产品内部编号) -----1分
生产(制造商名称,产品内部编号,价格) -----1分

例题三

数据库系统概论学习笔记_第23张图片

九、关系查询处理和查询优化

查询过程

数据库系统概论学习笔记_第24张图片

优化原则

  1. 选择运算尽量先做
  2. 把投影和连接同时执行
  3. 把投影同它前后的双目运算符连接起来

案例

数据库系统概论学习笔记_第25张图片

优化后:

数据库系统概论学习笔记_第26张图片

十、数据库恢复技术

事务

定义

  • 一个数据库操作序列(顺序的SQL语句集合)
  • 一个不可分割的工作单位
  • 恢复和并发控制的基本单位

事务的ACID特性

  • 原子性(Atomicity) 逻辑工作单位
  • 一致性(Consistency)执行结果的一致性
  • 隔离性(Isolation) 事务之间不能互相干扰
  • 持续性(Durability )改变是永久的

恢复策略

{% folding,恢复策略 %}

事务故障的恢复:事务异常终止,那么撤销之前所有的操作

系统故障的恢复:还没执行完的事务UNDO,丢失的事务REDO

介质故障的恢复:重装数据库,重做已经做完的事务

数据库系统概论学习笔记_第27张图片

十一、并发控制

并发带来的问题

1、丢失修改:修改的东西没生效

2、读脏数据:数据正在更新时被读取,数据就是脏数据

3、不可重复读:在一个事务中两次读取数据不一致

解决办法

  1. 排它锁(Exclusive Locks),也叫写锁,X锁
  2. 共享锁(Share Locks),也叫读锁,S锁

封锁协议

一级封锁协议
修改时必须加X锁,直到结束

解决丢失修改问题

二级封锁协议
读的时候,加S锁,用完就放

解决读脏数据问题

三级封锁协议
读的时候,加S锁,知道结束

解决不可重复读问题

数据库系统概论学习笔记_第28张图片

你可能感兴趣的:(学习笔记,学习,知识图谱,数据库)