数据库原理
第一章 绪论(考填空和简答)
一、概念与术语
1、数据
2、数据库
3、数据库管理系统(DBMS)
DBMS的功能:对数据统一管理和控制的软件系统(考点)
(1)数据库定义功能
(2)数据库操纵功能
(3)数据库运行控制功能
(4)数据通信功能
(5)支持存取海量数据
4、数据库系统的构成
(1)数据库
(2)数据库管理系统
(3)数据库应用(application)
(4)数据库管理员
(5)计算机系统平台:硬件
二、数据管理发展
人工管理阶段
'文件管理阶段'与'数据库管理阶段'的对比:
文件阶段:数据冗余度大、数据一致性和完整性差、数据与程序缺乏独立性
数据库阶段:数据组织结构化,数据冗余度小,具有较高的数据与程序的独立性,具有统一的数据控制
三、数据库管理系统(DBMS)的构成(考点)
1、查询(DBMS输入)
2、查询处理程序(解释每一部分的功能)
3、事务管理程序
事务:完成某一逻辑的一段代码,具有原子性、一致性、隔离性、持久性
4、存储管理程序
5、元数据数据
四、数据库系统的模式(schema)结构
抽象过程
DBMS: |用户
|外模式 :视图(局部逻辑层)
|模式:全局逻辑层
|内模式:物理层,存储结构
|数据库:硬件
二级映像
两个映像(接口):
1、外模式/模式映像
2、模式/内模式映像
数据独立性:在某一层上修改该层模式定义不影响位于上一层模式的能力(考点)
逻辑独立性:外模式/模式映像
物理独立性:模式/内模式影响
计算模型(了解)
C/S
B/S
第二章 数据库建模
数据库设计步骤:
人的抽象
现实世界--------->概念模型->数据模型
概念模型:用E-R图表示
1、实体
2、属性
3、实体集
4、域
5、键码:能够唯一识别一个实体的最小属性集
6、候选码:多个键码统称候选码(这些键码的属性个数相同)
7、主码:在候选码中选出一个当做主键
8、联系
一元递归:
二元联系:
一对一
一对多
多对多
多元联系
多元联系体现在题目中为:xx、xx、xx之间的关系为....
9、子类
继承了父类的属性和联系
10、弱实体集
组成一个实体集‘键码属性’中的一部分来自其他实体集的键码属性。
联系必须是单值(一对一或一对多)
11、约束
(1)键码约束(实体完整性约束) -- 一种单值约束
单值约束:属性的单值约束、联系的单值约束
(2)参照完整性约束 -- 外键约束
(3)用户定义完整性约束 -- 域的约束
E-R图设计原则:
1、忠实性
2、避免冗余
3、尽量简单
能用多元联系,必须用多元联系
4、选择合适的事物类型
第三章 数据模型(关系)
数据模型三要素:(考)
1、数据结构:数据库中的数据及之间的联系
2、数据操作:update,select等
3、数据的约束条件:
数据模型:
1、关系(表)
2、属性
3、域
4、元组
5、元组分量
6、键码,候选码,主码,主属性
能够唯一标识一个元组的最少属性集合--键码
特性:唯一性、最小性
多个键码统称候选码
候选码中选出一个当主键/主码
所有候选码的属性成为主属性
7、全码
一个关系的键码包括关系的所有属性,这样的键码为全码
8、超码
能够唯一标识一个元组的属性组,可能比键码多,因此叫超码
关系模式:R(U,F) 关系名(属性名1,属性名2,……,属性名n)抽象的
关系实例:关系模式的实例,元组的集合
关系数据库模式:若干个关系模式集合,构成了一个关系数据库模式
关系的性质:
任何时候都不能同时出现取值相同的两个元组(关系是元组的集合)
关系是随时间变化的。
属性的域必须是简单域
概念模型到关系数据模型的转换(考大题)
1、实体集->关系模式
2、联系
一对一:可以两个键码同时当做键码
多对一:多的一方的键码当做联系的键码(一元递归联系同样适用)
多对多:同时当键码
3、子类
isa联系无需转换
注意:子类要继承全部父类的属性和联系
(1)E—R法(default)子类只需要加父类的键码
(2)OO方法(子树)
(3)空值法:转换成一个关系模式,包括所有属性,没用的置NULL
4、弱实体集
弱实体集的联系无需转换
只需要加上强实体集的键码即可。
第四章 关系代数运算
抽象的关系操作语言,mysql是实例
对象与结果都是关系。
关系代数运算的分类:
1、二元集合运算
并,差,交,笛卡尔积
并兼容:两个关系的属性个数相同,对应属性的域也相同
2、一元运算
选择,投影
3、连接运算
一般连接
自然连接(同名属性上的等值连接)
4、命名运算
第五章 SQL
SQL语言使用的三种表:
视图--外模式
基本表--模式
存储文件--内模式
基本表:实际存在的表
查询表:存储中间结果
视图表:“虚”表,指针
like % _
order by
distinct:消去重复的元组
group by 与 聚集函数 时常在一起出现
每个group只输出一条语句
having 与 where的区别:having对每一个group做限制,where对每一个元组做限制
https://blog.csdn.net/qq_38962853/article/details/73838626
如果使用了分组子句(group by),则查询列表中的每个列必须:
(1)要么是分组所依据的列(group by 后边跟着的列)
(2)要么是聚集函数
聚集函数不能用于where子句
连接表达式经常用于select语句的from子句
嵌套查询经常在where或 group by 的having中
不等于 "<>"
1、数据定义(create / drop / alter)
表:
create table <表名>(<属性> <类型> |属性约束|, ..., <属性> <类型>, 表约束)
alter table <表名> add column <属性名> <类型>
drop table <表名>
索引:
1、加快给定属性值的查询时间
2、增加更新数据操作的系统开销
create [unique] [clustered] index <索引名> on <表名>(<属性名> [asc|desc],..., <属性名> [asc|desc])
drop index <索引名>
视图:
create view <视图名>(<列名>, ..., <列名> ) as 查询子句
drop view <视图名>
有的视图可以更新,有的不可以更新
2、查询语句(select)
(1)单表查询
(2)多表查询与连接查询
(3)嵌套查询
in/any/all/some/exists 谓词
(4)集合查询(union/interset/except)
(5)视图查询(view)
3、数据库更新(insert / delete / update)
insert into <表名>(<属性名>,..., <属性名>) values (值,...,值)
update <表名> set <属性名> = (值), ..., <属性名> = (值) where
delete from <表名> where
第六章 SQL中的数据约束
一、数据约束的作用
1、实现“数据的完整性”
(1)实体完整性:键码约束、单值约束
(2)参照完整性:外键约束
(3)用户定义完整性:属性、关系、元组上的约束
2、实现数据库的主动服务
二、实体完整性约束(键码约束和单值约束)
紧跟在属性后面,或者在属性下面定义
primary key
default 值
unique
三、参照完整性约束
外键可以为NULL
一般在联系实例化后的表中出现外键约束。
维护策略:
1、缺省策略(被参照关系元组被修改,参照关系不做任何处理)
2、级联策略(被参照关系元组被删改,级联的删改参照关系)
3、置空策略(被参照关系元组被修改,参照关系置NULL)
例:
foreign key(本表属性名字)references 表名(属性名)
on delete no action on update cascade(删除和更新策略)
四、用户定义完整性约束
not null
check(表达式)
或在创建表的下面,check(表达式)
第七章 关系数据库设计理论
规范化的原因:
1、数据冗余太大
2、修改异常,导致数据库数据不一致
3、删除异常,可能导致数据库丢失数据
一、函数依赖:是现实世界数据关联的表现形式
定义:一个属性依赖于另一个属性,X->Y(表示数据的关联性)
判断是否是函数依赖:
找X中是否有相等的元组分量,如果都不相等,一定X->Y。
如果有相等的X,再看Y是否相等.
如果任意元组Y相等,则X->Y;如果存在相等的元祖Y,X-\>.
部分函数依赖与完全函数依赖
部分函数依赖是不好的(代表有冗余信息)
传递函数依赖
非平凡函数依赖 与 平凡函数依赖
多值函数依赖:X->->Y
二、关系模型的规范化
1、1NF(各属性域是“原子”的,不可分的)
2、2NF(首先属于1NF)
定义:每一个非主属性完全函数依赖于键码
不存在非主属性对键码的部分函数依赖
推论:当键码中只有一个属性时,必是2NF
思考:如果有部分函数依赖,应该把那个函数依赖分出去
3、3NF(首先属于2NF)
不存在非主属性对键码的传递函数依赖
推论:如果所有属性都是主属性,则必是3NF
思考:如果有传递函数依赖,则应该把两个依赖分成两个关系。
4、BCNF(判断完3NF后,再判断BCNF)
定义:对于R的每一个函数依赖X->Y,X都含有键码(候选码)(X是超码)
约束主属性之间的依赖关系,消除主属性之间的部分函数依赖和传递函数依赖
三、模式分解
1、预备知识
函数依赖的逻辑蕴涵:从函数依赖集F中能推出的函数依赖
函数依赖Armstrong公理:
自反性
增广性: X->Y => XZ->YZ
传递性
推论规则:
合并规则
分解规则
伪增广规则
伪传递规则
函数依赖集F的闭包:F+
属性集关于函数依赖集F的闭包:XF+
判断一个函数依赖(X->Y)是否被函数依赖集F所蕴涵:
(1)计算 XF+
(2)检查Y是否属于XF+
函数依赖的等价:
F+ = G+ 则F=G
证明:集合相等的证明方法。
检查差异集是否被另外一个集合逻辑蕴涵
逻辑蕴涵要用到属性集关于函数依赖集的闭包
极小函数依赖集Fm:(像极了mgu)
右部仅含有一个属性,左部没有多余的属性,没有多余的函数依赖
计算Fm的算法:
右部多余一个属性,分解
左部多余一个属性,看去掉一个后是否等价
消除多余的函数依赖
最好的方法还是‘瞪眼法’
从函数依赖集确定关系模式的键码:
首先用推论缩小键码范围
(1)如果X只出现在左部,X必是主属性
(2)如果X既没出现在左部,又没出现在右部,X必是主属性
(3)如果X只出现在右部,X必不是主属性
然后从一个元素开始枚举算XF+,注意键码的最小性。
2、模式分解算法
(1)函数依赖集的投影(分解)
每个子模式的属性集已知,只需要求函数依赖集在每个子模式上的投影。
投影步骤:
(i)算'子模式'中所有子属性集对F的闭包 ∩ 子模式属性集
(ii)根据闭包,写出Fi
(2)关系模式的分解
从属性入手:保证子模式通过属性连接后可以恢复原模式---无损连接
从函数依赖入手:保证有依赖关系的属性分到一起。----保持函数依赖性
(i)“无损连接”的分解(BCNF)(有可能损失函数依赖关系)
判断分解是否具有‘无损连接性’算法:
二维表方法
分解算法:
先分解出属性集,再函数依赖集投影,再分......直到是BCNF为止
要用到的算法:
1、计算属性在F上的闭包
2、函数依赖集在属性集上的投影(硬算)
3、求键码
(ii)"保持函数依赖性"的分解(3NF)
判断分解是否具有‘保持函数依赖性’算法:
并起来的闭包是否与原函数依赖集的闭包等价。
只需要检查‘原函数依赖集’是否是‘并集的闭包’的子集
分解算法:
计算Fm
根据Fm中左部的不同属性划分子模式
如果存在属性集的子集关系,合并Fi
(iii)既“无损连接”又“保持函数依赖”的分解(3NF)
第八章 数据库系统控制
一、数据库安全性
概念:保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
安全性控制的一般方法:存取权限控制
授权指令:
权限类型:select insert delete update
grant <权限类型> on <数据库> to <用户> |with grant option|(是否给这个用户grant的权利)
收回指令:
revoke <权限类型> on <数据库> from <用户> |cascade|
revoke <grant option for select> on <student> from <User2> |cascade|
二、事务管理
概念:事务是访问并可能更新数据库数据的一个程序执行单元
begin transaction
commit
rollback
end transaction
性质:(ACID)
1、原子性
2、一致性
3、隔离性
4、持久性
日志文件,先写日志文件,再执行数据库更新。事务故障根据日志文件恢复
三、并发
问题:两个事务同时读写相同的数据,带来数据一致性问题
1、丢失修改(写 写)
2、读入‘脏’数据(写 读 回滚)
3、不可重复的读(读 写 读)
解决:封锁
排他锁(X)(写锁)
共享锁(S)(读锁)
三级锁协议
一级锁协议:修改之前加写锁,事务结束后释放写锁 ---> 1
二级锁协议:一级 + 读入之前加读锁,读后立即释放读锁 ---> 2
三级锁协议:一级 + 读入之前加读锁,整个事务结束后,才释放读锁 ---> 3
先判断什么类型的问题,再用相应的协议解决问题
可串行化的定义:多个事务的一个交错执行的结构与串行执行结果相同。
可串行化的必要条件:两阶段锁协议
两阶段锁协议:所有事务分为两个阶段,申请锁阶段和释放锁阶段。
SQL标准的隔离性级别(4个)
1. SERIALIZABLE(可串行化)-------缺省值
2. READ UNCOMMITTED (允许读“脏”数据)
3. READ COMMITTED(禁止读“脏”数据,但允许不可重复的读)
4. REPEATABLE READ (只允许可重复的读)
数据库复习知识点纲要
最新推荐文章于 2024-07-04 11:16:56 发布