数据库系统概论笔记

数据库系统概论

1、绪论

1.1 概论

  1. 数据库系统(Data Base System ,简称 DBS ) :数据库系统是指在计算机系统中 引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、 数据库管理员构成。
  2. 数据库(Data Base ,简称 DB ):数据库是长期储存在计算机内的、有组织的、可共享的数据集合。
  3. 数据库管理系统(DataBase Management System,简称 DBMS ) :数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。
    其主要功能有 数据定义功能 、 数据操纵功能 、数据库的运行管理和数据库的建立以及维护等4个方面。

1.1.1 数据库

概括地讲,数据库数据具有永久存储、有组织和可共享的三个基本特点。

1.1.2 发展

  1. 人工管理阶段
  2. 文件系统阶段
  3. 数据库管理系统

数据库系统特点:数据结构化,共享性高、冗余度低且易扩充,数据独立性高

数据独⽴性⾼:

  • 物理独⽴性:是指⽤户的应⽤程序与数据库中数据的物理存储是相互独⽴的。
  • 逻辑独⽴性:是指⽤户的应⽤程序与数据库的逻辑结构是相互独⽴的。

1.2 模型

2.1.1 两类数据模型:

  • 概念模型(实体、属性、码、域、实体型、实体集)
  • 逻辑模型(层次模型、网状模型、关系模型)和 物理模型(最底层的抽象)

数据模型是由①数据结构 ②数据操作 ③完整性约束三部分组成的。

目前数据库领域中最常用的逻辑数据模型有 层次模型、网状模型、关系模型 等。

2.2.2实体联系图(E— R 图)

  • 实体型:用矩形表示
  • 属性:用椭圆形表示
  • 联系:用菱形表示(1:1 或 1:n 或 m:n)。

1.3 数据库体系结构

1.3.1 三层模式结构

外模式:亦称子模式用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻 辑表示。

模式:亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。

内模式:亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。

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

1.3.2 二级映像

数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。

外模式/模式映像:

  • 当模式改变时,由数据库管理员对各个外模式/模式映像作相应改变,
  • 可以使外模式保持不变。
  • 应⽤程序不必修改。保证了数据与程序的逻辑独⽴性

模式/内模式映像:

  • 当数据库的存储结构改变时,有数据库管理员对模式/内模式作相应改变,
  • 可以使模式保持不变
  • 从⽽应⽤程序也不⽤改变。保证了数据与程序的物理独⽴性

这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。

2、关系数据库

2.1 关系模式

关系可以有三种类型:基本关系、查询表、视图表

可以形象地表示为
R(U, D, DOM, F)
R:关系名
U:所有属性名
D:属性来自嘟些域
DOM:属性和域的映射
F:属性间的依赖关系

2.2 分类

关系代数语言(重点重点)、关系演算语言(不重要)、SQL语言(后面重点讲)

2.3 关系的完整性

  1. 实体完整性规则(主码唯一且非空):若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值(主码唯一且非空)
  2. 参照完整性规则(外码要么为空,要么对应另一表的主码):**若属性(或属性组)F 是基本关系 R 的外码它与基本关系 S 的主码 Ks 相对 应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中每个元组在 F 上的值必须为:
  • 或者取空值(F 的每个属性值均为空值)

  • 或者等于 S 中某个元组的主码值

  1. **用户定义的完整性(语义约束):**针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求

2.4 关系操作

插入、查询、删除、修改
其中查询操作分为:选择、投影、连接、除法、并、差、交、笛卡尔积
查询操作的基本操作:选择、投影、并、差、笛卡尔积

自然连接是一种特殊的等值连接,不等同等值连接。

2.5关系代数

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

3、关系数据库标准语言SQL

4、数据库安全性

4.1不安全因素

  1. ⾮授权对数据库的恶意存取和破坏
  2. 数据库中重要的数据泄露
  3. 安全环境的脆弱性

4.2 安全性控制

  1. ⽤户身份鉴别

    • 静态⼝令鉴别 、动态⼝令鉴别 、⽣物特征鉴别 、智能卡鉴别
  2. 存取控制

  3. ⾃主存取控制⽅法(重点)

    • 主要通过grant revoke来进⾏控制

    • Reference权限代表是否允许创建外键

    • ⾃主存取控制⽅法 :

      grant <权限> on table <表名> to <⽤户>
      revoke <权限> on table <表名> from <⽤户>
    

