数据库基础知识

title: 数据库系统概论
tags: 数据库
date: 2022-06-28 20:02:16
category: 数据库学习

第一章 绪论

1、数据的独立性

  • 物理独立性:用户程序和数据库中的数据的物理存储是相互独立的。
  • 逻辑独立性:用户程序和数据库的逻辑结果是相互独立的。
  • 保证:二级映像功能

2、数据模型

数据模型的作用:数据模型是数据库系统的基础,任何一个DBMS都是以某一个数据模型为基础。
数据模型的三个要素:数据结构、数据操作、数据完整性约束条件

3、数据库、数据库系统

数据库概念:数据库是长期储存在计算机中、有组织、可共享的大量数据的集合。
数据库系统概念:数据库系统是由数据库、数据库管理系统、应用程序、数据库管理员组成的存储、管理、处理和维护数据的系统。
数据库系统的特征:①数据结构化(和文件系统的本质区别);②数据独立性高;③数据的共享性高、易扩充、冗余度低;④由数据库管理系统统一管理。

4、数据库管理系统的主要功能:

  • 数据库定义功能
  • 数据组织、存储和管理功能
  • 数据操纵功能
  • 数据库的事务管理和运行管理
  • 数据库的建立和维护功能
  • 其他功能,如不同数据库之间的互访和互操作等功能。

第二章

1、关系数据库结构及其形式化定义

  • 关系:> 域(domain)、笛卡尔积(cartesian product:n元组,做笛卡尔积的每个集合中贡献一个数组成的集合;一个域允许的最大的不同取值的个数叫做基数)
    > n元关系(笛卡尔积的子集),属性,二元表格中的域,候选码->主码,主属性,非主属性/非码属性,全码
  • 关系的类型:基本关系(基本表/基表)、查询表、视图
  • 关系模式、关系(有一说一,这个不知道重点在哪里)

2、关系操作

  • 关系操作的特点、非关系操作的特点

3、关系的完整性(三类完整性约束条件)

  • 关系的两个不变性
  • 实体完整性:实体完整性规则+实体完整性(?不太明白例题讲了是干啥的)
  • 参照完整性:
    • 外码(foreign key)、参照关系(referencing relation)、被参照关系(referenced relation)/目标关系(target relation)
    • 关系R和S不一定是不同的关系(理解一下书上的例题)
    • 关系间引用属性->相互制约
  • 用户定义的完整性

4、关系代数

  • 传统的集合运算
    • 并(union):
    • 差(except)
    • 笛卡尔积
  • 专门的关系运算
    • 选择(select)
      不等于:<>
    • 投影(projection):对列的操作
    • 连接(join):等值连接(equal join) & 自然连接(natural join)(本质上是在自然连接基础上取消重复的列)
      悬浮元组、外连接(outer join:保留悬浮元组的值,空的地方置NULL)、左外连接(只保留左边关系的悬浮元组)、右外连接
    • 除运算(division):记住书上的例子吧~
  • 五种基本运算

5、关系的完整性

·专门的关系运算
> 选择:
> 投影:积分投影
> 连接:

非等值连接:
等值连接:
自然连接:自然连接是等值连接去掉相同的属性列后的结果

第三章 关系数据库标准语言SQL

1、注意事项

※对于表意不明确的地方,要加上表名
※多做几遍评测平台的题目
※写sql语句的注意事项
※对于同一个表查询的时候,记得起别名

2、数据定义:

alter table <表名>
[add [column] <新列名><数据类型>[完整性约束]]
[add<表级完整性约束>]
[drop [column]<列名>[cascade|restrict]]
[drop constraint<完整性约束条件>[restrict|cascade]]
[alter column<列名><数据类型>]

  • cascade:对表的删除没有约束条件
  • restraint:想要删除的基本表不能被其他表所引用

对表的约束(列级约束和表级约束)
列级约束有六种:主键Primary key、外键foreign key 、唯一 unique、检查 checck 、默认default 、非空/空值 not null/ null

表级约束有四种:主键、外键、唯一、检查

3、数据查询:

  • distinct:消除重复的行
  • between and;not between and: 确定范围
  • in; not in: 确定集合
  • like; not like: 字符匹配,a%b,以a开头,以b结尾,任意长度的字符串;a_b,以a开头,以b结尾,总长度为3的字符串
  • is null; is not null: 空值
  • and, or, not:逻辑运算
  • 聚集函数
  • group by:将查询结果按某一列或多列的值分组,值相等的为一组
  • 等值与非等值连接到查询
    • 等值连接
    • 自然连接
  • 自身连接:要新建别名
  • 外连接:悬浮元组、左外连接、右外连接
  • 多表连接:很多个表进行连接的时候,直接进行条件连接,不写嵌套查询

嵌套查询:
子查询不能使用order by语句,order by只能对最终结果进行排序
对于查询结果是集合的情况,使用谓词in
不相关子查询
相关子查询:父查询定义的别名,子查询会用到

  • any(some);all
  • exists
  • 集合查询:union,intersect,except

