1.数据模型的组成要素:
2.常用数据模型
1.关系:笛卡尔积 D1xD2xD3xD4
的子集叫做在域D1、D2、D3D4上的关系
候选码——某一属性组的值能唯一的标识一个元组,而其子集不能,则称该属性组为候选码
主码——若一个关系有多个候选码,选定一个为主码
候选码的属性称为主属性,不包含在任何候选码的属性称为非主属性
2.关系的描述
称为关系模式,表示为:
R(U,D,DOM,F)
R——关系名,U——组成该关系的属性集合,D——U中属性所来自的域
DOM——属性向域的映像集合,F——属性间数据的依赖关系集合
1.传统集合操作
2 .专门的关系运算
行
列
(会去除重复行)T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有的所有组合都在R中
1.创建表
CREATE TABLE mytable(
id INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL,
col2 VARCHAR(40) NULL,
PRIMARY KEY(id)
);
2.修改表
#添加列
ALTER TABLE mytable
ADD col INT NOT NULL;
#删除列
ALTER TABLE mytable
DROP column col;
#删除表
DROP TABLE mytable;
CREATE INDEX index_name ON table_name(column1,column2)
SELECT [ALL|DISTINCT] <column_name>
FROM <table_name>
[WHERE<条件表达式>] #条件查询
[GROUP BY<column_name>] #分组查询
[ORDER BY<column_name>[ASC|DESC]] #排序
DISTINCT 去重复
1.使用 LIKE 进行通配符匹配(只能用于文本字段)
WHERE col LIKE 'ab%' #以 ab 开头的字段
2.计算字段使用 AS 取别名,否则输出的时候字段名为计算表达式
SELECT col1*col2 AS alias
FROM mytable
3. 把具有相同数值的行放在同一组中
4.ASC 升序(默认)
DESC 降序
更新
UPDATE table_name
SET col1=val
WHERE<条件表达式>
插入
INSERT INTO table_name(col1,col2)
VALUES(col1,col2)
删除
DELETE FROM table_name
WHERE<条件表达式>
CREATE VIEW view_name
AS
<子查询>
作用:
主要是:定义用户权限
与合法权限检查
自主存取控制:用户对不同的数据库有不同的访问权限,不同的用户对同一数据库也有不同的权限,且用户还可以将拥有的权限转授给其它用户
强制存取控制:每一个数据库都被标以一定的密级,每一个用户也被授予某一个级别的许可证。
1.GRANT 授权
GRANT <权限>
ON <对象>
TO <用户>
[WITH GRANT OPTION] #转授权
例如:把查询 student 表的权限授予给 U4 用户
GRANT SELECT
ON TABLE student
TO U4
2.REVOKE 收回
REVOKE <权限>
ON <对象>
FROM <用户>
例如:把用户 U4 修改学生号的权限收回
REVOKE UPDATE(Sno)
ON TABLE student
FROM U4
主体:系统中活动的实体,指数据库管理系统所管理的实际用户
客体:系统中被动实体,指文件、基本表、索引等
规则:
大于
或等于客体密级,才能读
小于
或等于客体密级,才能写
规则 2 是防止将数据的密级降低
把用户对数据库的所有操作自动记录下来放入到审计日志,审计员通过审计日志监控数据库的行为,找出非法存取数据的人
数据库的安全审计系统提供了一种时候检查的安全机制!
通过视图把要保密的数据对无权限的用户隐藏起来
将数据的原始数据——原文加密为不可直接识别的格式——密文,使得不知道解密算法的人无法获知数据内容
通过 PRIMARY KEY
定义
用 FOREIGN KEY
定义哪些列为主码,用 REFERENCES
指明这些外码参照哪些表的主码
例如:
FOREIGN KEY(Sno) REFERENCES Student(Sno);
1.不能取空值 NOT NULL
2.列值唯一 UNIQUE
3.用 CHECK
指定列值应满足的条件
Sex VARCHAR(2) CHECK (Sex IN ('男','女')); #性别只能选 '男','女'
4 .通过 constaraint <完整约束名> <完整约束条件>
定义完整约束命名子句
1.函数依赖:对一个关系 r,不存在
两个元组在X 上的属性值相等,而在 Y上的属性值不相等
,称 X 确定 Y 或者 Y 依赖于 X
2.完全函数依赖:在 R(U)中,X-->Y,并且不存在X的任何一个真子集 X' 有 X'-->Y
3 .传递函数依赖:X-->Y, Y-->Z
,则称 Z 对 X 传递函数依赖
符合 1NF
的关系中每个属性都不可再分
缺点:数据冗余
插入异常(只添加系而不添加学生插入异常)
修改异常(修改其中系,其余记录也要修改相应系)
删除异常(删除某个系得所有学生记录,则这个系的信息也被抹除,但是一个系学生没了并不代表这个系不存在,系主任不存在)
2NF 在 1NF 的基础上,消除了非主属性对码的部分函数依赖
基本消除数据冗余与修改异常
3NF 在 2NF 的基础上消除了非主属性对码的传递函数依赖
删除与插入异常基本消除
https://blog.csdn.net/wenco1/article/details/88077279
画出 E-R 图
将 E-R 转换为数据库系统所支持的数据模型相符合的逻辑结构
如将 E-R 图转换为 关系模型
`职工(职工号 、部门号、职工名、职务)
为给定的逻辑数据模型选取一个最合适的物理结构
主要包括为关系模式选择存取方法
、存储结构
存取方法:
1.B+ 树索引
2.Hash 索引
3.聚簇存取方法
存储结构:
1.数据存放位置
2.系统配置
1 .代数优化
按照一定规则,通过对关系代数表达式进行等价变换,改变代数表达式的次序和组合,使得查询更高效
a.通过对关系代数表达式的等价变换
来提高查询效率
b.查询树的启发式优化
1.选择运算尽可能先做
选择运算一般使计算的中间结果大大变小
2.把投影运算和选择运算同时进行
它们都对同一个关系操作,同时进行避免了重复扫描
3.把投影运算同其前或后的双目运算结合起来
4.把某些选择运算同在它前面要执行的笛卡尔积结合起来成为一个连接运算
连接比同关系上的笛卡尔积省很多时间
5.找出公共子表达式
2 . 物理优化
指存取路径和底层操作算法的选择
1.基于代价
2.基于规则
3.基于语义
满足 ACID 的一组操作,要么全部做,要么全部不做,是一个不可分割的单位
ACID:
1.事务内部故障
2.系统故障
3.介质故障
4.计算机病毒
定期的将数据库的数据复制到磁带、磁盘或者其它存储介质上存储起来的过程
有:动态转存、静态转存——转存期间能否有事务运行
1.日志文件格式与内容
日志文件——用来记录事务对数据库更新操作的文件
格式:以记录为单位、以数据块为单位
内容:记录型——事务标识、操作类型、操作对象、新值、旧值
数据块型——事务标识、数据块
2.为保证数据库是可恢复的,登记日志文件需保证以下两个原则:
事务故障指事务在运行至正常终点前被终止
这时恢复子系统通过日志文件撤销已经对数据库进行的修改;
反向扫描日志,查找该事务的更新操作,并对该事务的更新操作执行逆操作
撤销故障发生时未完成的任务,重做已完成的任务
1.正向扫描日志,故障前完成加入 REDO 队列,故障后完成加入 UNDO 队列;2.对于 UNDO 队列按事务更新操作逆向恢复;3.对 REDO 重做事务
重装数据库,重做已完成的事务
1.重载数据库副本;2.重载日志文件
利用日志技术恢复缺点:1.搜索整个日志耗时长;2.有些 REDO 操作可能不需要进行,因为已经写入数据库
在日志文件中新增一类——检查点记录,并增加一个重新开始文件,有恢复子系统在登录日志文件期间动态的维护日志
检查点记录包括:1.建立时刻正在执行的任务清单;2.最近一个日志记录地址
恢复步骤:
事务是并发控制的单位;为了保证事务的隔离性和一致性,数据库要对并发操作进行正确的调度;
并发一致性问题:
上述并发一致性问题主要是并发操作破坏了事务隔离性
。并发控制机制主要就是用正确的方式调度并发操作,是一个用户事务的执行不受其它事务的干扰
主要技术有:封锁、时间戳、乐观控制法和多版本控制
指事务在对某个数据对象操作之前,先向系统发出请求对其加锁
基本封锁类型:
运用读写锁时还需要约定一些规则,如何时申请、持锁时间、何时释放等,称为封锁协议
1.一级封锁协议:事务在修改数据之前必须先对其加写锁,事务结束才释放
防止丢失修改
2.二级封锁协议:在一级封锁协议的基础上增加事务在读取数据前先加读锁,读完释放
防止丢失修改、脏读
3.三级封锁协议:在一级封锁协议的基础上增加事务在读取数据前先加读锁,事务结束释放
防止丢失修改、脏读、不可重复读
1.活锁:申请锁的事务一直等待
避免活锁的简单方法就是采用先来先服务
的策略
2.死锁:两个进程由于争夺资源而造成的一种相互等待的现象,如无外力,它们都将无法推进下去
解决:回滚、抢占、杀死进程
数据库解决条件:1.一次封锁法;2.顺序封锁法
1.封锁对象的大小称为封锁的粒度;
2.封锁的粒度与系统的并发度和并发控制的开销密切相关;封锁粒度越小,并发度越大,并发控制开销越大;
3.多粒度封锁树——数据库–>关系–>元组
显示封锁是应事务要求直接在数据对象上加锁;隐式封锁指该数据对象没有被独立加锁,但是由于其上级结点加锁从而导致该数据被加锁
4 . 在对某个对象加锁时要
a.检查它是否有显示封锁与之冲突;非常麻烦。
b.检查其上级结点,看本事务的显示封锁是否与该数据对象的隐式封锁冲突
c.检查其下级结点,看看它们的显示封锁是否与本事务的隐式封锁冲突
为此引入了一种新型锁——意向锁
5.意向锁——如果对一个对象加意向锁,则说明该结点的下层结点正在被加锁;
对任一结点加锁时,必须先对它的上层结点加意向锁
有了意向锁,就无需检查下一级结点的显示封锁
6.意向锁分类:
a.意向共享锁——它后面结点加S锁
b.意向排他锁——它后面结点加X锁
c.共享意向排他锁——S锁+意向排他锁