数据库课程复习总结



1.DBMS的主要功能:
  (1)数据定义功能  提供数据定义语言(DDL),定义数据库中的数据对象
  (2)数据的组织、存储、管理  提高存储空间的利用率和方便存取,提供多种存取方法来提高存取效率
  (3)数据操纵功能  提供数据操纵语言(DML),实现对数据库的基本操作(查询、插入、删除、修改)
  (4)数据库的事务管理和运行管理  保证数据的安全性、完整性,多用户对数据的并发使用,发生故障后的系统恢复
  (5)数据库的建立和维护功能  数据库的批量装载,数据库转存,介质故障恢复,数据库的重新组织,性能监视等


数据库的三级模式:外模式--->模式---->内模式


数据库的模式结构
内模式:一个数据库只有一个内模式,内模式也称存储模式,是数聚物理结构和存取方式的描述,是数据库内部的表示方式
记录的存储方式(如顺序存储,按照B树结构存储,按hash方法存储等)
索引的组织方式
数据是否压缩存储
数据是否加密
数据存储记录结构的规定


模式也称逻辑模式或者概念模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,
综合了所有用户的需求一个数据只有一个模式


模式的地位:是数据库系统模式结构的中间层,与数据的物理存储细节和硬件环境无关,与具体的应用程序
开发工具及高级语言程序有关


模式的定义
数据的逻辑结构(数据项的名字、类型、取值范围等)
数据之间的联系
数据有关的安全性、完整性要求


外模式
也称子模式或者用户模式,是数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述。是数据库用户的
数据视图,是与某一应用有关的数据逻辑表示


外模式的地位:介于模式与应用之间,通常是模式的子集(一对多)。一个数据库可以有多个外模式。反映了不同的用户的应用需求、
看待数据的方式、对数据保密的要求


对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同,同一外模式可以为某一用户的多个应用系统所使用,
但一个应用程序只能使用一个外模式。


外模式的用途 保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据


三级模式和二级映像


外模式/模式映像  
定义模式和外模式之间的对应关系
每一个外模式都对应一个外模式/模式映像
映像定义通常包含在各个外模式的描述中


外模式/模式映像的用途
保证数据逻辑独立性
当模式改变时,数据库管理员修改有关的外模式/模式映像,是外模式保持不变
应用程序是基于外模式编写的,从而应用程序不必修改,保证数据与应用程序的逻辑独立性,简称数据的逻辑独立性


模式/内模式映象
定义了数据全局逻辑结构与存储结构之间的对应关系。
eg,说明逻辑记录和字段在内部是如何表示的
数据库中的模式/内模式映象是唯一的
该映象定义通常包含在模式描述中


模式/内模式映象的用途
保证数据的物理独立性
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式结构。是模式保持不变
应用程序不受影响,保证数据与程序的物理的独立性,简称数据的物理独立性


数据模型
在数据库中
,数据模型被用来对现实世界中的数据和信息进行抽象、表示和处理


数据模型是用户对现实世界的视图与计算机存储二进制数据的桥梁


数据模型是数据库系统的核心和基础


数据模型的三方面要求:
能比较认真的模拟现实世界
容易为人所理解
便于在计算机上实现




数据模型的组成要素
数据结构
描述数据库的组成对象以及对象之间的联系,是刻画数据模型性质最重要的方面(按数据结构命名数据模型),是对系统静态特性的表述。
数据操作
指该数据结构上的各种实例允许操作的集合,包括相关的操作规则,是对系统动态特性的描述
数据的约束条件
指该数据结构上的各种实例允许操作的集合,包括相关的操作规则,是对系统动态特性的描述




数据模型:逻辑模型和物理模型


逻辑模型 层次模型、网状模型、关系模型、面向对象的模型、对象关系模型


关系模型中的基本概念
关系模型的基本概念
关系(Relation)一个关系对应通常说的一张表。
元组(Tuple)表中的一行即为一个元组。
属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称,即属性名。
分量  元组中的一个属性值。