数据更新
插入数据:如果是数字的话,不要加引号!!!
修改数据:update student set sage = 22 where sno = '0501029'
删除数据:delete from student where sno = '0501029'

空值的处理
向表中插入空值,直接插入NULL,不加引号,像数字一样
空值的判断:is null; is not null

4、视图

  • 行列子集视图
  • 视图的作用
  • 视图相关sql语句

视图:命名化的select语句
视图的定义存储下来

--存在系统数据字典中
create view v_student () as + 子查询
select student.sno,sname,cno,grade
from Sdtudent, Sc
where student.sno = sc.sno and cno = '2'

select * from v_student
子查询结果会作为视图结果

select * from
视图作用:简化了用户书写SQL的复杂度
保证了数据的安全性
一定程度上保证数据的逻辑独立性
----视图(连接查询、聚集函数)
--行列子集视图(来源于单表,视图中包含主键,只是去掉了不重要的属性列,并且去掉的属性列都可以取值为空)

--with check option
---视图中,尽量不要带*号

create view v_stu(sno,sname)
as
select sno, sname
from Student
where sdept = '计算机'

drop view 删除视图

第四章 数据库安全性

1、本章基于重点复习

  • 自主存取权限控制
  • grant
  • revoke
  • 角色
  • 完成权限的授权并传递出去

2、存取控制

  • 存取控制
    • 数据库管理系统的存取控制子系统:定义用户权限+合法权限检查机制
    • 自主存取控制(DAC)
    • 强制存取控制(MAC)
  • 自主存取控制方法
    • 用户权限:数据库对象、操作权限
    • 定义存取权限=授权
  • 授权:授予与收回
    • grant:grant <权限> on <对象类型><对象名> to <用户> [with grant option];//不一定是只有一个权限,一个对象
      with grant option: 被授权用户可以把权限授予其他用户,不能授予祖先用户
    • revoke:revoke <权限> on <数据对象> from <用户> [cascade|restrict];
    • revoke update(sno) on table student from userx;
  • 数据库角色
    • 角色是权限的集合
    • 创建角色:create role <角色名>
    • 给角色授权:grant <权限>

第五章 数据库完整性

1、定义外键:

foreign key(属性) references student(属性)

2、触发器

