部分内容来源于网络,侵删~
第一章
数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。
外模式是逻辑模式的子集。
数据库的两级映象技术是指外模式与模式之间的映象和内模式与模式之间的映象。
- 外模式/模式映像:当模式改变时,由数据库管理员对各个外模式/模式映像作相应改变,可以使外模式保持不变。应用程序不必修改。保证了数据与程序具有较高的逻辑独立性。
- 模式/内模式映像:当数据库的存储结构改变时,由数据库管理员对模式/内模式作相应改变,可以使模式保持不变,从而应用程序也不用改变。保证了数据与程序的物理独立性。
当数据的物理存储改变时,应用程序不变,而由DBMS处理这种改变,这是指数据的物理独立性。逻辑结构改变 -> 逻辑独立性。
以子模式为框架的数据库是用户数据库;以模式为框架的数据库是概念数据库;以物理模式为框架的数据库是物理数据库。
数据独立性是指应用程序和数据之间相互独立、不受影响,即数据结构的修改不会引起应用程序的修改。
模式和内模式都只能有一个。
在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中,数据独立性最高的是数据库系统阶段(共享性高、冗余度低、易扩展)。
数据库技术采用分级方法将数据库的结构划分成多个层次,是为了提高数据库的逻辑独立性和物理独立性。
数据库的数据项之间和记录之间都存在联系。
数据模型的组成要素:数据结构(静态,数据库组成对象与对象之间的联系)、数据操作(动态,CRUD)、数据的完整性约束条件(用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效与相容,完整性约束条件是一组完整性规则的集合)
通常用**三级模式(内模式+(逻辑)模式+外模式)**来描述数据库,其中逻辑模式是对数据的整个的逻辑结构的描述。
- 外模式:也称子模式或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
- 模式:也称为逻辑模式,是数据库中全体数据 的逻辑结构和特征的描述,是所有用户的公共数据视图。
- 内模式:也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
在数据库中存储的是数据及数据间的联系。
DBMS提供的 DML有两种使用方式,其中一种是将 DML 嵌入到某一高级语言中,此高级语言称为宿主语言。
对于数据库系统,负责定义数据库内容,决定存储结构和存取策略及安全性授权工作的是数据库管理员。
数据有型与值之分。数据受数据类型和取值范围的约束。数据有定性表示和定量表示之分。数据应具有载体和多种表现形式。
数据库管理系统(位于用户和操作系统之间的一层数据管理软件)主要功能:
- 为数据库提供数据的定义、建立、维护、查询和统计等操作功能。
- 完成对数据完整性进行控制的功能。
- 完成对数据安全性进行控制的功能。
数据库系统阶段的数据管理有哪些特点?
- 数据库系统以数据模型为基础
- 数据库系统的数据冗余度小、数据共享度高
- 数据库系统的数据和程序之间具有较高的独立性
- 数据库系统通过DBMS(数据库管理系统)进行数据安全性、完整性、并发控制和数据恢复控制
数据库系统:是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统
信息的内容是关于客观事物或思想方面的知识信息是有用的,它是人们活动的必需知识。信息能够在空间和时间上被传递,在空间上传递信息称为信息通信,在时间上传递信息称为信息存储。信息需要一定的形式表示,信息与其表现符号不可分离。
数据模型分为概念模型(信息模型) 和逻辑模型(物理模型)
1、概念模型:也称信息模型,它是按用户观点来对数据和信息建模,主要用于数据库设计(比如表示方法有 ER 图)。
实体:客观存在并可相互区别的事物。人
属性:实体所具有的某一特性。人的鼻子嘴巴
码:唯一标识实体的属性。学号
实体型:用实体名及其属性集合来抽象和刻画同类实体。 含有鼻子和嘴巴的人
实体集:同一类型实体的集合。学校
联系:实体之间的联系通常是指不同实体集之间的联系。实体之间的联系有一对一、一对多和多对多等多种联系。实体内部的联系通常是指实体各属性之间的联系。
概念模型的一种表示方法:实体-联系方法。用E-R图来描述现实世界的根念模型,E-R方法也称为E-R模型。
2、逻辑模型:它是按计算机系统的观点对数据建模,主要用于数据库管理系统(DBMS)的实现。
包括:1层次模型
2网状模型
3关系模型
物理模型:是对数据最底层的抽象,它描述数据在系统内部的表示方法和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
层次模型:
网状模型:
关系模型:
关系:一个关系对应通常说的一张表。
元组:表中的一行。
属性:表中的一列。
码:也称码键,表中的某个属性组(由一个或多个属性组成,其值能够惟一标识关系中一个元组)。
域:是一组具有相同数据类型的值的集合。
分量:元组中的一个属性。
第二章
一个关系只有一个主码(随便挑的一个候选码,简称码)。
关系代数运算是以集合运算为基础的运算。
五种基本关系代数运算(查询操作的基本操作)是 ∪(并) -(差) ×(笛卡尔积) σ(选择) π(投影) <并差积选投>
关系数据库中的投影操作是指从关系中抽出特定字段。
从表中取出满足条件的属性的操作为投影;从表中选出满足某种条件的元素的操作称为选择;将两个关系中具有共同属性值的元组连接在一起构成新表的操作称为连接。
连接操作 = 选择 + 笛卡尔积
笛卡尔积是既向关系的水平方向也向关系的垂直方向进行运算。
在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。简单的理解为关系就是一张二维表。
一个基数为M的关系与另一个基数为N的关系。它们的笛卡尔积的基数为 M* N。
R为4元关系R(A,B,C,D),S为3元关系S(B,C,D),R*S构成的结果集为 7 元关系。
关系模式中的所有属性是这个关系的候选码,则称为全码。
关系模式可表示为 R(U,D,DOM,F)。其中R为关系名,U 为组成该关系的属性名集合,D 为属性组U中属性所来自的域,DOM 为属性和域的映射,F 为属性间数据的依赖关系集合。
数据库的关系模型中有三类完整性,实体完整性、参照完整性和用户定义完整性。关系模型的完整性规则是对关系的某种约束条件。
关系代数用到的运算符包括四类 集合、算术、关系和逻辑。
关系有三种类型 ,基本关系、查询表和视图表。
删除表SA上的SA_Count触发器:DROP TRIGGER SA_Count ON SA;
数据库中建立索引的目的是为了加快存取速度。
聚合函数中不忽略空值的是 count(*)。
参照完整性:属性或属性组F是基本关系的R的外码,它与基本关系S的主码K相对应,则对于R中每个元组在F上的值必须为 空值、等于S中某个元组的主码值(外码要么为空,要么对应另一表主码的有效值)。不同于实体完整性和用户定义完整性,不满足只会拒绝;参照完整性会有不同的违约处理。
实体完整性:主码唯一且非空。
用户定义完整性:自己写的信息数据要完整,自定义数据范围。(非空、列值唯一、满足某一个条件表达式(check))
主属性是指包含在任何一个候选码中的属性。在关系模式中,候选码是用于唯一标识元组的一组属性。若一个关系有多个候选码,则选中一个为主码。候选码具有以下特点:
- 唯一性:候选码中的属性组合能够唯一标识关系中的每个元组,因此候选码中的所有属性都是主属性。
- 最小性:候选码中的属性组合是最小的,也就是说,去掉其中任何一个属性,剩下的属性组合就不再能唯一标识关系中的每个元组。
超码是一组属性的集合,它可以唯一地标识关系模式中的每一个元组。超码可能包含多余的属性,即使去掉一些属性后仍然能够唯一标识元组。超码的特点是:
- 唯一性:超码中的属性组合能够唯一标识关系中的每个元组。
- 不一定最小:超码可能包含多余的属性。
换句话说,候选码是最小的超码。
非主属性:不包含在任何一个候选码中的属性。
外码:关系模式 R 中,若有一个属性或者属性组 X,他不是 R 的码,但 X 是另一个关系模式S 中的 码,称 X 是 R 的外码。
全码:最极端情况下,整个属性组都是码,称为全码。
假设有一个关系模式R(A, B, C, D),并且函数依赖集为F={A→B, C→D},我们可以分析其主属性、候选码和超码。
- 确定候选码:我们需要找出能唯一标识元组的最小属性集。
- 假设A是候选码,则A→B。
- 如果A和C组合在一起,假设(A, C)是候选码。
- 需要验证是否有更小的组合能唯一标识元组。
如果我们发现(A, C)是唯一能标识元组的组合,并且没有更小的组合能做到这一点,则(A, C)是候选码。
- 主属性:在这个例子中,候选码是(A, C),因此A和C都是主属性。
- 超码:任何包含(A, C)的属性集都是超码,例如(A, C, B),(A, C, D)等。
第三章
-- 范围确定
Ssex char(2), # 或者是 Ssex char(1)
-- 具体 SQL 语句详解见 P81~P127
-- 为用户 wang 定义一个 学生-课程 模式 s-t
create schema "s-t" authorization wang;
-- 删除模式并且 使用级联删除
drop schema s-t cascade
-- 建表
create table table1 (
Sno varchar(10),
Cno varchar(10),
Grade int not null, # not null / unique / check / primary key
primary key(Sno, Cno), # primary xxx / foreign xxx
foreign key(Sno) references table2(Sno)
);
-- 选择
select name, age
from users
where age >= 18
group by 列名
having avg(grade) > 80
order by age desc
-- 连表
select student.*, sc.*
from student, sc
where student.sno = sc.cno;
第四章
数据库的安全性是指保护数据库,防止未经授权的或不合法的使用造成的数据泄漏、更改破坏。
强制存取控制 (MAC): 每一个数据对象被强制标以一定的密级,每一个用户也被强制授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。
自主存取控制 (DAC)(grant、revoke): 每一个数据对象的访问权限由拥有者(创建者)设定,用户可以自由地将其权限授予其他用户。
- grant 授予权限(并具有赋予其他用户授权的权力):GRANT SELECT ON 职工,部门 TO 王明 (WITH GRANT OPTION;);
- revoke 撤销权限:REVOKE INSERT,DEIETE ON 职工,部门 FROM 李勇;
用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权力,他不能查看每个人的工资。
首先建立一个视图。(视图机制)
CREATE VIEW 部门工资 AS SELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资) FROM 职工,部门 WHERE 职工.部门号=部门.部门号GROUP BY 职工.部门号;
然后对这个视图定义杨兰的存取权限
GRANT SELECT ON 部门工资 TO 杨兰;
实现数据库安全性控制的常用方法和技术有哪些?A. 用户标识和鉴别B. 存取控制C. 视图机制D. 审计E. 数据加密
可以用带有聚合函数和GROUP BY子句的查询来定义视图,这种视图称为 分组视图。
数据字典通常包括 数据项、数据结构、数据流、数据存储和处理过程几部分。
当对某一表进行什么操作时,就会自动执行触发器所定义的 SQL 语句。A. INSERT B. DELETE C. UPDATE
数据库系统必须提供的数据控制功能:安全性、可移植性、并发控制。
数据库的完整性是指数据的正确性和相容性。
在数据系统中,对存取权限的定义称为授权。<- 安全性
第五章
在数据库系统中,保证数据及语义正确和有效的功能是 完整性控制。
一个表中只能设置一个主键约束。不能允许空值。可以将多个字段组合设置为主键。
为了保护数据库的实体完整性,当用户程序对主码进行更新使主码值不唯一时,DBMS就 拒接此操作。
完整性约束条件是指数据库中的数据应该满足的 语义约束条件。
第六章
关系规范化中的插入异常是指应该插入的数据未被插入。
删除异常:不该删除的数据被删除。
规范化过程主要为克服数据库逻辑结构中的插入异常,删除异常以及冗余度大的缺陷。
属性集B完全依赖于属性集A,且B是A的子集,那么我们称这种依赖关系为平凡依赖。
范式:
1NF:每个属性都是不可分割的数据项。
2NF:满足第一范式的前提下,每一个非主属性都完全依赖于码。不存在部分依赖。
3NF:码直接决定非主属性,不能间接决定。不存在传递依赖。
BCNF:每一个决定因素都包含码,在函数依赖集中,左边的都必须包含整个候选码。
BCNF消除了插入和删除异常。
sql 语句具有 数据定义、数据操纵、数据控制 的功能。
“X函数确定Y” 或 “Y函数依赖于X”,记作 X->Y。
在关系模式R(A,B,C,D)中,有函数依赖集F={B→C,C→D,D→A},则R能达到( )。
1NF要求每个属性值都是不可分割的原子值,即R中的所有属性A,B,C,D必须是原子值。如果假设R已经满足这个条件,那么R显然是1NF。
2NF在满足1NF的基础上,要求消除非主属性对码的部分函数依赖。要确定R是否达到2NF,我们需要找到R的候选码。
从函数依赖集F={B→C,C→D,D→A}来看,可以通过推导得出:
- B→C
- B→D(因为B→C,C→D)
- B→A(因为B→D,D→A)
所以B是一个候选码。因为B是唯一的候选码,所以R中的每个非主属性(A, C, D)都完全函数依赖于B,因此R满足2NF。
3NF在满足2NF的基础上,要求消除非主属性对码的传递函数依赖。对于3NF,除了没有部分依赖,还需要检查传递依赖:
- B→C
- C→D
- D→A
从中可以看到,存在传递依赖B→C→D和B→D→A,这意味着B(码)通过C和D传递决定了A和D。因此,R不满足3NF。
BCNF在满足3NF的基础上,要求每个非平凡函数依赖的左边都是超码。对于BCNF:
- B→C
- C→D
- D→A
其中C→D和D→A的左边(C和D)都不是超码。因此,R不满足BCNF。
总结:
- R满足1NF和2NF。
- R不满足3NF和BCNF。
因此,R能达到的最高范式是2NF。
最小函数依赖集。
无损连接性:
数据依赖是通过一个关系中属性间值的相等与否体现出来的数据的相互联,体现数据语义,是一个关系内部属性与属性之间的一种约束关系,是数据内在的性质。
第七章
数据库设计步骤:
- 需求分析(数据字典、用户需求说明等)
- 概念结构设计(E-R图)
- 逻辑结构设计(设计关系、将E-R图转为逻辑结构(数据库模式和外模式))
- 物理结构设计(关系模型选择存取方法,索引等)
- 数据库实施(建立数据库结构、试运行、装入数据、系统调试)
- 数据库运行和维护
从E-R模型关系向关系模型转换时,一个M∶N联系转换为关系模型时,该关系模式的关键字是M端实体关键字与N端实体关键字组合。
关系的描述称为关系模式。
当局部E-R图合并成全局E-R图时可能出现冲突,属于合并冲突的有属性冲突、结构冲突、命名冲突。
并发控制中,冲突操作是指不同的事务对同一个数据的读写操作和写写操作。
下图所示的E-R图转换成关系模型,可以转换为( 3 )个关系模式。
为了将这个E-R图转换为关系模型,我们需要为每个实体创建一个表,并为多对多关系创建一个额外的表。
具体的转换如下:
- 借书人表(Borrower Table):
- 主键:借书证号(Borrower ID)
- 其他属性:姓名(Name)、单位(Unit)
- 图书表(Book Table):
- 主键:总编号(Total Number)
- 其他属性:分类号(Classification Number)、书名(Book Name)、作者(Author)、价格(Price)
- 借阅表(Borrow Table):
- 复合主键:借书证号(Borrower ID)、总编号(Total Number)
- 其他属性:借阅日期(Borrow Date)
因此,E-R图可以转换为 3 个关系模式,这包括:
- 借书人表
- 图书表
- 借阅表(关系表)
第十章
事务是恢复的基本单位,也是并发控制的基本单位。
事务故障恢复和系统故障恢复必须用 日志 文件。
静态转储 是在系统中无运行事务时进行的转储操作。
事务通常是以 BEGIN TRANSACTION 开始,以 COMMIT或ROLLBACK 结束。
若X→Y,则X称为这个函数依赖的决定属性组,也称为 决定因素。
事务运行中发生了故障,需要回滚(rollback),即撤销操作。
事务的4个特性(ACID):原子性,一致性,隔离性,持续性
①原子性:一个事务要么全做,要么全不做
②一致性:事务执行的结果必须一致。如果一个事务被迫中断,即事务中的一些操作做了,剩下的还没做,且做了
的对数据库造成的修改已经存入物理数据库的话,就会造成数据库处于不一致的状态。因此事务要么全做,要么全
不做,一致性和原子性是密切相关的
③隔离性:一个事务的执行不能被其他事务干扰
④持续性(也称为永久性):一个事务一旦提交,它对数据库中数据的改变应该是永久性的
数据库系统的故障种类:事务内部的故障、系统故障、介质故障、计算机病毒。
若在运行过程中由于某种原因造成系统停止运行,致使事务的执行过程中以非控制方式终止,这时内存中的信息丢失,而存储在外存上的数据未受影响,这种情况称为系统故障。
数据库恢复技术:数据转储、登记日志文件
如下两个事务T1、T2,其并发操作带来的问题类型为 丢失修改。
T1 | T2 |
---|---|
①读A=10 ② ③A=A-5写回 ④ | 读A=10 A=A-8写回 |
T1 将 A 改为 5, 而T2 将 A 的值改为 2,所以T1 的修改不再生效。
第十一章
事务的执行方式:
- 串行:每一时刻只有一个事务运行
- 交叉并发方式:并行事务的并行操作轮流交叉运行
- 同时并发方式:多处理机可以运行一个事务,多处理机可以同时运行多个事务
当多个用户并发的存取数据库时,就会产生多个事务同时存取同一个数据的情况。此时若不加以控制,就会存取不正确的数据,破坏事务和数据库的一致性。并发控制可以防止数据的不一致性出现。
数据不一致性的分类:
- 丢失修改:两个事务T1、T2读入同一个数据并修改。T2提交的结果覆了T1提交的结果,导致T1的修改丢失。
- 不可重复读:事务T1读取数据后,事务T2执行更新操作,使得T1无法再现前一次的读取结果
- 读脏数据:事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1被撤销,这时T1修改过的数据恢复原值,T2读到的数据与数据库中的数据不一样(脏数据即不正确的数据)
相应解决方案:
- 数据丢失修改:只加x锁,一开始就要加
- 不可重复读:修改前加x锁,读前加s锁,读完修改完释放锁
- 读脏数据:和不可重复读一样,但是是提交完才释放锁(一般存在 commit 和 rollback)
一般来说,操作前面都是加锁操作,等待前面也是加锁操作,操作完就是释放锁和commit
并发控制的方法:封锁(X 锁、S 锁)
(1)X锁:写锁 / 排他锁,某事务对数据对象上锁后,可读取和修改该数据对象,其他事务不可再对该数据添加锁
表示方法:上锁 Xlock()释放锁 Unlock()
(2)S锁:读锁 / 共享锁,某事务对数据对象上锁后,可读但不可修改该数据对象,其他事务可以对该数据对象添加S锁,但不能添加 X 锁
表示方法:上锁 Slock()释放锁 Unlock()
封锁协议:
- 一级封锁协议:事务在修改数据之前必须先对其加 X 锁,直至事务结束才释放,可以防止丢失修改
- 正常结束:COMMIT
- 非正常结束:ROLLBACK
- 二级封锁协议:在一级封锁协议基础上,增加事务在读取之前必须对其加 S 锁,读完后即可释放 S 锁,可以防止丢失修改和读脏数据(短锁)
- 三级封锁协议:在一级封锁的基础上,增加事务在读数据之前必须加 S 锁,直至事务结束才释放(长锁)
可串行化调度:多个事务的并发执行是正确的 / 正确调度 / 可串行化。当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。
冲突操作是指不同事务对同一数据的读写操作和写写操作。
DBMS普遍采用封锁方法来保证调度的正确性。
避免活锁的简单方法是采用先来先服务的策略。事务遵守两段锁协议是可串行化调度的充分条件。
关系模式R(P,W,A)中,属性P表示演奏者、W表示作品、A表示听众,若一个演奏者可以演奏多个作品、某一个作品可被多个演奏者演奏、听众也可以欣赏不同演奏者的不同作品,则该关系的码为(D)。
A.(P,W) B.(P,A)
C.(W,A) D.(P,W,A)
为了确定关系模式的码,我们需要找到能够唯一标识关系中的元组的最小属性集。显然,只有当我们同时知道演奏者(P)、作品(W)和听众(A)时,我们才能唯一地标识一个元组。例如,同一个听众可能欣赏同一位演奏者演奏的不同作品,因此仅凭 P 和 A 不能唯一确定一个元组;同理,仅凭 P 和 W 或 W 和 A 也不能唯一确定一个元组。