域(Domain)
属性的取值范围。
关系模式
对关系的描述 关系名(属性1,属性2,…,属性n)
学生(学号,姓名,年龄,性别,系,年级)
关键字或码(Key)
表中的某个属性组,它可以唯一确定一个元组。
候选关键字或候选码
多个属性组都能够唯一确定一个元组


主键或主码(primary  Key)
若干候选码中指定作为关键字的属性组。
主属性和非主属性
主属性:包含在任何候选关键字中的各个属性
非主属性:不包含再任何一个候选码中的属性
外键或外码
某个属性,不是本关系的主码,却是另一个关系的主码


关系模型的完整性约束
实体完整性 
  实体完整性要求每一个表中的主键字段都不能为空或者重复的值。
参照完整性(一个属性是外码的话要么是空,要么是那个关系中的属性值)
  如果属性(组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R与S不一定是不同的关系),则对于R中的每个元组在F上的值必须为:或者取空值(F的每个属性都为空);或者等于S中某个元组的主码值。
用户自定义完整性 
  由用户根据实际情况对数据库中数据库中的数据的内容进行的规定,这些约束条件就是用户根据需要自己定义的。eg性别属性只有男和女


关系数据结构
域:具有相同数据类型的值的集合


关系:D1 × D2 ×.... × Dn的子集叫做在域D1,D2,...,Dn上的关系。记为:R(D1,D2,...,Dn)其中:
R—表示关系名
n —称为关系的目或度,1单元关系,2二元关系
t  —表示关系中的元组。


元组:关系是笛卡尔积的有限子集,所以是一个二维表,表的每行对应一个元组,每列对应一个域。


属性:域可以相同,为了区分域,必须对每列起一个名字,称为属性(Attribute)。


候选码(Candidate key) :若关系中的某一(最小)属性组的值能唯一地标识一个元组,则该(最小)属性组称为候选码。


主码(Primary key) :若关系中有多个候选码,则选定其中的一个为主码。


主属性(Prime attribute):候选码的诸属性称为主属性。


非主属性(Nonprimary attribute):不被任何候选码包含的属性。


全码(All-key):关系模式的所有属性都是这个关系模式的候选码


关系的类型
基本关系 通常称为基本表或基表,实际存在的表,实际存储数据的逻辑表示
查询表  查询结果对应的表
视图表  由基本表或其他视图导出的表,称为虚表 不对应实际存储的数据


关系的性质
1.列是同质的,列的属性值是同一类型的数据,来自同一个域
2.不同的列可出自同一个域,每一列称为一个属性,每个属性必须有不同的属性名,属性名可以表示不同的属性
3.列的顺序可以任意交换
4.任意两个元组不能完全相同,由主键标识
5.元组的顺序可以任意交换
6.分量必须取原子值,即每一个分量必须是不可分的数据项,不允许表中有表的情况


关系实例是个表,关系模式是描述表的列头信息


关系模式:
描述关系的名字,每个field (或column或attribute)和每个field的域(domain).在关系模式中,域由域名和与之相关的一组值相关。
关系实例:
是元组的集合,这些元组也叫做记录,每个元组有与模式相同数目的列。由于每个元组是一个行,所有行有相同的列,因此关系实例可以被认为是一个表。当不混淆时,关系实例简称关系。


关系模式:对关系的描述称为关系模式。可以形式化的表示为:R(U,D,dom,F)
其中:
R:关系名
U:组成关系的属性名集合
D:属性来自的域
dom:属性到域的映射
F:属性间数据的依赖关系
简记:R(U),或者R(A1,A2,…An)




关系模型的完整性规则是对关系的某种约束条件


实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。


外码:
设F是基本关系R的一个或一组属性,但不是关系的码。若F与基本关系S的主码Ks相对应,则称F是基本关系的外码。基本关系R为参照关系,S为被参照关系或目标关系


象集的概念


DML 数据库操纵语言


常用完整性约束
1.主码约束: primary key
2.唯一性约束:unique
3.非空值约束:not null
4.参照完整性约束:foreign key