4.2.1⾃主存取控制⽅法

授权 Grant

 Grant <权限> on <数据对象> <对象名> to ⽤户 With grant option
 # With grant option⼦句,则普通⽤户获权后,可把⾃⼰的权限授予其他⽤户。
 # 例:
 GRANT ALL PRIVILEGES	# 全部操作权限
 ON TABLE Student
 TO User1;

回收权限 revoke

REVOKE <权限> ON <数据对象> <对象名> FROM <⽤户名> <CASCADE| RESTRICT>
# CASCADE是(级联) 删除模式的同时也把该模式的所有数据库对象删除. 
# RESTRICT(限制) 如果该模式下有下属对象,⽐如表视图 就拒绝这个删除语句的执⾏
# 例:
REVOKE SELECT 
ON TABLE Student 
FROM User1 CASCADE; 

4.2.2角色

# 例:
create role R1;	# 创建一个角色
grant select,update,insert
on table Student
to R1;		# 授权给角色R1
grant R1
R2,R3;		# 将角色授予R2,R3
revoke R1
from R2;	# 通过R1收回R2的所有权限
  1. 创建
create role <⻆⾊名>
  1. 授权
grant <权限> on <对象类型> <对象名> to <⻆⾊1>,<⻆⾊2>
  1. 把⻆⾊授权个其他⽤户或者⻆⾊
grant <R⻆⾊> to ⻆⾊或者⽤户名字 [with admin option]
# 如果加上with admin option ,意味着, 这个⽤户还可以吧这权限授予给其他⻆⾊或者⽤户
  1. ⻆⾊权限的收回
revoke <权限> on <对象类型><对象名> from ⻆⾊名字

4.3 视图机制

为不同的⽤户定义不同的视图,把不需要的数据给隐藏起来,这样⽤户就不会进⾏误操作

4.4 审计

把对数据库的所有操作都记录到审计⽇志中,然后就可以通过⽇志审查这个⾥⾯是否有⼀些⾮法的⾏为。审计系统提供了一种事后的安全机制

# 对修改SC数据的操作进⾏审计 
audit update 
on SC 
# 取消对SC表的⼀切审计 
noaudit update 
on SC;

4.5 数据加密

通过⼀些加密算法,把明⽂变成密⽂,这样别⼈就⽆法查看

5、数据库的完整性

5.1 正确性

符合现实世界的描述

5.2 相容性

同⼀对象在不同表⾥⾯是符合逻辑的属性都应⼀致

5.3 维护完整性

  1. 提供定义完整性约束条件的机制
  2. 提供完整性检查的⽅法
  3. 进⾏违约处理

