数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据集合。
数据不是依赖于处理过程的附属品,而是现实世界中独立存在的对象
数据库管理系统(Database Management System,简称DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。是位于用户与操作系统之间的一层数据管理软件。
1、数据定义功能
2、数据操纵功能
3、数据库的运行管理
4、数据库的建立和维护功能
数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。
在不引起混淆的情况下常常把数据库系统简称为数据库。
数据库系统由数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。
1、面向全组织的复杂的数据结构
2、数据的冗余度小,易扩充
3、具有较高的数据和程序的独立性
4、统一的数据控制功能,数据共享程度高
数据库系统的一个主要目的是给用户提供数据的抽象视图,即系统隐藏关于数据存储和维护的某种细节。
1、物理层
2、逻辑层
3、视图层
实例:特定时刻存储在数据库中的信息的集合称作数据库的一个实例
模式:数据库的总体设计称作数据库模式
型是对数据的结构和属性的说明 ----模式
值是型的一个具体赋值 ----实例
型是相对稳定的,值是随时间不断变化的
1、物理模式(Physical Schema)
又称存储模式、内模式,是数据的物理结构及存储方式。
2、逻辑模式(Logical Schema)
所有用户的公共数据视图,是数据库全体数据的全局逻辑结构和特性的描述。
3、子模式(Sub-Schema)
用户的数据视图,是数据的局部逻辑结构,模式的子集。
1、外模式/模式映象
定义某一个外模式和模式之间的对应关系,映象定义通常包含在各外模式中。
2、模式/内模式映象
定义数据逻辑结构与存储结构之间的对应关系。
1、物理数据独立性
存储结构改变时,修改模式/内模式映象,使模式保持不变,从而应用程序可以保持不变,称为数据的物理独立性
2、逻辑数据独立性
当模式改变时,修改外模式/模式映象,使外模式保持不变,从而应用程序可以保持不变,称为数据的逻辑独立性
事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
1、原子性(Atomicity)
2、一致性(Consistency)
3、隔离性(Isolation)
4、持久性(Durability)
1、超码(superkey)
2、候选码(Candidate Key)
3、主码(Primary Key)
4、外部码(Foreign Key)
1、联系转化成的表,和实体转化成的表,可以机械地按照下述原则合并:
一对一,联系归任一;多对一,联系归于多;多对多,联系自成表。
2、实体转化成的表,相互之间不能机械合并
3、联系转化成的表,相互之间不能机械合并
1、格式
create [unique/distinct] [cluster] index 索引名
on 表名 (列名 [asc/desc] [ , 列名[ asc/desc]]…)
# 示例:
create cluster index s_sno_clu on S(sno)
create unique index s_sno on S(sno)
create index s_sname on S(sname)
2、索引的有关说明
Select * from table1
where REGEXP_LIKE(SJHM, '^[1]{1}[35]{1}[[:digit:]]{9}$')
^ 表示开始
$ 表示结束
[]内部为匹配范围
{}里的内容表时个数,有几位
查询手机号码是以 1开头接着是3或5再加9位的数字 所以这么理解:
1开头 表达式为 ^[1]{1} 意为 开始1位里包含1
3或5 表达式为 [35]{1}
9位数字结束 为: [[:digit:]]{9}$
这里[:digit:]为特殊写法,代表为数字 再加个结束符$
1、主码约束
主码定义形式
主码子句:PRIMARY KEY(sno)
主码短语:SNO CHAR(4) PRIMARY KEY
2、非空约束:要求某属性取值不能为空值
3、唯一性约束
4、外码约束(参照完整性)
定义形式
在SC表中,定义
FOREIGN KEY (sno) REFERENCES S(sno)
sno在SC中是外码,在S中是主码,sno在SC中取值或为空或为S中某个sno值
作为主码的关系称为基本(参照)关系,作为外码的关系称为依赖关系
5、删除基本关系元组
RESTRICT方式
只有当依赖关系中没有一个外码值与要删除的基本关系的主码值相对应时,才可以删除该元组,否则系统拒绝此删除操作
CASCADE方式
将依赖关系中所有外码值与基本关系中要删除的主码值所对应的元组一起删除
SET NULL方式
删除基本关系中元组时,将依赖关系中与基本关系中被删主码值相对应的外码值置为空值
如FOREIGN KEY (sno) REFERENCES S(sno) [ON DELETE [RESTRICT |CASCADE | SET NULL] ]
6、修改基本关系主码
RESTRICT方式
只有当依赖关系中没有一个外码值与要修改的基本关系的主码值相对应时,才可以修改该元组主码,否则系统拒绝此次修改
CASCADE方式
将依赖关系中所有与基本关系中要修改的主码值所对应的外码值一起修改为新值
SET NULL方式:
修改基本关系中元组主码时,将依赖关系中与基本关系中被修改主码值相对应的外码值置为空值
如FOREIGN KEY (sno) REFERENCES S(sno) [ON UPDATE [CASCADE | SET NULL] ]
date:日期,包括年(四位)、月和日
示例:date ‘2014-3-10’
time: 时间,包括小时, 分和秒
示例:time ‘09:00:30’
timestamp : date 和 time 的组合
示例:timestamp ‘2014-3-10 09:00:30’
interval:时间段
示例:interval ‘1’ day
两个 date/time/timestamp 类型值相减产生一个interval 类型值
可以在 date/time/timestamp 类型的值上加减interval 类型的值
grant 表级权限 on {表名 | 视图名} to
{用户 [,用户]… | public}
[with grant option]
表级权限包括:select, update, insert, delete, index, alter, drop, resource以及它们的总和all,其中对select , update可指定列名
with grant option表示获得权限的用户可以把权限再授予其它用户
# 示例
grant select , insert on S to Liming
with grant option
grant all on S to public
grant UPDATE(sno), SELECT ON S to U4
grant ALL PRIVILIGES to public
# 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT ON SC TO U5 WITH GRANT OPTION
# 回收权限
revoke 表级权限 on {表名 | 视图名} from
{用户 [,用户]… | public}
收回权限时,若该用户已将权限授予其它用户,则也一并收回。授权路径的起点一定是DBA
# 示例
revoke insert on S from Liming
求解一个关系的候选码,是NP问题(为什么?)
下面我们给出简易的方法
对于给定的关系R(U,F),可将其属性分为4类:
如果去除一个函数依赖中的属性,不会改变该函数依赖集的闭包,则称该属性是无关的(extraneous)
无关属性的核心:能够被函数依赖集F逻辑蕴涵的函数依赖,不必出现在F中。
满足下列条件的函数依赖集F称为正则覆盖,记作Fc:
设关系模式R=A1,…,An,R上成立的函数依赖集F,R的一个分解p ={R1,…,Rk}。
2、无损连接判别方法—快速法
即 判断交集是否为R1或R2的超码,若是,则为无损分解;否则为有损分解!
为了避免计算F+,给出一种更有效的算法。思想如下:通过使用修改后的属性闭包的形式,判断F上的每一个函数依赖α–>β在分解中是否被保持
1、第一范式(1NF)
关系中每一分量不可再分。即不能以集合、序列等作为属性值。
2、第二范式(2NF)
若 R 为 1NF,且每个属性满足下列准则之一:
即 消除非主属性对码的部分依赖
4、第四范式(4NF)
并不是规范化程度越高,模式就越好,必须结合应用环境和现实世界的具体情况合理地选择数据库模式
1、达到3NF且保持函数依赖的分解
2、3NF综合算法
即 在进行保持函数依赖的3NF分解后,若分解得到的 Ri 中,包含候选码,即为无损分解;否则再添加一个只包含 候选码 的Rj分解即可。
3NF分解算法要注意的问题:
3、达到BCNF无损连接分解算法
4、达到4NF无损连接分解算法
1、涉及到学生、教师和课程关系模式STC(SNO,SN,SA,TN,CN,G),其中6个属性分别为学生的学号、姓名、年龄、教师的姓名、课程名以及学生的成绩。假设 学生有重名,课程名也可能有重名。又假设教师无重名,且每个教师只教一门课程,但一门课程可有几个教师同时开设。某个学生选定某门课后,其上课教师就固定了。要求:
(1)写出键码和函数依赖
(2)分解关系模式使之属于BC范式
候选码:(SNO,CN)和(SNO,TN)
SNO->SN, SNO->SA , TN->CN, (SNO,CN)->TN, (SNO,CN)->G, (SNO,TN)->G
STC(SNO, TN,G) S(SNO,SN,SA) T(TN,CN)
2、有关系模式:Student(学号,姓名,所在系,班号,班主任,系主任),其语义为:一个学生只在一个系的一个班学习,一个系只有一个系主任,一个班只有一名班主任。指出此关系模式的候选码。判断此关系模式是第几范式,若不是三范式,将其规范为三范式。
函数依赖有:学号→ 姓名 学号→ 所在系,学号→班号,班号→班主任,
所在系→系主任
候选码:学号 是2NF不是3NF
Student(学号,姓名,所在系,班号)
Student1(班号,班主任)
Student2(所在系,系主任)
3、假设某商业集团数据库中有关系模式如下:
R(商店编号,商品编号,商品库存数量,部门编号,负责人)
如果规定:
每个商店的每中商品只在该商店的一个部门中销售。
每个商店的每个部门只有一位负责人。
每个商店的每种商品只有一个库存数量。
试回答下列问题:
(1)根据上述规定,写出关系模式R的基本函数依赖。
(2)找出关系模式R的候选码。
(3)试问关系模式R最高已经达到第几范式,为什么?
(4)如果关系模式不属于3NF,试将R分解成3NF。
函数依赖:(商店编号,商品编号)→部门编号,(商店编号,部门编号)→负责人
(商店编号,商品编号)→商品库存数量
候选码:(商店编号,商品编号)
不是3NF: R1(商店编号,商品编号,商品库存数量,部门编号)
R2(商店编号,部门编号,负责人)
4、假设我们有关系模式:管理(仓库号,设备号,职工号),它所包含的语义是:一个仓库可以有多个职工;一名职工仅在一个仓库工作;在每个仓库一种设备仅由一名职工保管,但每名职工可以保管多种设备。请根据语义写出函数依赖,求出候选码。判断此关系模式是否属于3NF,是否属于BC范式。
5、假设你有一个名为TRANSACTION的关系模式如下,用來记载读者买书的交易:
TRANSACTION (isbn, title, publisherId, publisherName, readerId, name, dateTime, unitPrice, number)
函数依赖如下:
isbn { title, publisherId }
publisherId { publisherName }
readerId name
{ isbn, readerId, dateTime }{unitPrice, number}
(1)请问关系的候选码为?
(2)请分解满足2NF的关系模式
(3)请分解满足3NF的关系模式
6、已知R<U,F>U={A,B,C,D,E,F},F={AB->C, C->D, D->E,D-> F}
(1)请找出R的候选关键码。
(AB)
(2)判断此关系属于第几范式,将R分解成3NF。
2NF, U(A,B,C) ,U1(C,D),U2(D,E,F)
(3)将R分解成BC范式
U(A,B,C), U1(C,D),U2(D,E,F)
7、设有关系模式R(A,B,C,D,E,P),模式中有函数依赖集F={A→D,E→D,D→B,BC→D,DC→P}。
(1)请找出R的候选关键码。
(AEC)
(2)将R分解成3NF。
2NF (A,D,B)(E,D,B)(D,C,P)(A,E,D)(A,C,D)(E,C)(A,E,C)
(3)将R分解成BC范式
8、已知关系模式R中,U={A,B,C,D, E, G},
F={AB→C, C→A, BC→D, ACD→B, D→EG, BE→C, CG→BD, CE→AG},
求(BD)+,判断BD→AC是否属于F+,并判断BD是否为候选码
解:(BD)+=BDEGCA
结论:(BD)+=ABCDEG,BD→AC可由F导出,即BD→AC属于F+
9、已知关系模式R中
U={A,B,C,E, H, P, G},
F={AC→PE, PG→A, B→CE, A→P, GA→B,GC→A, PAB→G, AE→GB, ABCP→H},
证明BG→HE属于F+
证:因为,(BG)+ =ABCEHPG,
所以BG→HE可由F导出,即BG→HE属于F+
1、事务定义
2、SQL中事务的定义
1、基本比较
2、并行的优点
3、核心问题
1、丢失修改(lost update)
2、不可重复读(non-repeatable read)
3、读“脏”数据(dirty read)
事务的执行顺序称为一个调度(schedule),表示事务的指令在系统中执行的时间顺序
一组事务的调度必须保证
串行调度
并行调度
当一个调度S与一个串行调度冲突等价时,则称该调度S是冲突可串行化的(conflict serializable)
优先图(precedence graph)
一个调度S的优先图是这样构造的:它是一个有向图G =(V,E),V是顶点集,E是边集。
顶点集由所有参与调度的事务组成,边集由满足下述条件之一的边Ti -> Tj组成:
①在Tj执行read(Q)之前,Ti执行write(Q)
②在Tj执行write(Q)之前,Ti执行read(Q)
③在Tj执行write(Q)之前,Ti执行write(Q)
如果优先图中存在边Ti->Tj ,则在任何等价于S的串行调度S’中,Ti都必须出现在Tj之前
冲突可串行化判定准则
如果调度S的优先图中有环,则调度S是非冲突可串行化的。如果图中无环,则调度S是冲突可串行化的。
与冲突可串行化等价的串行顺序
串行顺序可由拓扑排序得到,求出与优先图的偏序相一致的线序
封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
封锁是实现并发控制的一个非常重要的技术。
保证可串行性的封锁协议
定义:每个事务分两个阶段提出加锁和解锁申请
-增长阶段(growing phase):事务可以获得锁,但不能释放锁
-缩减阶段(shrinking phase) :事务可以释放锁,但不能获得新锁
封锁点,lock point,:
事务最后加锁的位置,称为事务的封锁点, 记作Lp(T)
并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的
事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件
可串行化的调度中,不一定所有事务都必须符合两段锁协议。
定理:
两阶段保证调度冲突可串行化;
证明:
反证法,假设调度{T1,T2,…,Tn}遵从两阶段封锁协议,但不冲突可串行化。
1、不冲突可串行化,优先图必有环;不妨设
T1,T2,..,Tm,T1是优先图的一个环。
2、如果优先图有边Ti→Tj,必有:
Lp(Ti)
基本思想:
时间戳排序协议的目标:
时间戳协议性质和特点
保证任何有冲突的read或write操作按时间戳顺序执行
1、假设事务Ti发出read(Q)
2、假设事务Ti发出write(Q)
在所有等效执行计划中选择具有最小查询执行代价的计划
给定一个关系代数表达式,查询优化器的任务是产生一个查询执行计划,该计划能获得与原关系表达式相同的结果,并且得到结果集的执行代价最小。