create table Course(
Cno varchar(10) primary key,
Cname varcha(20) not null,
Cpno varchar(2),
foreign key (Cpno) references Course(Cno) //声明外键参照关系
);
create table XSS(
学号 varchar(12) primary key,
姓名 varchar(10) not null,
性别 varchar(2) constraint check_sex CHECK(性别 in ('男','女'))
);
create table SC(
Sno varchar(7),
Cno varchar(4),
primary key (Sno,Cno),
foreign key (Sno) references student(Sno)
);


创建表
create table 表名(
列名(属性) 类型  约束,
列名(属性) 类型  约束,
....,
约束1,
约束2
);
constraint 为约束指定别名
eg:
--建表时指定了约束名
CREATE TABLE tb_constraint_2
(
empno NUMBER CONSTRAINT pk_tb_cons2_empno PRIMARY KEY,
ename VARCHAR2(20) CONSTRAINT nn_tb_cons2_empno NOT NULL,
email VARCHAR2(60) CONSTRAINT un_tb_cons2_email UNIQUE,
sal   NUMBER(5) CONSTRAINT ck_tb_cons2_sal CHECK(sal>1500),
deptno NUMBER(4) CONSTRAINT fk_tb_cons2_dept REFERENCES tb_dept(deptno)
);


删除基本表:
drop table 表名;


修改基本表:添加列
alter table 表名
ADD 列名 类型;
//添加约束
alter table 表名 
ADD constraint ph primary key student(Sname);//ph约束的别名


删除表的约束:
alter table 表名
drop constraint ph primary key student(Sname);
drop unique(sname)


//改变列的数据类型
alter table 表名
alter column 列名 新类型;


//插入元素
insert into 表名(列名) values (...);
如果全部一个正行
insert into 表名 values (...);
insert into Student values ('95020','陈东','男','IS','18');
insert into SC(Sno,Cno) values ('95020','1');


update student set Sage=22 where Sno='95001';


DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有学生的选课记录
delete from SC;


消除重复元素 distinct 全部 all


where语句常用的查询条件
查询条件 谓词
比较 =,>,<,>=,<=,!,=!,<>,!<,!>
确定范围 between..and...,not between..and...
确定集合 in,not in
字符匹配 like,not like
空值 is null,is not null
多重条件 and,or


Like:
当匹配模板为固定字符串时
用=运算来代替LIKE 用!= 或<> 代替not LIKE


模糊查询
% (百分号)  代表任意长度(长度可以为0)的字符串
_ (下横线)  代表任意单个字符
当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE '<换码字符>' 短语对通配符进行转义。


查询DB_Design课程的课程号和学分
select Cno,Ccredit from Course 
where Cname LIKE 'DB\_Design' ESCAPE '\';


使用ORDER BY子句
可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
ASC:排序列为空值的元组最后显示
DESC:排序列为空值的元组最先显示 
order by 列名 [ASC|DESC]


聚集函数的查询


使用GROUP BY子句分组
细化聚集函数的作用对象
未对查询结果分组,聚集函数将作用于整个查询结果
对查询结果分组后,聚集函数将分别作用于每个组 
只有满足HAVING短语指定条件的组才输出 


分组方法:按指定的一列或多列值分组,值相等的为一组
使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和聚集函数


查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数
select Sno,count(*) from sc where Grade>90 group by Sno having count(*)>3


having和where的区别 作用对象不同
WHERE子句作用于基表或视图,从中选择满足条件的元组。
HAVING语句作用于组,从中选择满足条件的组


SQL中连接查询的主要类型
广义笛卡尔积
等值连接(含自然连接)
非等值连接查询
自身连接查询
外连接查询
复合条件连接查询


select student.* ,sc.* from student,sc where student.sno=sc.sno


自身连接 一个表与其自己进行连接,称为表的自身连接
需要给表起别名以示区别
由于所有属性名都是同名属性,因此必须使用别名前缀
select FIRST.Cno, Second.Cpo from Course FIRST ,Course Second where FIRSE.Cpo=Second.Cno


外连接
外连接与普通连接的区别
普通连接操作只输出满足连接条件的元组
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出


select student.* ,sc.* from student left join sc where student.sno=sc.sno


子查询的限制:不能使用ORDER BY子句


