内模式也称为存储模式, 一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
模式也称为逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。一个数据库只有一个模式,模式位于三级结构的中间层。
外模式也称为用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的 局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。 外模式是模式的子集,一个数据库可以有多个外模式。
两层映射,分别为外模式/模式映射、模式/内模式映射。
同一个模式可以有任意多个外模式。对于每一个外模式,数据库系统都有一个外模式/模式映射。当模式被改变时,数据库管理员对各个外模式/模式映射做相应的改变,可以使外模式保持不变。这样,依据数据外模式编写的应用程序就不用修改, 保证了数据与程序的逻辑独立性。
模式/内模式的映射是唯一的,它定义了数据库的全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构被改变时,数据库管理员对模式/内模式映射做相应的改变,可以使模式保持不变,应用程序相应地也不做变动。这样, 保证了数据与程序的物理独立性。
数据独立性,数据独立性包括数据的物理独立性和数据的逻辑独立性。
约束:数据类型, not null, check, unique,datatype,primary key, foreign key,函数依赖等
超键:在关系中能唯一标识元组的属性集称为关系模式的超键
候选键:不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
主键:用户选作元组标识的一个候选键程序主键.
外键:如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键.
关系:一个关系对应通常说的一张表。
属性:表中的一列即为一个属性,给每一个属性起一个名称,即属性名。
元组:表中的一行即为一个元组
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的
Select : where, two relation join, subquery, like, Group by/ having
特例化/一般化。
实体:数据模型中的数据对象,例如人、学生、音乐都可以作为一个数据对象,用长方体来表示。
属性:即数据对象所具有的属性,例如学生具有姓名、学号、年级等属性,用椭圆形表示,属性分为唯一属性(unique attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来讲实体都至少有一个唯一属性。
关系:用来表现数据对象与数据对象之间的联系,例如学生的实体和成绩表的实体之间有一定的联系,每个学生都有自己的成绩表,这就是一种关系,关系用菱形来表示。
1:1:1对1关系是指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。
1:N:1对多关系是指实体集A与实体集B中至少有N(N>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。
M:N:多对多关系是指实体集A中的每一个实体与实体集B中至少有M(M>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少N(N>0)个实体有关系。
强实体:其实例的存在不依赖于任何其他实体类型的实例;有自己独立的主键,唯一性地标识它的每个实例。
弱实体:其实例的存在依赖于其它实体类型的实例;其主键包括它所依赖的实体类型的主键。
弱实体和强实体总结:依赖,弱实体应该依赖于强实体;主键,弱实体的主键应该是组合主键(其他实体的主键组成的)。
ACID特性含义、举例
并发控制:必要性、并发操作可能引起的问题(举例说明或能分析)、如何利用封锁解决这几类问题(3级封锁协议及能解决的问题种类)
事务:逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
ACID:
原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。
一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。
隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
并发控制可能会引起的问题:
脏读:一个事务读取了另外一个事务未提交的数据
不可重复读:一个事务内读取表中的某一行数据,多次读取结果不同。
虚读(幻读):一个事务内读取到了别的事务插入的数据,导致前后读取不一致
封锁:
Serializable(串行化):可避免脏读、不可重复读、虚读情况的发生。
Repeatable read(可重复读):可避免脏读、不可重复读情况的发生。
Read committed(读已提交):可避免脏读情况发生。
Read uncommitted(读未提交):最低级别,以上情况均无法保证。
分类:事务故障、系统故障、介质故障
事务故障:事务内部故障可分为预期的和非预期的,其中大部分的故障都是非预期的。预期的事务内部故障是指可以通过事务程序本身发现的事务内部故障;非预期的事务内部故障是不能由事务程序处理的,如运算溢出故障、并发事务死锁故障、违反了某些完整性限制而导致的故障等。
系统故障:系统故障也称为软故障,是指数据库在运行过程中,由于硬件故障、数据库软件及操作系统的漏洞、突然停电灯情况,导致系统停止运转,所有正在运行的事务以非正常方式终止,需要系统重新启动的一类故障。这类事务不破坏数据库,但是影响正在运行的所有事务。
介质故障:介质故障也称为硬故障,主要指数据库在运行过程中,由于磁头碰撞、磁盘损坏、强磁干扰、天灾人祸等情况,使得数据库中的数据部分或全部丢失的一类故障。
日志文件的作用:redo\uodo含义;日志文件登记的遵守2条原则
日志文件的作用:用来记录MySQL数据库的客户端连接情况、SQL语句的执行情况以及错误信息告示。
redo\uodo含义:Undo日志记录某数据被修改前的值,可以用来在事务失败时进行rollback;Redo日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据。
原则: (1)登记的次序严格按并发事务执行的时间次序。
(2)必须先写日志文件,在写数据库。
故障恢复步骤:事务故障、系统故障、介质故障
事务故障恢复:
反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新操作。
对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
继续反向扫描日志文件,做同样处理。
如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。
系统故障恢复:
正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
对撤销队列中的各个事务进行UNDO处理。进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
对重做队列中的各个事务进行REDO处理。进行REDO处理的方法是,正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作,即将日志记录中“更新后的值”写入数据库。
介质故障恢复:
重装数据库,然后重做已完成的事务。
函数FD:候选键就是完全函数依赖(最小属性集, 主属性)
超键是部分函数依赖(存在子集同样可以函数决定,存在非受控冗余)
函数闭包:在关系模式 R 中为 F 所逻辑蕴含的函数依赖的全体;F的完全集:F+ (包含所有被逻辑蕴含的FD)
如何求候选键:
首先对于给定的R(U)和函数依赖集F,可以将它的属性划分为4类:
L类,仅出现在F的函数依赖左部的属性。
R类,仅出现在F的函数依赖右部的属性。
N类,在F的函数依赖左部和右部均未出现的属性。
LR类,在F的函数依赖左部和右部两部均出现的属性。
根据以下定理和推论来求解候选码。
定理1:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员。
推论1:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选码。
定理2:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选码中。
定理3:设有关系模式R及其函数依赖集F,如果X是R的N类属性,则X必包含在R的任一候选码中。
推论2:对于给定的关系模式R及其函数依赖集F,如果X是R的N类和L类组成的属性集,且X+包含了R的有属性,则X是R的唯一候选码。
关系规范化判断:1NF、2NF、3NF、BCNF
1NF:强调属性的原子性。即属性不可再分。
2NF:第二范式必须满足第一范式。
第二范式是指每个关系必须有一个(有且仅有一个)数据项作为主键,其他数据项与主键一一对应,即其他数据项完全依赖于主键。由此可知单主属性的关系均属于第二范式。
3NF:非主属性既不传递依赖于码,也不部分依赖于码。
理解:即在第二范式的基础上,消除了非主属性对码的传递依赖。
BCNF:所有属性都完全依赖于码,每一个决定因素都包含码。
理解:一个满足BC范式的关系模式有:
1.所有非主属性对每一个码都是完全函数依赖;
2.所有主属性对每一个不包含它的码也是完全函数依赖;
3.没有任何属性完全函数依赖于非码的任何一组属性。
关系的分解:无损连接分解判断方法、保持函数依赖分解判断;如何分解关系