《数据库系统概论》笔记整理(一)

一)数据库

1. 定义

数据库是按照数据结构来组织、存储和管理数据的仓库

2. 分类

  • 关系型数据库:Oracle、DB2、MySQL等

  • 非关系型数据库:MongoDB、Memecached、Redis等

区别:
	关系:安全,浪费空间:磁盘存储
	非关系:效率高,不是特别安全(内存存储容易丢失)

3. 数据模型

数据模型是数据特征的抽象

  • 概念模型:按用户观点对数据和信息建模
  • 逻辑模型和物理模型
    • 逻辑模型:层次模型,网状模型,关系模型等
    • 物理模型:数据在系统内部(如磁盘)的表现方式和存取方法
数据模型组成要素:数据结构,数据操作,数据完整性约束

概念模型:实体,属性,码,实体型,实体集,联系
关系模型:关系,元组,属性,码,域,分量,关系模式
	数据操作:增删改查
	完整性约束:实体完整性,参照完整性,用户定义完整性
	(关系 == 二尾表)

4. 三级结构和二级映像

  • 外模式:数据库用户能看见和使用的局部数据的逻辑结构和特征的描述

    外模式:模式的子模式
    
  • 模式:数据库全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图

  • 内模式:数据物理结构和存储方式的描述

二)关系型数据库

1. 定义

关系型数据库,是一种建立在关系模型上的数据库

关系模型:建立在关系(一张二维表)上的模型

2. 组成要素

数据结构

数据操作

完整性约束

  1. 实体完整性:主键(关系的主属性,不能取空值)
  2. 参照完整性:外码(空值,或所引用关系元素的主码值)
  3. 用户定义完整性

3. SQL

关系数据库的三级结构

外模式:局部数据的逻辑结构和视图
模式:全局数据
内模式:物理结构和存储方式

外模式==视图+部分基本表
模式==若干基本表
内模式==存储文件

一或多个表,对应一个存储文件
一个表有若干索引

数据定义语言

  • 对象:模式,表,视图,索引

create

drop

alter

数据更新语言

insert

update

delete

数据查询语言

select

数据查询:
	指定列:单表查询,多表查询
	去重:distinct
	条件:where(比较,范围,集合,字符匹配,空值,多重条件)
	排序:order by
	分组:group by having
	聚集函数:count、sum、avg、max、min
	
	连接查询:等值连接,非等值连接
		自身连接
		外连接:左外,右外,全
	嵌套查询:any,all谓词/聚集函数和in等
		exists
	集合查询:union,intersect,except

数据控制语言

grant

revoke

4. 数据类型

显示宽度:用于显示,长度不够前缀填充0

  • 数值:
    • 整数:1,2,3,4,8字节
    • 小数:浮点,定点
  • 字符串:char,varchar,text,blob,enum,set
  • 日期时间:日期时间,日期,时间,时间戳,年份

5. 完整性详解

实体完整性

主键定义

参照完整性

外键定义

用户定义完整性

  • 属性约束:空与非空,唯一,check

    name varchar(12) not null
    card_id char(18) unique not null
    sex char(2) check (sex in('男', '女'))
    score int check (score>=0 and score<=100)
    
  • 元组:check

    # 男性不能以Ms开头
    check (sex='女' or name not like 'Ms%')
    
  • 完整性约束命名语句:constraint <完整性约束条件名> <完整性约束条件>

    条件:not null,unique,primary key,foreign key,check等
    

6. 触发器

  • 定义:事件,条件,动作

    事件:增删改,事务的结束等
    条件真,触发动作
    
    create trigger <触发器名>
    before|after insert|delete|update [of <属性>] on <表>
    referencing #引用变量
    	oldrow as <别名>,
    	newrow as <别名>
    for each row
    [when <条件>] <动作>
    
    
    说明:若没有`for each row`,可引用变量为:oldtable,newtable
    
  • 激活

  • 删除

7. 关系数据库理论

P第6章 《数据库系统概论》

基本名词:平凡函数依赖,非平凡函数依赖,决定因素,完全函数依赖,部分函数依赖,传递函数依赖
		(完全:X→Y,但X的真子集不能决定Y
		(部分:X→Y,但X的真子集→Y

		码,候选码,超码,主属性,非主属性|非码属性
		外码

数据依赖

  • 函数依赖:例如学号决定学生信息(姓名,专业…),即y=f(x),x→y

    常见问题:数据冗余,更新异常,插入异常,删除异常
    
  • 多值依赖

范式

1NF:关系的每一个变量必须是不可分的数据项
	表的列,不可分
2NF:每一个非主属性完全函数依赖于任何一个候选码
3NF:每一个非主属性不传递依赖、不部分依赖于码
BCNF:??
	排除传递和部分函数依赖
## 多值依赖:??
4NF:??

8. 数据库编程

  • 过程化SQL:块

  • 存储过程和函数

  • 过程化SQL的游标

三)并发控制

1. 事务

事务(一批操作),要么全成功,要么全失败。

特性

ACID

并发事务问题

  • 脏读
  • 不可重复读
  • 幻读

事务隔离级别

  • 读未提交
  • 读已提交
  • 可重复读
  • 串行化

并发事务解决方案

  • MVCC

事务故障

  1. 事务故障
  2. 系统故障:
  3. 介质故障
  4. 计算机病毒

数据恢复

  1. 数据冗余

    数据转储:数据库复制到存储介质
    登记日志文件
    
  2. 数据恢复

2. 并发控制

并发操作带来的数据不一致性包括:丢失修改不可重复读读脏数据

  • 原因:破坏事务隔离性
  • 解决:封锁,时间戳,乐观控制,多版本并发控制MVCC等

封锁

X(排他|独享)锁和S(共享)锁

一级封锁协议:事务修改数据前,加X锁,事务结束后才解锁
	解决:丢失修改。不解决:不可重复读,读脏数据
二级封锁协议:一级封锁协议+事务读数据前,加S锁,读完后解锁
	解决:丢失修改,读脏数据。不解决:不可重复读
三级封锁协议:一级封锁协议+事务读数据前,加S锁,事务结束后才解锁
	解决:丢失修改,读脏数据,不可重复读
	
其他问题:活锁,死锁
	活锁:某个事务一直处于等待
		解决:先来先服务
	死锁:多个事务一直不能结束
		解决:预防;诊断——处理

并发调度的可串行性

可串行化调度:多个事务的并发执行结果 == 按某一次序串行执行这些事务的结果

可串行性:并发调度,当且仅当它是串行化,认为是正确调度

两段锁协议:保证并发调度的正确性,从而保证多个事务执行结果的正确
	所有事务必须分两个阶段对数据项加锁和解锁
	1. 在对任何数据进行读写之前,首先要申请并获得该数据的封锁
	2. 在释放一个封锁之后,事务不可再申请和获取任何其他封锁

封锁的粒度

封锁对象的大小,封锁粒度

  • 逻辑单元:属性值,属性值集合,元组,关系,索引项,索引,数据库
  • 物理单元:页,物理记录等
多粒度封锁
显示封锁:应事务要求直接加到数据对象上的锁
隐式封锁:上级节点加锁

加锁前,检查数据对象的显示封锁,上级节点——隐式封锁,下级节点显示封锁
	效率过低!!

引入意向锁:避免检查下级节点的显示封锁
	IS:父IS,子S
	IX:父IX,子X
	SIX:加S锁,再加IX锁
		读整个表,加S锁
		更新元组,子X,则父IX,即加IX锁

3. 多版本并发控制

理解不够,暂略

参考

《数据库系统概论 第5版》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章