带有ANY或ALL谓词的子查询
ANY:任意一个值
ALL:所有值
配合使用比较运算符的含义
> ANY 大于子查询结果中的某个值       
> ALL 大于子查询结果中的所有值
< ANY 小于子查询结果中的某个值    
< ALL 小于子查询结果中的所有值
>= ANY 大于等于子查询结果中的某个值    
>= ALL 大于等于子查询结果中的所有值
<= ANY 小于等于子查询结果中的某个值    
<= ALL 小于等于子查询结果中的所有值
= ANY 等于子查询结果中的某个值        
=ALL 等于子查询结果中的所有值(没有实际意义)
!=(或<>)ANY 不等于子查询结果中的某个值
!=(或<>)ALL 不等于子查询结果中的任何一个值


相关子查询和不相关子查询


不相关子查询 子查询的查询条件不依赖于父查询 处理方式:
由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。


相关子查询 子查询的查询条件依赖于父查询 处理方式:
首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,
若WHERE子句返回值为真,则取此元组放入结果表;
然后再取外层表的下一个元组;
重复这一过程,直至外层表全部检查完为止


带有EXISTS谓词的子查询
EXISTS谓词
存在量词 
带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
若内层查询结果非空,则返回真值
若内层查询结果为空,则返回假值
由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义


集合查询
参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同
union 并
intersect 交
minus 差


对集合操作结果的排序
select × from student where Sdept='CS'
UNOIN
select * from studnet where Sage<=19
order by 1;
ORDER BY子句只能用于对最终查询结果排序,不能对中间结果排序
任何情况下,ORDER BY子句只能出现在最后
对集合操作结果排序时,ORDER BY子句中可用数字指定排序属性


视图是从一个或者几个基本表(或视图)导出的表


视图的特点
1.虚表,是从一个或几个基本表(或视图)导出的表
2.只存放视图的定义,不会出现数据冗余
3.基表中的数据发生变化,从视图中查询出的数据也随之改变


DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。


with check option
透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)


1.对于update,有with check option,要保证update后,数据要被视图查询出来 
2.对于delete,有无with check option都一样 
4.对于insert,有with check option,要保证insert后,数据要被视图查询出来 
对于没有where 子句的视图,使用with check option是多余的


从用户角度:查询视图与查询基本表相同
DBMS实现视图查询的方法
实体化视图(View Materialization)
有效性检查:检查所查询的视图是否存在
执行视图定义,将视图临时实体化,生成临时表
查询视图转换为查询临时表
查询完毕删除被实体化的视图(临时表)
视图消解法(View Resolution)
进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义
把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询
执行修正后的查询


指定WITH CHECK OPTION子句后 DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新


视图的作用
1. 视图能够简化用户的操作 当视图中数据不是直接来自基本表时,定义视图能够简化用户的操作
基于多张表连接形成的视图
基于复杂嵌套查询的视图
含导出属性的视图
2. 视图使用户能以多种角度看待同一数据 视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要
3.视图对重构数据库提供了一定程度的逻辑独立性
4. 视图能够对机密数据提供安全保护 对不同用户定义不同视图,使每个用户只能看到他有权看到的数据
5.适当的利用视图可以更清晰的表达查询


建立索引是加快查询速度的有效手段


建立索引的语法
create [unique|cluster] index 索引名 on 表名(列名);
用<表名>指定要建索引的基本表名字
索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER表示要建立的索引是聚簇索引


唯一值索引:
对于已含重复值的属性列不能建UNIQUE索引
对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束


聚簇索引
在一个基本表上最多只能建立一个聚簇索引
聚簇索引的用途:对于某些类型的查询,可以提高查询效率
聚簇索引的适用范围
很少对基表进行增删操作
很少对其中的变长列进行修改操作 


删除索引
drop index 索引名


grant授权


数据库设计
需求分析--概念结构分析---逻辑结构设计---物理设计----实施阶段---运行维护


数据字典是各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要结果,在数据库设计中占有很重要的地位。


数据字典的内容:
数据项
数据结构
数据流
数据存储
处理过程


数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构