5.4 三⼤完整性:

  1. 实体完整性 : 主码(primary key)唯⼀,且⾮空
  2. 参照完整性 : 外码(foreign key)的要么没有,要么对应另⼀表的主码(references指明主码)
  3. ⽤户定义完整性:
    1. ⾮空 (not null
    2. 列值唯⼀ (unique
    3. 检查是否满足某一个条件表达式(check短语)
CREATE TABLE SC     
(Sno CHAR(9)  NOT NULL,            
Cno  CHAR(4)  NOT NULL,              
Grade  SMALLINT,      
PRIMARY KEY (Sno, Cno),check(Grade>=0 and Grade<=100),
FOREIGN KEY (Sno) REFERENCES Student(Sno),   
  • 完整性约束命名子句:CONSTRAINT <完整性约束条件名><完整性约束条件>

5.5 断⾔

任何使断言不为真值的操作都会被拒绝执行

create assertion <断⾔名> <check⼦句> 
# 其中check字句 与where⼦句的表达式类似
# 删除断⾔名称: 
drop assertion 断⾔名字;

5.6 触发器

触发器也叫做 事件->条件->动作 规则.

当对⼀个表增 删 改时候, 对触发器⾥⾯的条件进⾏检查。如果成⽴,就执⾏触发器⾥⾯的动作.否则不执⾏⾥⾯的动作.

CREATE TRIGGER<触发器名> # 每当触发事件发生时,该触发器被激活
(BEFORE| AFTER)<触发事件>ON<表名 # 产指明触发器激活的时间是在执行触发事件前或后
REFERENCING NEW |OLD ROW AS<变量># REFERENCING指出引用的变量
FOR EACH (ROW | STATEMENT) #产定义触发器的类型,指明动作体执行的频率
[WHEN<触发条件>]<触发动作体> # 仅当触发条件为真时才执行触发动作体

# 删除触发器: 
drop trigger <触发器名> on <表名>

6、关系数据理论

6.1 范式

6.1.1为什么引⼊范式?

1数据冗余 2更新异常 3插⼊异常 4删除异常

6.1.2 范式分类

⽬前关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、 巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,⼜称完美范式)。

6.2.函数依赖

定义:设 R(U)是一个属性集 U 上的关系模式,X 和 Y 是 U 的子集。若对于 R(U)的任意一个可能的关系 r,r 中不可能存在两个元组在 X 上的属性值相等, 而在 Y 上的属性值不等,则称 “X 函数确定 Y” 或 “Y 函数依赖于 X”,记作 X→Y。即只要 X 上的属性值相等,Y 上的值一定相等。

  1. 平凡的函数依赖:如果 X→Y,但 Y 包含于 X,则称 X→Y 是平凡的函数依赖

  2. 非平凡的函数依赖:若 X→Y,但 Y 不包含于X,则称 X→Y 是非平凡的函数依赖

  3. 部分函数依赖:若 X→Y,但 Y 不完全依赖于 X,则称 Y 对 X 部分函数依赖。记作在这里插入图片描述

  4. 完全函数依赖:在 R(U)中,如果 X→Y,并且对于 X 的任何一个真子集 X’,都有 X’ 推不出(\→)Y, 则 称 Y 对 X 完全函数依赖。记作在这里插入图片描述

  5. 传递函数依赖:在 R(U)中,如果 X→Y,(Y不属于X) ,Y 推不出X, Y→Z,Z 不属于 Y, 则称 Z 对 X传递函数依赖。

6.3 候选码

  • 候选码:某一属性组的值能唯一地标识一个元组,而其子集不能。(可以推出所有属性 )
  • 主码:从候选码中选择一个。
  • 主属性:包含在任何一个候选码中的属性。
  • 非主属性:不包含在任何码中的属性。

6.4 三⼤范式

  1. 1NF :所有字段值都是不可分解的原⼦值
  2. 2NF :不包含⾮主属性对码的部分函数依赖,⼀个表中只能保存⼀种数据,不可以把多种数据保存在同⼀张数据库表中
  3. 3NF :不包含⾮主属性对码的传递函数依赖,确保数据表中的每⼀列数据都和主键直接相关,⽽不能间接相关
  4. BCNF :消除每⼀属性对候选键的传递依赖 ,BCNF是修正的第三范式

6.5 Armstrong公理系统

  • 自反率:若Y是X的一部分(子集),则X→Y
  • 增广率:如果X→Y,则XZ→YZ(X∪Z→Y∪Z)
  • 传递率:如果X→Y,Y→Z,则X→Z

推理得:

  • 合并规则:若X→Y,X→Z,则X→YZ
  • 伪传递规则:若X→Y,WY→Z,则XW→Z
  • 分解性规则:若X→Y,Z是Y的一部分(子集),则X→Z

6.6 最⼩函数的依赖集

如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
(1)F中任一函数依赖右部仅含有一个属性。
(2)F中不存在这样的函数依赖 X→A,使得F与F-{X→A} 等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}⋃{Z→A} 与F等价。

如何求最⼩依赖集?
((1)拆右边为多个元素的 ⽐如A->BC 拆为 A->B 和A->C
(2)出去当前元素,求它的闭包(看是否能推出e),把集合⾥⾯所有元素都弄完
(3)左边最⼩化(通过遮住元素来看能不能退出其他元素)
⽐如BCD,遮住B看能退出CD吗 , 遮住C能退出BD吗 遮住D看能退出BC吗 )

6.7 模式分解

把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解。

关系模式的分解必须遵守以下两个准则。
(1)无损连接性:信息不失真(不增减信息)。
(2)函数依赖保持性:不破坏属性间存在的依赖关系。

7、数据库设计

7.1 基本步骤

  1. 需求分析
  2. 概念结构设计: ER图或者是设计数据字典
  3. 逻辑结构设计: 把ER图转为逻辑模型
  4. 物理结构设计 :把逻辑模型转为物理模型 (例:为关系模型选择存储方法,常用:索引方法、聚簇方法 )
  5. 数据库实施 :写SQL代码
  6. 数据库运⾏维护 :性能检测

7.2 E-R图

实体是⻓⽅形体现, ⽽属性则是椭圆形, 关系为菱形

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

8、数据库编程

8.1 SQL与主语⾔的通信

  1. SQL给主语⾔传递状态
  2. 主语⾔给SQL提供参数
  3. SQL把查询结果交给主语⾔处理(游标,和主变量实现)

游标:系统开设的缓冲区,存放执行结果.

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

9.1 查询过程

查询分析 、查询检查、 查询优化 (查询优化包括: 代数优化,物理优化.)、 查询执⾏

代数优化——优化树:

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

10、数据恢复技术

10.1 事务

事务的开始和结束是由用户显示控制的。在SQL中,定义事务有3条语句:

BEGIN TRANSACTION # 开始
COMMIT	# 提交 结束
ROLLBACK	# 回滚 结束

事务的四⼤特性:

  • A:原⼦性 atomicity:要么全做,要么全不做
  • C:⼀致性 consistent:⼀致性与原⼦性密切相关,要么全做要么全不做,否则就会造成数据不⼀致。⽐如说:银⾏汇钱,两边同时执行。
  • I:隔离性isolate :⼀个事务的执⾏不能被其他事务所⼲扰
  • D:持久性 duration:数据库的改变是永久的。⽐如要落⼊磁盘

10.2 故障种类

  1. 事物内部故障 :采取REDO重做和UNDO撤销技术
  2. 系统故障 DBMS: 系统突然停转,系统要重启
  3. 介质故障:硬件损坏
  4. 计算机病毒

10.3 恢复⽅式

  1. 数据转储 :定期将整个数据库复制保存起来,转储可以分为静态转储和动态转储。
  2. ⽇志⽂件 : 记录事务对数据的更新操作的⽂件

10.4 恢复策略

  1. 事务故障的恢复:事务异常终⽌,那么就撤销之前的所有操作
  2. 系统故障的恢复 :还没执⾏完的事务UNDO、丢失的事务REDO。
  3. 介质故障的恢复:重装数据库,重做已经完成的事务

11、并发控制

11.1 并发带来的问题

  1. 丢失修改(W-W)
  2. 不可重复读(R-W)
  3. 读脏数据(W-R)

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

11.2 解决⽅法 :封锁

  1. 排它锁:也叫写锁 – X锁
  2. 共享锁:也叫读锁 – S锁

11.3 封锁协议

封锁就是事务 T 在对某个数据对象操作之前,先向系统发出请求,对其加锁

  1. ⼀级锁协议:解决丢失修改 (修改时,必须加X锁,直到事务结束)低
  2. ⼆级锁协议:解决读脏数据 (读的时候,加S锁,⽤完就放 )
  3. 三级锁协议:解决不可重复度(读的时候,加S锁,直到事务结束)高

数据库系统概论笔记_第4张图片

11.3 活锁和死锁

封锁会带来的问题

11.3.1活锁

系统不断批准下一个事务的请求,导致前面的一个事务可能会永远等待

避免活锁的简单方法是采用先来先服务的策略

11.3.2死锁

互相抱着对方的锁不放,互相在等待

预防死锁的发生:一次封锁法、顺序封锁法

死锁的诊断与解除(普遍采用的方法)是使用超时法事务等待图法

11.4 可串⾏性

多个事务的并发执行是正确的,当且仅当其结果与按某一次串行执行这些事务的结果相同,称这种调度策略为可串行化调度。

可串行化的调度是正确的

你可能感兴趣的:(数据库,数据库,sqlserver,sql,mysql)