0AZF_~YZZY3O6)_F9G2BW{N

第六章 关系数据理论

1、问题的提出

  • 关系模式可能存在的问题:数据冗余、更新异常、插入异常、删除异常

2、规范化

  • 函数依赖:函数依赖定义、非平凡函数依赖、决定属性组/决定因素、完全函数依赖、传递函数依赖
  • 码:候选码、超码、(候选码的任何真子集不一定是超码)、主码、主属性、非主属性/非码属性、全码、外部码/外码
  • 码:是码,就得能找出来一对一关系

范式
规范化
2NF:①每一个非主属性完全依赖于任何一个候选码。②存在问题:插入异常、删除异常、修改复杂
3NF:①不存在传递函数依赖。②画有向图,根据图去判断是不是
BCNF:①Y非平凡函数依赖X,X有主码。
多值依赖:①多值依赖的性质;②多值依赖与函数依赖的区别
和BCNF类似,把函数依赖改成多值依赖即可
P189:规范化过程

3、函数依赖的公理系统

第七章 数据库设计

1、数据库设计概述

需求分析 -> 概念结构设计 -> 逻辑结构设计 -> 物理结构设计 -> 数据库实施 -> 数据库运行和维护

2、需求分析

数据字典:
数据项(最小单位)
数据结构(数据间组合关系)
数据流(数据结构在系统内的传输路径)
数据存储(数据结构停留或保存的地方)
处理过程

3、概念结构设计

  • E-R模型
  • 实体之间的联系:两个实体型之间的联系:1:1 / 1:n / n:m ; 两个以上实体间的联系:同两个
  • 参与联系的实体型的数目成为联系的度。N元联系
    -E-R图
    • 实体型 -> 矩形; 属性 -> 椭圆; 联系 -> 菱形(标注1:1, 1:n, n: m)
    • (多理解一下课本上的例子)

4、逻辑结构设计

  • E-R图向关系模型的转换

第九章 关系查询处理和查询优化

1、关系数据库系统的查询处理

  • 查询处理步骤
    查询分析(语法)->查询检查(语义,视图,权限,完整性约束->关系代数表达式)->查询优化(代数优化、物理优化)->查询执行

  • 视图消解法:把对视图的操作转换为对基本表的操作,由DBMS完成

2、实现查询示例的算法示例

  • 选择操作的实现

    • 简单的全表扫描算法(table scan):读+判断,不适用选择率低的情况
    • 索引扫描算法(index scan)
  • 连接操作的实现

    • 嵌套循环算法(nested loop join):俩for循环
    • 排序-合并算法(sort-merge join/merge join):双指针
    • 索引连接算法(index join)
    • hash join算法(?)
  • 实例分析:
    eg:求选修了2号课程的学生的姓名。假定数据库中,有1000个学生记录,10000个选课记录,其中选修2号课程的选课记录为50个。

    • 先计算笛卡尔积:先算读入需要多少块,然后加上连接需要多少块,最后加上选择需要多少块。
    • 先做自然连接
    • 先选择
  • 当选择和连接同时存在时,先做选择操作。

3、代数优化(具体做的时候理解一下)

  • 关系代数表达式等价变换原则
    • 连接、笛卡尔积的交换律
    • 连接、笛卡尔积的结合律
    • 投影的串接定律
    • 选择的串接定律
    • 选择与投影操作的交换律
    • 选择与笛卡尔积的交换律
    • 选择与并的分配律
    • 选择与差运算的分配律
    • 选择对自然连接的分配律
    • 投影与笛卡尔积的分配律
    • 投影与并的分配律
  • 查询树的启发式优化
    • 典型的启发式规则:①先选择;②同时投影和选择;③把投影和其前后的双目运算所结合;④连接运算比笛卡尔积快;⑤找公共子表达式(具体含义没看懂)

第十章 数据库恢复技术

1、事务

2、事务语句

begin transaction:
commit:
rollback:

3、事务的ACID特性

Atomicity, Consistency, Isolation, Durability

4、事务故障:数据库被破坏,事务未完成

  • 事务内部故障:可预期; 不可预期
  • 系统故障(软故障):回滚、redo
  • 介质故障
  • 计算机病毒
  • 故障对数据库影响的两种可能
    借助冗余来实现恢复

5、恢复的实现技术

  • 数据转储(基本技术)
    后备副本/后援副本
    静态转储; 动态转储(日志文件)
    海量转储; 增量转储
  • 登记日志文件(记录更新操作)
    以记录为单位的日志文件
    • 内容:事务标识,操作类型,操作对象,更新前的旧值,更新后的新值
      以数据为单位的日志文件
      日志文件作用
      登记日志文件原则: 时间顺序; 先日志后数据库

6、恢复策略

  • 事务故障恢复: 反向扫描日志,找更新操作 -> 逆操作 -> 直到开始
  • 系统故障恢复: 正向扫描日志文件,+redo_list & + undo_list -> undo队列undo -> redo队列redo
  • 介质故障的恢复: 重装数据库(对动态转储而言,还要加上日志文件),重做已完成的事务

7、具有检查点的数据恢复技术

  • 检查点记录的内容:建立检查点时刻所有正在执行的事务清单,这些事务最近的日志记录的地址
  • 步骤:写日志 -> 在日志中写检查点 -> 数据缓冲区数据写入磁盘 -> 把检查点记录的地址写入一个重新开始文件

第十一章 并发控制

  • 并发控制的原因:①提高吞吐量和资源利用效率;②减少等待时间

1、三种数据不一致性

  • 丢失修改(lost update)(写写)
  • 不可重复读(non-repeatable read)(读写), 三种情况,增删改
  • 读“脏”数据(dirty read)(写读撤)
    破坏了事务的隔离性

    并发控制的主要技术: 封锁(locking), 时间戳(timestamp), 乐观控制法(optimistic scheduler) 多版本并发控制(multi-version concurrency control, MVCC) 等.

基于时间戳的并发控制:
时间戳:当一个事务启动的时候,给这个事务一个时间戳。按照时间戳从小到大执行的操作是正确的,反之是不正确的,借助时间戳就不需要借助锁。如果存在冲突,就撤销该事务,并重启该事务,然后给该事务分配一个更靠后的时间戳。
冲突:读写,写写,写读
判断处理
学习博客
乐观控制法

2、封锁

排他锁、共享锁

3、封锁协议

  • 一级封锁协议:无法解决不可重复读和读“脏”数据
  • 二级封锁协议:以一级封锁协议为基础,读完释放
  • 三级封锁协议:以一级封锁协议为基础,事务结束释放
    重点理解一下二级封锁协议和三级封锁协议之间的联系与区别

4、活锁和死锁

  • 活锁:一直在等待,解决方法:先来先服务
  • 死锁:出现环
  • 死锁的预防
    • 一次封锁法:某个事务所要用到的全部数据加锁
    • 顺序封锁法
  • 死锁的诊断与解除
    • 超时法
    • 等待图法(T1等待T2,T1指向T2),方法是选择一个处理死锁代价最小的事务

5、并发调度的可串行化

  • 可串行化调度
  • 可串行性
  • 冲突可串行化调度 Ri(x)与Wj(x) & Wi(x)与Wj(x)

    不同事务的冲突操作和同一事务的两个操作是不可交换的
    冲突可串行化调度
    冲突可串行化调度是可串行化调度的充分条件
    (?):注意理解可串行化调度,感觉有点晕

6、两段锁协议(2PL协议)

  • 加锁 + 解锁
  • 事务遵循两段锁协议是可串行化调度的充分条件,不是必要条件。
  • 一次封锁法与两段锁协议(可能发生死锁)

7、封锁的粒度

  • 封锁粒度
  • 封锁粒度选择原则
  • 意向锁
  • IS锁, IX锁, SIX锁
posted @ 2024-02-21 17:02  风归去  阅读(29)  评论(0编辑  收藏  举报