数据字典通过对数据项和数据结构的定义来描述数据流,数据存储的逻辑内容


概念模型:
基本概念
实体  属性  码 域 实体型 实体集 联系
实体集  同型试题的集合
联系 不同实体间的联系
一对多
一对一
多对多


实体的概念:
客观存在并可以相互区别的事物成为实体,可以是具体的人,事,物或抽象的概念


属性的概念
实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画


码的概念
唯一标识实体的属性集称为码



属性的取值范围


实体型
用实体名及其属性名集合来抽象和刻画,同类的实体称为实体型


实体集
同型实体的集合称为实体集


联系
现实世界中的事物内部以及事物之间的联系在信息世界中的反映称为实体内部的联系和实体之间的联系


概念模型用ER图表示
实体-联系(E-R模型)图 世界有一组称为实体的基本对象及这些对象之间的联系组成


ER模型基本概念
属性的划分
简单属性/复合属性
--简单属性不能再划分为更小部分的属性
--复合属性可以再划分为别的属性的属性
单值属性/多值属性
--单值属性对一个特定的实体而言一个属性只有单独的一个值
--多值属性对某个特定的实体来说,一个属性可以对应一组值
派生属性
这类属性可以从别的相关属性或实体派生出来


超码:是一个或多个属性的集合,该组合可以在该实体集中唯一标识一个实体。
候选码:它的任意真子集都不能成为超码。(最小超码)
主码:被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码。


一般原则
属性不能再具有需求的性质,即属性必须是不可分的数据项,不能再由另一些属性组成


属性不能与其他实体具有联系,联系只发生在实体之间


什么是数据依赖
数据依赖是关系中的属性值之间相互关系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
通俗的将,数据依赖体现了属性之间的对应关系,体现了属性之间的相关性。


平凡函数依赖和非平凡的函数依赖


完全依赖和部分依赖


根据属性数据依赖的情况,规范化理论采用范式来区分关系的规范化程度(1NF,2NF,3NF)


关系R属于第三范式,则R的每一个非主属性既不部分依赖于候选码也不传递函数依赖与候选码


DBMS常用的存取方法:
索引方法,主要是B+树索引的方法
聚簇方法
HASH方法


聚簇:
为了提高某个属性(属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇。


聚簇的作用
大大提高按聚簇属性进行查询的效率
节省存储空间


聚簇的局限性
聚簇只能提高某些特定应用的性能
家里与维护聚簇的开销相当大


即适用於单个关系独立的聚簇,也适用于多个关系组合聚簇


数据库试运行也称联合调试,其主要的工作包括
1.功能测试:实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能。
2.性能测试:测量系统的性能指标,分析是否符合设计目标




数据库的维护:
1.数据库的转储和恢复
2.数据库的安全性,完整性控制
3.数据库性能的监督,分析和改进
4.数据库的重组织和重构造


事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分的工作单元


事务是恢复和并发控制的基本单位


事务的特性:
ACID
原子性 Atomicity
一致性 Consistency
隔离性 Isolation
持续性 Durability
原子性:事务是数据库的逻辑工作单元
事务中包括的诸操作要么都做,要么都不做
一致性:事务执行的结构必须是使数据库从一个一致性状态变到另一个一致性状态
一致性状态:数据库中只包含成功事务提交的结果
不一致状态:数据库中只包含失败事务的结果
隔离性:对于并发执行而言
一个事务的执行不能被其他事务干扰
一个事务内部的操作及使用的数据库对其他的并发事务是隔离的
并发执行的各个事务之间不能互相干扰
持续性也称永久性
一个事务一旦提交,它对数据库中的数据的改变就应该数永久的。
接下来的其他操作或故障不应该对其执行结果有任何影响


并发操作的潜在的不一致性
丢失修改
不可重复读
读“脏”数据


封锁
排他锁
共享锁


封锁协议
1级封锁协议
事务在修改数据R之前必须先对其加X锁,值到事务结束才释放
正常结束(COMMIT)
非正常结束(ROLLBACK)
1级封锁协议可防止丢失修改


封锁粒度
封锁对象:逻辑单元和物理单元
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章