精华内容
下载资源
问答
  • 主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这第2)相矛盾,因此这个规则称为实体完整性。 实体完整性规则规定基本关系的所有主属性都不能取空值。 外码 定义:设F是基本关系R的一个...

    单一的数据结构–关系
    现实世界的实体以及实体间的各种联系均用关系来表示
    逻辑结构–二维表
    从用户角度,关系模型中数据的逻辑结构是一张二维表,关系模型是建立在集合代数的基础上。
    单一的数据结构–关系
    现实世界的实体以及实体间的各种联系均用关系来表示
    逻辑结构–二维表
    从用户角度,关系模型中数据的逻辑结构是一张二维表,关系模型是建立在集合代数的基础上。

    在这里插入图片描述

    笛卡尔积的表示方法:笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。
    D1,D2,…,Dn的笛卡尔积的子集不是都有实际含义,只有某个子集才有实际含义。

    关系
    1)关系
    D1×D2×…×Dn的子集称作在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)。
    R表示关系名,n表示关系的目或度。
    2)元组
    关系中的每个元素是关系中的元组,通常用t表示。
    3)单元关系与二元关系
    当n=1时,称该关系为单元关系或一元关系。
    当n=2时,称 该关系为二元关系。
    4)关系的表示
    关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域,一个属性。
    5)属性
    关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性。
    n目关系必有n个属性。
    6)码
    候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选
    码。
    简单的情况:候选码只包含一个属性。
    全码:最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码。
    主码:若一个关系有多个候选码,则选定其中一个为主码。
    主属性:候选码的诸属性称为主属性。
    非主属性:不包含在任何候选码中的属性或非码属性。
    7)三类关系
    ①基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示。
    ②查询表:查询结果对应的表。
    ③视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
    8)基本关系的性质
    ①列是同质的。
    ②不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名。
    ③列的顺序无所谓,列的次序可以任意交换。
    ④任意两个元组的候选码不能相同。
    ⑤行的顺序无所谓,行的次序可以任意交换。
    ⑥分量必须取原子值,这是规范条件中最基本的一条。

    2.1.2关系模式
    关系模式是对关系的描述。关系模式是型,关系是值。
    1)元组集合的结构
    属性构成、属性来自的域、属性与域之间的映像关系。
    2)一个关系通常由赋予它的元组语义确定。
    3)现实的世界中还存在着完整性约束。
    定义关系模式
    关系模式可以形式化地表示为:R(U,D,DOM,F)
    R:关系名
    U:组成该关系的属性名集合
    D:属性组U中属性所来自的域
    DOM:属性向域的映像集合
    F:属性间的数据依赖关系集合
    关系模式与关系
    关系模式是静态的、稳定的。
    关系是动态的、随时间不断变化的。
    关系是关系模式在某一时刻的状态或内容,在实际工作中关系模式和关系往往统称为关系,需要通过上下文加以区别。

    2.2关系数据结构
    2.2.1基本关系操作
    常用的关系操作
    查询:选择、投影、连接、除、并、交、差等,其中:选择、投影、并、差、笛卡尔积是5种基本操作。
    数据更新:插入、删除、修改。
    查询的表达能力是其中最主要的部分。
    关系操作的特点
    集合操作方式:操作的对象和结果都是集合,一次一集合的方式。

    关系的完整性
    关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义完整性。
    其中实体完整性、参照完整性是关系模型必须满足的完整性约束条件,成为关系的两个不变性,应该由关系系统自动支持。
    用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

    实体完整性规则的说明:
    1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
    2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
    3)关系模型中以主码作为唯一性标识。
    4)主码中的属性即主属性不能取空值。
    主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第2)点相矛盾,因此这个规则称为实体完整性。
    实体完整性规则规定基本关系的所有主属性都不能取空值。

    外码
    定义:设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。
    基本关系R称为参照关系
    基本关系S称为被参照关系
    关系R和S不一定是不同的关系。
    目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上。
    外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。

    参照完整性规则
    参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
    或者取空值(F的每个属性值均为空值);
    或者等于S中某个元组的主码值。

    展开全文
  • 【最全】《数据库原理应用知识点整理+习题

    千次阅读 多人点赞 2020-05-26 10:57:22
    目录 第1章 绪论 1.1术语 ...逻辑模型的分类(非关系模型关系模型) 画E-R图 数据库系统结构 第2章 关系数据库 2.1关系数据结构及形式化定义 2.2关系操作 2.3关系的完整性 2.4关系代数 选择 投影 ...

    目录

    第1章 绪论

    1.1术语

    1.2重要概念

    数据库管理技术的发展过程(三个阶段)

    数据模型(Data Model)

    逻辑模型的分类(非关系模型与关系模型)

    画E-R图

    数据库系统结构

    第2章 关系数据库

    2.1关系数据结构及形式化定义

    2.2关系操作

    2.3关系的完整性

    2.4关系代数

    选择

    投影

    连接

    第3章 SQL

    基本概念

    专有名词及解释

    数据定义

    1.创建/删除数据库

    2.创建/删除/修改基本表

    3.主键和外键

    4.建立索引

    数据查询

    单表查询

    连接查询

    嵌套查询

    集合查询

    数据更新

    插入数据

    修改数据

    删除数据

    视图

    第4章 数据库安全性

    专有名词及解释

    用户标识与鉴别(Identification & Authentication)

    存取控制

    自主存取控制

    强制存取控制

    第5章 数据库完整性

    实体完整性

    参照完整性

    用户自定义完整性

    触发器(Trigger)

    第6章 关系数据库理论

    规范化

    1NF:

    2NF:

    3NF:

    BCNF

    小结

    第7章 数据库设计

    需求分析

    概念结构设计

    逻辑结构设计

    数据库的运行与维护

    第9章 关系查询处理和查询优化

    查询处理步骤

    查询优化策略

    代数优化

    理优化

    第10章 数据库恢复技术

    事务的基本概念

    故障的种类

    恢复的实现技术及策略

    数据转储

    登记日志文件(Logging)

    恢复策略

    具有检查点的恢复技术

    第11章 并发控制概述

    封锁

    活锁和死锁

    并发调度的可串行性

    两段锁协议

    习题

    选择题

    简答题

    应用题


    第1章 绪论

    1.1术语

    1.数据(Data)

    数据是数据库中存储的基本对象。定义为描述事务的符号记录。数据的含义称为语义,数据与其语义是不可分的。

    2.数据库(DataBase,DB)

    长期存储在计算机内,有组织的,可共享的大量数据的集合。

    数据库基本特征:1.永久存储  2.有组织  3.可共享 4.冗余度小 5.易扩展

    3.数据库管理系统(DataBase Management System,DBMS)

    位于用户与操作系统之间的一层数据管理软件

    数据库管理系统和操作系统一样是计算机的基础软件。

    主要功能:提供数据定义语言(DDL)、数据操纵语言(DML)等

    4.数据库系统(DataBase System,DBS)

    数据库系统由数据库(DB),数据库管理系统(DBMS),应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。

    1.2重要概念

    数据库管理技术的发展过程(三个阶段)

    1.人工管理阶段:

    在计算机出现之前,人们运用常规的手段从事记录、存储和对数据加工,也就是利用纸张来记录和利用计算工具(算盘、计算尺)来进行计算,并主要使用人的大脑来

    管理和利用这些数据。

    特点:

    (1)计算机系统不提供对用户数据的管理功能;

    (2)数据不能共享;

    (3)不保存数据。

    2.文件系统阶段:

    在这一阶段(20世纪50年代后期至60年代中期)计算机不仅用于科学计算,还利用在信息管理方面。随着数据量的增加,数据的存储、检索和维护问题成为紧迫的需要,数据结构和数据管理技术迅速发展起来。此时,外部存储器已有磁盘、磁鼓等直接存取的存储设备。软件领域出现了操作系统和高级软件。操作系统中的文件系统是专门管理外存的数据管理软件,文件是操作系统管理的重要资源之一。

    特点:

    数据以“文件”形式可长期保存在外部存储器的磁盘上。由于计算机的应用转向信息管理,因此对文件要进行大量的查询、修改和插入等操作,这些操作由文件系统提供。   

    缺点:

    数据冗余;不一致性;数据独立性差。

    3.数据库系统阶段:

    20世纪60年代后期以来 ,计算机性能得到进一步提高,更重要的是出现了大容量磁盘,存储容量大大增加且价格下降。在此基础上,才有可能克服文件 系统管理数据时的不足,而满足和解决实际应用中多个用户、多个 应用程序共享数据的要求,从而使数据能为尽可能多的 应用程序服务,这就出现了数据库这样的数据管理技术。

    特点:

    (1)数据结构化。

    (2)数据共享性高、冗余少且易扩充。

    (3)数据独立性高。

    (4)数据由DBMS统一管理和控制。

     

    数据模型(Data Model)

    一、数据模型的分类

    1.概念模型

    按用户的观点来对数据和信息建模,主要用于数据库设计

    概念模型的表示方法很多,最常用的为实体-联系方法(Entity-Relationship approach),该方法用E-R图来描述概念模型。E-R方法也成为E-R模型

    2.逻辑模型和物理模型

    逻辑模型主要包括层次模型、网状模型、关系模型、面向对象模型和对象关系数据模型等,主要用于数据库管理系统的实现。

    物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方法和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。

    二、数据模型的组成要素

    数据模型通常由数据结构、数据操作和完整性约束三个部分组成。

    数据结构描述数据库的组成对象以及对象之间的联系,通常按其数据结构的类型来命名数据模型,例如层次结构、网状结构和关系结构的数据模型分别命名为层次模型、网状模型、关系模型。

    数据操作是指对数据库中各种对象的实例允许执行的操作的集合,包括操作及其有关的规则,主要分为查询和更新(插入、删除、修改)两大类操作。

    完整性约束条件是给定的数据模型中数据及其联系所具有的制约和依存规则,在关系模型中体现为实体完整性和参照完整性。例如,某大学的数据库中规定学生成绩如果有6门以上不及格则不能授予学士学位,教授的退休年龄是65周岁等。

    逻辑模型的分类(非关系模型与关系模型)

    非关系模型:层次模型(Hierarchical Model)、网状模型(Network Model)

    关系模型(Relational Model) 

    层次模型,满足下面两个条件的基本层次联系的集合为层次模型(就是树结构):

    ①有且只有一个结点没有双亲结点,这个结点称为根结点

    ②根以外的其它结点有且只有一个双亲结点

    网状模型,满足下面两个条件的基本层次联系的集合(一对多关系,结构上像有向图):

    ①允许一个以上的结点无双亲;

    ②一个结点可以有多于一个的双亲。

     

    关系模型术语:

    1.关系:一个关系对应通常说的一张表。

    2.属性:表中的一列即为一个属性。

    3.域:属性的取值范围。

    4.元组:表中的一行即为一个元组。

    5.码:也称码键。表中的某个属性组,它可以唯一确定一个元组。

    6.分量:元组中的一个属性值。

    7.关系模式:对关系的描述,一般表示为 关系名(属性1,属性2,.....,属性n)

    画E-R图

    实体-联系方法(Entity-Relationship Approach)是概念模型的一种表示方法,其提供了表示实体型、属性和联系的方法。

    实体型:用矩形表示,矩形框内写明实体名

    属性:用椭圆表示,并用无向边将其与相应的实体型连接起来

    联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时标明联系的类型(1:1, 1:n, m:n)

    比如有两个简单实体,分别是单位和职员,它们的关系就是1:m,一个单位可以有多个职员;

    再比如有两个实体,分别是学生和图书,它们的关系就是m:n,从而形成中间表学生借阅的图书,结果是1本图书可以被多人借阅,1个人也可以借多本图书。

    数据库系统结构

    数据库系统的三级模式结构:模式(Schema)、外模式(External Schema)、内模式(Internal Schema)

    模式(也称逻辑模式):

    ①数据库中全体数据的逻辑结构和特征的描述

    ②所有用户的公共数据视图,综合了所有用户的需求

    模式的地位:是数据库系统模式结构的中间层

    ①与数据的物理存储细节和硬件环境无关

    ②与具体的应用程序、开发工具及高级程序设计语言无关

    外模式(也称子模式或用户模式):

    ①数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述

    ②数据库用户的数据视图,是与某一应用有关的数据的逻辑表示

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

    内模式(也称存储模式):

    ①是数据物理结构和存储方式的描述

    ②是数据在数据库内部的表示方式:

    a. 记录的存储方式(顺序存储,按照B树结构存储,按hash方法存储)

    b. 索引的组织方式

    c. 数据是否压缩存储

    d. 数据是否加密

    e. 数据存储记录结构的规定

     

    第2章 关系数据库

    由之前的内容直到,关系模型是由关系数据结构、关系操作集合、关系完整性约束三部分组成的,所以要了解对于关系模型这三部分的含义

    2.1关系数据结构及形式化定义

    关系模型是建立在集合代数的基础上的,因此从集合论角度给出关系数据结构的形式化定义。

    1.域(Domain):域是一组具有相同数据类型的值的集合,例如整数、自然数都是域

    2.笛卡尔积(Cartesian Product):笛卡尔积是域上面的一种集合运算。

    给定一组域D1,D2,…,Dn,允许其中某些域是相同的。 D1,D2,…,Dn的笛卡尔积为:

    笛卡尔积中每个元素(d1,d2,…dn)称为一个n元组或简称元组

    笛卡尔积可表示为一个二维表,表中每行对应一个元组,表中每一列的值来自一个域

    例如,给出3个域:

    D1=导师集合SUPERVISOR={张清玫,刘逸}

    D2=专业集合SPECIALITY={计算机专业,信息专业}

    D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}

    D1,D2,D3的笛卡尔积为

    3.关系(Relation)

    D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,

    表示为R(D1,D2,…,Dn)

    R:关系名

    n:关系的目或度(Degree)

    关系也是一个二维表,每行对应一个元组,每列对应一个域,每列称为属性

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

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

    候选码的多个属性称为主属性(Prime attribute),不包含在任何候选码中的属性称为非主属性;最简单的情况下,候选码只包含一个属性,如果关系模式的所有属性都是这个关系的候选码,则称为全码(All-key)

    2.2关系操作

    关系模型中常用的关系操作包括查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作这两大部分。

    查询操作又分为:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、差(Except)、交(Intersection)、笛卡尔积等;其中:选择、投影、并、差、笛卡尔积是5种基本操作,其他操作是可以用基本操作来定义和导出的。

    2.3关系的完整性

    关系模型的完整性规则是对关系的某种约束条件,关系模型中有三类完整性约束:

    实体完整性(Entity Integrity):关系模型以主码作为唯一性标识,主码中的属性即主属性不能取空值

    参照完整性(Referential Integrity):外码

    用户自定义完整性(User-defined Integrity):反映某一具体应用所涉及的数据必须满足的语义要求

    2.4关系代数

    并、差、投影、笛卡尔积、选择为五个基本操作,交、连接、除等为附加操作,附加操作可以用五个基本操作表示

    选择

    选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算

    如查询信息系(IS系)全体学生   

    投影

    投影操作主要是从列的角度进行运算,但投影成功之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

    如查询学生的姓名和所在系 

    连接

    连接运算的含义:从两个关系的笛卡尔积中选取属性间满足一定条件的元组

    等值连接:θ为’=’的连接运算称为等值连接,即选取属性相等的元组

    自然连接:特殊的等值连接,两个关系中进行比较的分量必须是相同的属性组,在结果中要把重复的属性列去掉

    一般的连接操作是从行的角度进行运算的,自然连接还需要取消重复列,所以是同时从行和列的角度进行运算

    例如:

    可以先得到两个关系的笛卡尔积,然后筛选出C < E的

    自然连接是特殊的等值连接,相同的属性组进行比较,并去除重复的属性列。即笛卡尔积里找出B相等的然后合并R.B和S.B为B

    悬浮元组与外连接

    两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组

    外连接(OUTER JOIN)

    如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接

    左外连接(LEFT OUTER JOIN或LEFT JOIN):只保留左边关系R中的悬浮元组

    右外连接(RIGHT OUTER JOIN或RIGHT JOIN):只保留右边关系S中的悬浮元组

    除操作是同时从行和列的角度进行运算的

    第3章 SQL

    基本概念

    在SQL中一个关系就对应一个基本表,一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。

    存储文件的逻辑结构组成了关系数据库的内模式

    视图是从一个或几个基本表导出的表,它本身不独立存储在数据库中,这些数据仍存放在导出视图的基本表中

    专有名词及解释

    1.索引:建立索引是加快查询速度的有效手段,用户(数据库管理员或建表者)可以在基本表上建立一个或多个索引,以提供多种存取路径,系统在存取数据时会自动选择合适的索引作为存取路径。

    索引是关系数据库的内部实现技术,属于内模式的范畴。

    唯一索引:使用UNIQUE关键字,每个索引值对应唯一一条数据记录

    非唯一索引:不使用UNIQUE关键字

    聚簇索引:指索引项的顺序与表中记录的物理顺序一致的索引组织,可以在最经常查询的列上建立聚簇索引,对于经常更新的列不宜建立聚簇索引。一个表只能建立一个聚簇索引,一般默认是主键,所谓“与记录的物理顺序一致”即该记录升序索引也升序之类的?

     

    2.视图:视图是从一个或几个基本表(或视图)导出的表,数据库只存放视图的定义而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中数据发生变化,从视图查询出的数据也会随之改变。

    视图的作用:

    ①简化用户的操作:用户所做的只是对一个虚表的简单查询,而这个虚表是怎样得来的,用户无须了解。

    ②使用户能以多种角度来看待同一数据:当许多不同种类的用户共享同一个数据库时,这种灵活性是非常有必要的。

    ③对重构数据库提供了一定的逻辑独立性:即使重构数据库也不一定需要修改应用程序。

    ④能够对机密数据提供安全保护:只允许用户查询提供给他的视图而不是直接查询表,可以隐藏表中的机密数据

    ⑤适当的利用视图可以更清晰地表达查询语句:利用视图来表达查询语句

    数据定义

    SQL数据定义语句

    操作对象

    操作方式

    创建

    删除

    修改

    模式

    CREATE SCHEMA

    DROP SCHEMA

     

    CREATE TABLE

    DROP TABLE

    ALTER TABLE

    视图

    CREATE VIEW

    DROP VIEW

     

    索引

    CREATE INDEX

    DROP INDEX

     

     

    1.创建/删除数据库

    create database 数据库名 [其他选项];

    例如我们需要创建一个名为 samp_db 的数据库, 在命令行下执行以下命令:

    create database samp_db character set gbk;

    为了便于在命令提示符下显示中文, 在创建时通过 character set gbk 将数据库字符编码指定为 gbk。

    drop database 数据库名 删除数据库

    2.创建/删除/修改基本表

    create table student(

    id int auto_increment primary key,

    name varchar(50),

    sex varchar(20),

    date varchar(50),

    content varchar(100)

    )default charset=utf8;

    【说明】

    DATATYPE --数据类型,mysql有bit int decimal float varchar char date datetime

    NUT NULL --可不可以允许资料有空的

    PRIMARY KEY --是本表的主键

    CONSTRAINT --是对表里的字段添加约束.(约束类型有Check,Unique,Primary key,not null,Foreign key);

    删除表:drop table student

    修改表:

    #表结构修改

    create table test

    (

    id int not null auto_increment primary key, #设定主键

    name varchar(20) not null default 'NoName', #设定默认值

    department_id int not null,

    position_id int not null,

    unique (department_id,position_id) #设定唯一值

    );

     

    #修改表的名字

    #格式:alter table tbl_name rename to new_name

    alter table test rename to test_rename;

     

    #向表中增加一个字段(列)

    #格式:alter table tablename add columnname type;/alter table tablename add(columnname type);

    alter table test add  columnname varchar(20);

     

    #修改表中某个字段的名字

    alter table tablename change columnname newcolumnname type;  #修改一个表的字段名

    alter table test change name uname varchar(50);

     

    select * from test;

     

    #表position 增加列test

    alter table position add(test char(10));

    #表position 修改列test

    alter table position modify test char(20) not null;

    #表position 修改列test 默认值

    alter table position alter test set default 'system';

    #表position 去掉test 默认值

    alter table position alter test drop default;

    #表position 去掉列test

    alter table position drop column test;

    #表depart_pos 删除主键

    alter table depart_pos drop primary key;

    #表depart_pos 增加主键

    alter table depart_pos add primary key PK_depart_pos

    (department_id,position_id);

    3.主键和外键

    主键具有唯一性,能够唯一标识表中的一个单独的行

    定义外键是为了确保这一列的值是有效的(比如说该列为该表与另一个表“共同使用”的列,那么需要保证其“确实存在”,即在另一个表中有对应的值才能进行相关操作)

    4.建立索引

    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

     ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);

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

    数据查询

    SELECT [ALL | DISTINCT] <目标列表达式> [,<目标列表达式>] …

    FROM <表名或视图名>[, <表名或视图名> ] …

    [ WHERE <条件表达式> ]

    [ GROUP BY <列名1> [ HAVING <条件表达式> ] ]

    [ ORDER BY <列名2> [ ASC|DESC ] ];

    语义:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标表达式,选出元组中的属性值形成结果表。

    如果有GROUP BY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组称为一个组。如果GROUP BY子句带HAVING短语,则只有满足指定条件的组才予以输出。

    如果有ORDER BY子句,则结果表还要按<列名 2>的值的升序或降序排列

    单表查询

    1.选择表中的若干列

    SELECT Sno,Sname FROM Student

    SELECT * FROM Student

    SELECT Sname, 2014 – Sage FROM Student /* 查询结果的第2列是一个算术表达式,表中会得到2014 – Sage的值 */

    SELECT Sname NAME, ‘Year of Birth’: BIRTH, 2004 – Sage BIRTHDAY, LOWER(Sdept) DEPARTMENT /* 可以通过指定别名来改变查询结果的列标题,Sname列名会变为NAME */

    2.选择表中的若干元组

    ①SELECT DISTINCT Sno FROM SC /* 使用DISTINCT关键字消除重复的行 */

    ②使用WHERE查询满足条件的元组

    查 询 条 件

    谓 词

    比 较

    =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符

    确定范围

    BETWEEN AND,NOT BETWEEN AND

    确定集合

    IN,NOT IN

    字符匹配

    LIKE,NOT LIKE

    空 值

    IS NULL,IS NOT NULL

    多重条件(逻辑运算)

    AND,OR,NOT

    SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 33

    /* 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别、年龄 */

    SELECT Sname, Ssex FROM Student WHERE Sdept IN (‘CS’, ‘MA’, ‘IS’)

    /* IN用于查找属性值属于指定集合的元组,即Sdept等于’CS’ ‘MA’ ‘IS’中的一个即可 */

    字符匹配:[NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]

    语义:查找指定的属性列值与<匹配串>相匹配的元组,ESCAPE用于对通配符的转义,如WHERE Cname LIKE ‘DB\_Design’ ESCAPE ‘\’

    /* 将\定义为转义字符,这样匹配的就是’DB_Design’,即’_’失去了通配符的含义 */

    • %:代表任意长度(>=0)的字符串
    • _:代表任意单个字符
    • [ ]:匹配括号内所列字符中的一个,
    • [^]:匹配不在括号内所列字符中的单个字符

    注:数据库字符集为ASCII时一个汉字需要两个_,字符集为GBK时只需要一个

    ③多重条件查询,逻辑运算符AND 和 OR 可用来联结过个查询条件,AND的优先级高于OR,但可用括号改变优先级

    SELECT Sname FROM Student WHERE Sdept = ‘CS’ AND Sage < 20

    3.ORDER BY子句

    对查询结果按一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序

     

    4.聚集函数(系统自带函数?)

    COUNT(*)                                    统计元组个数  

    COUNT([DISTINCT|ALL] <列名>)  统计一列中值的个数

    SUM([DISTINCT|ALL] <列名>)   计算一列值的总和(此列必须为数值型)

    AVG([DISTINCT|ALL] <列名>)            计算一列值的平均值(此列必须为数值型)

    MAX([DISTINCT|ALL] <列名>)      求一列中的最大值

    MIN([DISTINCT|ALL] <列名>)       求一列中的最小值

    如果指定DISTINCT短语,则表示在计算时取消指定列中的重复值,ALL为缺省值,表示不取消重复值

    SELECT COUNT(*) FROM Student /* 查询学生总人数 */

     

    5.GROUP BY子句

    GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组;分组的目的是为了细化聚集函数的作用对象,如果未对查询结果分组,聚集函数将作用于整个查询结果分组后聚集函数将作用于每一个组,即每一个组都有一个函数值

    SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3

    这里先用GROUP BY 子句按Sno进行分组,再用聚集函数COUNT对每一个组计数,HAVING短语给出了选择组的条件。

    另外,注意WHERE子句与HAVING子句的作用对象,WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的组

    如下面的语句是不对的:

    SELECT Sno, AVG(Grade) FROM SC

      WHERE AVG(Grade) >= 90 GROUP BY Sno;

    正确的语句

    SELECT Sno, AVG(Grade) FROM SC

      GROUP BY Sno HAVING AVG(Grade) >= 90

    连接查询

    若一个查询同时涉及两个以上的表,则称之为连接查询

    1.等值与非等值连接查询

    连接查询的WHERE子句中用来连接两个表的条件称为链接条件或连接谓词,其一般格式如下:

    [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>

    运算符为 = 时称为等值连接,否则称为非等值连接

    SELECT Student. *, SC. * FROM Student, SC

      WHERE Student.Sno = SC.Sno

    自然连接(在等值连接中把目标列中重复的属性列去掉)

    SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade

    FROM Student, SC

    WHERE Student.Sno = SC.Sno

    2.自身连接

    需要取两个表名

    SELECT FIRST.Cno, SECOND.Cpno

    FROM Course FIRST, Course SECOND

    WHERE FIRST.Cpno = SECOND.Cno

    3.外连接

    SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade

    FROM Student LEFT OUT JOIN SC ON(Student.Sno = SC.Sno)

    4.复合条件连接

    INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

    LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

    RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

       

    嵌套查询和集合查询

    在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。否则多层的嵌套使语句可读性很低

    exists的返回结果是bool型,只有true或者false

    如 SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE e.a_id='6588' ),返回的结果跟SELECT * FROM alumni_info t一样(a_id=6588存在),因为select语句先执行where条件后的语句,再筛选字段,当执行完where条件后,若这条结果集存在,则where表达式后面永远都是true,否则为false。也就是说要么查询所有,要么没有数据。

    嵌套查询

    注意:子查询的SELECT语句中不能使用ORDER BY 子句,ORDER BY子句只能对最终查询结果排序

    子查询的查询条件依赖于父查询,则称这类子查询为相关子查询,否则称不相关子查询。

    1.带有IN谓词的子查询

    子查询结果往往是一个集合,所以谓词IN是嵌套查询中最常使用的谓词

    SELECT Sno, Sname, Sdept FROM Student

      WHERE Sdept IN

                        (SELECT Sdept FROM Student WHERE Sname=’刘晨’)

     

    2.带有比较运算符的子查询

    SELECT Sno, Cno

      FROM SC x

      WHERE Grade >= (SELECT AVG(Grade))

                                  FROM SC y

                                  WHERE y.Sno = x.Sno /* 依赖x.Sno,相关子查询 */

    其可能的执行过程:

    ①从外层查询中取出SC的一个元组x,将元组x的Sno值传送给内层查询

    ②执行内层查询,得到值88,用该值代替内层查询,得到外层查询

    ③执行这个查询,得到

    (200215121, 1)

    (200215121, 3)

    ④然后外层查询取出下一个元组重复①~③,直到外层的SC元组全部处理完毕

    如果是不相关子查询,可以发现其求解顺序是从内向外的。

    3.带有ANY(SOME)或ALL谓词的子查询

    子查询如果返回多值,就需要使用ANY或ALL谓词,其语义为

    > ANY           大于子查询结果中的某个值

    > ALL            大于子查询结果中的所有值

    ……

    SELECT Sname, Sage FROM Student

      WHERE Sage < ALL (SELECT Sage FROM Student

    WHERE Sdept = ‘CS’)

      AND Sdept <> ‘CS’;

    查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄

    执行此查询时,首先处理子查询,找出CS系中所有学生的年龄,构成一个集合(20, 19),然后处理父查询

    4.带有EXISTS谓词的子查询

    带有EXISTS谓词的子查询不返回任何数据,只产生逻辑值”true”或”false”

    若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值,带EXISTS的子查询一般都是用 *

    SELECT Sname FROM Student

      WHERE EXISTS

                   (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = ‘1’);

    其处理过程:首先取外层查询Student表中的第一个元组,根据它与内层查询相关的属性值(Sno)处理内层查询,若WHERE子句返回值为真,则取外层查询中该元组的Sname放入结果表;……

     

    集合查询

    集合操作包括并操作UNION、交操作INTERSECT和差操作EXCEPT,参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。(相同属性列?)

    数据更新

    插入数据

    INSERT通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可一次插入多个元组。

    INSERT

    INTO <表名> [(<属性列1>[,<属性列2 >…)]

    VALUES (<常量1> [,<常量2>] … )

    注意:INTO子句中没有出现的属性列,新元组在这些列上将取空值。如果表定义说明了NOT NULL的属性列不能取空值,否则会出错。

    如果INTO子句没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值。

     

    修改数据

    UPDATE <表名>

    SET <列名>=<表达式>[,<列名>=<表达式>]…

    [WHERE <条件>];

    修改指定表中满足WHERE子句条件的元组,如果省略WHERE子句,则表示要修改表中所有的元组。

    UPDATE Student SET Sage = Sage + 1 /* 将所有学生的年龄增加1岁 */

    UPDATE Student SET Sage = 22 WHERE Sno = ‘200215121’

     

    删除数据

    DELETE

    FROM <表名>

    [WHERE <条件>];

    从指定表删除满足WHERE子句条件的所有元组。如果省略WHERE子句,则删除表中全部元组,但表的定义仍在字典中。即DELETE语句删除的是表中的数据,而不是关于表的定义。

    视图

    CREATE VIEW

    <视图名> [(<列名> [,<列名>]…)]

    AS <子查询>

    [WITH CHECK OPTION];

    第4章 数据库安全性

    这里只讨论用户标识和鉴定、存取控制、视图、审计、数据加密技术。

    专有名词及解释

    1.数据库管理员:拥有所有对象的所有权限,根据实际情况不同的权限授予不同的用户

    2.用户:拥有自己建立的对象的全部的操作权限,可以使用GRANT,把权限授予其他用户

    3.角色:数据库角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

    4.审计:启用一个专用的审计日志(Audit Log),将用户对数据库的所有操作记录在上面;审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容。

    • 审计很费时间和空间
    • DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能
    • 审计功能主要用于安全性要求较高的部门

     

    用户标识与鉴别(Identification & Authentication)

    即由系统提供一定的方式让用户标识自己的名字或身份,每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供机器使用权。如连接数据库时输入的用户名和密码。

    存取控制

    存取控制机制主要包括两部分:

    1.定义用户权限,并将用户权限登记到数据字典中

    2.合法权限检查:每当用户发出存取数据库的操作请求后,DBMS查找数据字典,根据安全规则进行合法权限检查。

    自主存取控制(Discretionary Access Control,DAC):用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户。非常灵活。主要通过SQL的GRANT语句和REVOKE语句来实现。

    强制存取控制(Mandatory Access Control,MAC):每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。较为严格。

    自主存取控制

    GRANT <权限>[,<权限>]...

    ON <对象类型> <对象名>[,<对象类型> <对象名>]…

    TO <用户>[,<用户>]...

    [WITH GRANT OPTION];

    语义:将对指定操作对象的指定操作权限授予指定的用户。发出该GRANT语句的可以是DBA,也可以是数据库对象创建者,也可以是已经拥有该权限的用户。

    如果指定了WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。不允许循环授权

    GRANT SELECT ON TABLE Student TO U1; /* 把查询Student表的权限授予用户U1 */

     

    REVOKE <权限>[,<权限>]...

    ON <对象类型> <对象名>[,<对象类型> <对象名>]…

    FROM <用户>[,<用户>]...[CASCADE|RESTRICT];

    REVOKE UPDATE(Sno) ON TABLE Student FROM U4; /*回收用户U4修改学生学号的权限*/

     

    强制存取控制

    1. 保证更高程度的安全性
    2. 用户不能直接感知或进行控制
    3. 适用于对数据有严格而固定密级分类的部门

     

    在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类:

    主体是系统中的活动实体,如:DBMS所管理的实际用户,代表用户的各进程

    客体是系统中的被动实体,受主体操纵,如:文件、基表、索引、视图

    敏感度标记(Label):对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)敏感度标记分成若干级别

    • 绝密(Top Secret,TS)
    • 机密(Secret,S)
    • 可信(Confidential,C)
    • 公开(Public,P)

    TS>=S>=C>=P

    主体的敏感度标记称为许可证级别(Clearance Level)

    客体的敏感度标记称为密级(Classification Level)

    当一个用户以标记label注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:

    (1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体

    (2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体

    注意第2点,即用户可以写入数据但是不能再读取自己写入的数据。

     

    第5章 数据库完整性

    数据库完整性是指数据的正确性和相容性。完整性是为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。

    为了维护数据库的完整性,DBMS必须能够:

    1.提供定义完整性约束条件的机制:完整性一般由SQL的DDL语句来实现,它们作为数据库模式的一部分存入数据字典中。

    2.提供完整性检查的方法:检查数据是否满足完整性约束条件的机制

    3.违约处理:若用户违背了完整性约束条件,应该采取的动作

    实体完整性

    关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。一种是定义为列级约束条件,另一种是定义为表级约束条件

    CREATE TABLE Student (

           Sno CHAR(9) PRIMARY KEY, /*在列级定义主码*/

           Sname CHAR(20) NOT NULL,

           Ssex CHAR(2),

           Sage SMALLINT,

           Sdept CHAR(20)

    );

     

    CREATE TABLE Student (

           Sno CHAR(9) ,

           Sname CHAR(20) NOT NULL,

           Ssex CHAR(2),

           Sage SMALLINT,

           Sdept CHAR(20)

           PRIMARY KEY(Sno)  /*在表级定义主码*/

    );

    CREATE TABLE Student (

           Sno CHAR(9) ,

           Sname CHAR(20) NOT NULL,

           Ssex CHAR(2),

           Sage SMALLINT,

           Sdept CHAR(20)

           PRIMARY KEY(Sno,Sname)  /*属性组定义为主码,只能在表级定义*/

    );

    违约处理:

    当用户程序对基本表插入一条记录或对主码列进行更新操作时,会进行如下检查

    (1)检查主码值是否唯一,如果不唯一则拒绝插入或修改

    (2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

    参照完整性

    关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。

    例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno、Cno分别参照引用Student表的主码和Course表的主码

    CREATE TABLE SC (

           Sno CHAR(9) NOT NULL,

           Cno CHAR(4) NOT NULL,

           Grade SMALLINT,

           PRIMARY KEY(Sno, Cno),

           FOREIGN KEY(Sno) REFERENCES Student(Sno),

           FOREIGN KEY(Cno) REFERENCES Course(Cno)    /*在表级定义参照完整性*/

    );

    违约检查:

    对被参照表和参照表进行增删改操作时都会进行检查

    当不一致发生时,系统可以采用如下策略处理:

    (1)拒绝(NO ACTION)执行:不允许该操作执行,该策略一般设置为默认策略

    (2)级联(CASCADE)操作:当删除或修改被参照表的一个元组导致与参照表(SC)的不一致时,删除或修改参照表中的所有导致不一致的元组。

    (3)设置为空值:当删除或修改被参照表的一个元组时造成了不一致,则将参照表中所有造成不一致的元组的对应属性设置为空值。

    如果要采取非默认策略需要显式地加以说明,如:

    ON DELETE NO ACTION

    ON UPDATE CASCADE

    用户自定义完整性

    1.属性上的约束条件的定义

    NULL/NOT NULL、DEFAULT,UNIQUE、CHECK

    • 列值非空(NOT NULL)
    • 列值唯一(UNIQUE)

    2.元组上的约束条件

    使用CHECK短语定义元组上的约束条件,如下:

    CREATE TABLE SC (

           Sno CHAR(9) NOT NULL,

           Cno CHAR(4) NOT NULL,

           Grade SMALLINT,

           PRIMARY KEY(Sno, Cno),

           CHECK(Sno='x' OR Cno NOT LIKE 'MS.%')

    );

    违约处理:拒绝执行

    触发器(Trigger)

    触发器是用户定义在关系表上的一类由事件驱动的特殊过程,其不仅可以用于数据库完整性检查,也可以用来实现数据库的其他功能,包括数据库安全性,以及一些业务流程和控制流程。

    定义触发器:

    CREATE TRIGGER <触发器名>    /*每当触发事件发生时,该触发器被激活*/

    {BEFORE | AFTER} <触发事件> ON <表名> /*指明触发器激活的时间是在执行触发事件前或后*/

    REFERENCING NEW|OLD ROW AS <变量> /*REFERENCING 指出引用的变量*/

    FOR EACH {ROW | STATEMENT}             /*定义触发器的类型,指明动作体执行的频率*/

    [WHEN <触发条件> ]                         /*仅当触发条件为真时才执行触发动作体*/

    <触发动作体>                    

    要点:

    1. 只有创建表的用户才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器
    2. 触发器名唯一
    3. 触发器只能定义在基本表上,不能定义在视图上
    4. 触发事件可以是INSERT DELETE 或 UPDATE,也可以是这几个事件的组合,如INSERT OR DELETE等,还可以是UPDATE OF <触发列, …>指明修改哪些列时激活触发器。
    5. AFTER / BEFORE 是触发的时机,AFTER表示在触发事件的操作执行之后激活触发器。
    6. 触发器类型:FOR EACH ROW(行级触发器)和FOR EACH STATEMENT(语句触发器),假设表TEACHAR 有1000行,行级触发器将执行1000次,而语句触发器只执行1次
    7. 触发条件:触发器被激活时,只有当触发条件为真时触发动作体才执行;否则触发动作体不执行。如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行。
    8. 触发动作体:在过程体中可以使用NEW和OLD来引用UPDATE/INSERT事件之后的新值和之前的旧值,如果是语句级触发器则不能使用NEW或OLD引用。

     

    多个执行语句的触发器:

    CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件

    ON 表名 FOR EACH ROW

    BEGIN

        执行语句列表

    END

     

    CREATE TRIGGER Insert_Or_Update_Sal

      BEFORE INSERT OR UPDATE ON Teacher

      FOR EACH ROW

      AS BEGIN

           IF (new.Job = ‘教授’) AND (new.Sal < 4000) THEN

             new.Sal := 4000;

           END IF;

      END;

    删除触发器:DROP TRIGGER <触发器名> ON <表名>

     

    第6章 关系数据库理论

    数据依赖:数据依赖是一个关系内部属性与属性之间的一种约束关系。有多种类型的数据依赖,其中最重要的是函数依赖(Functional Dependency,FD)多值依赖(Multivalued Dependency,MVD)

    一个不好的关系模式会存在以下一些问题:

    (1) 数据冗余太大:信息被重复存储,导致浪费大量存储空间

    (2) 更新异常:当重复信息的一个副本被修改,所有副本都必须进行同样的修改。因此当更新数据时,系统要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。

    (3) 插入异常:只有当一些信息事先已经存放在数据库中时,另外一些信息才能存入数据库中

    (4) 删除异常:删除某些信息时可能丢失其它信息

    规范化

    规范化理论是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决数据冗余、插入异常、更新异常、删除异常这些问题。

    定义1:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。

    即Sno→Sname这个函数依赖只有在不可能存在两个元组在Sno上的值相等,而在Sname上的值不等时才成立。(左边相等右边必相等)

    在关系模式R(U)中,对于U的子集X和Y,

    如果X→Y,但Y不为X的子集?,则称X→Y是非平凡的函数依赖

    若X→Y,但Y Í X, 则称X→Y是平凡的函数依赖

    完全函数依赖:

    部分函数依赖:

    上图中 是完全函数依赖, 是部分数依赖,因为Sno→Sdept成立,而Sno是(Sno,Cno)的真子集

    范式:

    一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

    1NF:

    如果一关系模式r(R)的每个属性对应的域值都是不可分的(即原子的),则称r(R)属于第一范式,记为r(R)Î1NF.

    第一范式的目标是:将基本数据划分成称为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。

    第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库

    2NF:

    若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。

    第二范式的目标:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性移到其他表中。

    S-L-C这个函数依赖图中非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)

    将其分为两个表后使得非主属性对其各自的码都是完全函数依赖

    2NF范式虽然消除了由于非主属性对候选码的部 分依赖所引起的冗余及各种异常,但并没有排除传递依赖。因此,还需要对其进一步规范化

    3NF:

    若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码

    第三范式的目标:去掉表中不直接依赖于候选码的非主属性

    Sno→Sdept  Sdept → Sno  Sdept→Sloc 可得: Sno→Sloc,即S-L中存在非主属性对码的传递函数依 赖,S-L ∉ 3NF

    采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖:

    BCNF

    通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

    一个满足BCNF的关系模式有:

    • 所有非主属性都完全函数依赖于每个候选码
    • 所有的主属性都完全函数依赖于每个不包含它的候选码
    • 没有任何属性完全函数依赖于非码的任何一组属性

    BCNF范式排除了:

    • 任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖;
    • 主属性之间的传递依赖。

    例子:

    关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课,

    每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。

    由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J

    因为没有任何非主属性对码传递依赖或部分依赖,

    STJ ∈ 3NF。

    因为T是决定因素,而T不包含码,所以STJ 不属于 BCNF 关系。

    候选码可以有多个,如上面(S,J)和(S,T)都是候选码,包含在任一一个候选码中的属性称为主属性,那么S,J,T都是主属性,以上不满足“所有的主属性都完全函数依赖于每个不包含它的候选码”,是否可以直接理解为决定因素必须为候选码中的一个?

     

    小结

    第7章 数据库设计

    数据库设计可以分为以下6个阶段:

    1. 需求分析:准确了解和分析用户需求(包括数据和处理)
    2. 概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型
    3. 逻辑结构设计:将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化
    4. 物理结构设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
    5. 数据库实施:根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库并试运行
    6. 数据库运行和维护:在数据库投入正式使用后不断地对其进行评价、调整与修改

    其具体要做的事情如下图:

    需求分析

    数据流图表达了数据和处理的关系,数据字典是系统中各类数据描述的集合

    数据字典通常包括数据项、数据结构、数据流、数据存储、处理过程5个部分

    1.数据项:数据项描述 = {数据项名,数据项含义说明,别名,数据类型,取值范围……}

    2.数据结构:数据结构反映了数据之间的组合关系。数据结构描述 = {数据结构名,含义说明,组成:{数据项或数据结构}}

    3.数据流:数据流是数据结构在系统内传输的路径。数据流描述 = {数据流名,数据流来源,数据流去向,平均流量,高峰期流量,组成:{数据结构}}

    4.数据存储:数据存储是数据结构停留或保存的地方。数据存储描述 = {数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}

    5.处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。处理过程描述 = {处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}概念结构设计

    需求分析阶段完成数据字典(用于表示收集到的数据)和一组数据流程图(Data Flow Diagram,DFD)

    概念结构设计

    设计概念结构通常有四类方法

    自顶向下:即首先定义全局概念结构的框架,然后逐步细化

    自底向上:即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构

    逐步扩张:首先定义最重要的核心概念结构,然后向外扩充

    混合策略:即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。

    逻辑结构设计

    E-R图如何转换为关系模型?

    (1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的码;如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。(联系本身的属性?)

    (2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码

    (3)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分

    数据模型的优化

    数据库逻辑设计的结果不是唯一的。关系数据模型的优化通常以规范化理论为指导。

    具体如下:确定数据依赖、分析各关系模式属于第几范式,并不是规范化程度越高的关系就越优,这需要考虑具体情况;

    对关系模式进行必要的分解,提高数据操作的效率和存储空间的利用率。常用的两种分解方法为水平分解和垂直分解。

    水平分解:把关系的元组分为若干子集合,定义每个子集合为一个子关系

    垂直分解:把关系的属性分解为若干个子集合,形成若干子关系模式

    设计用户子模式

    如果某些局部应用经常要使用某些很复杂的查询,为了方便用户,可以将这些复杂查询定义为视图,用户每次只对定义好的视图进行查询即可。

    数据库的运行与维护

    从以下几个角度考虑:

    1.数据库的转储和恢复

    2.数据库的安全性、完整性控制

    3.数据库性能的监督、分析和改造

    4.数据库的重组织和重构造

    第9章 关系查询处理和查询优化

    查询处理步骤

    RDBMS查询处理可分为4个阶段:查询分析、查询检查、查询优化和查询执行

    查询分析:对查询语句进行扫描、词法和语法分析,判断是否符合SQL语法规则。

    查询检查:根据数据字典对合法的查询语句进行语义检查

    查询优化:从多种可供选择的执行策略中选择一个高效执行的查询处理策略

    查询执行:代码生成器生成执行这个查询计划的代码

    实现查询操作的算法示例

    一、选择操作的实现

    1.简单的全表扫描方法:对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件

    2.索引(或散列)扫描方法:如果选择条件的属性上有索引(如B+树索引或Hash索引),可以用索引扫描方法,通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组

    二、连接操作的实现

    例:SELECT * FROM Student, SC WHERE Student.Sno = SC.Sno;

    1.嵌套循环方法(nested loop):对外层循环(Student)的每一个元组,检索内层循环(SC)中的每一个元组,并检查这两个元组在连接属性(sno)上是否相等

    2.排序-合并方法(sort-merge join 或 merge join):尤其适合连接的表已排好序的情况

    步骤如下:

    ①如果连接的表没有排好序,首先对Student表和SC表按连接属性Sno排序

    ②取Student表中第一个Sno,依次扫描SC表中具有相同Sno的元组,把它们连接起来

    ③当扫描到Sno不相同的第一个SC元组时,返回Student表扫描它的下一个元组,再扫描SC表中具有相同Sno的元组,把它们连接起来。

    ④重复以上步骤直到Student表扫描完

    3.索引连接方法(index join):如果内层循环的连接属性上有索引,对于外层关系r的每一个元组tr,利用索引来搜索内层关系s 中与元组tr满足连接条件的元组 。

    步骤:

    ① 在SC表上已经建立属性Sno的索引。

    ② 对Student中每一个元组,由Sno值通过SC的索引查找 相应的SC元组。

    ③ 把这些SC元组和Student元组连接起来 循环执行②③,直到Student表中的元组处理完

    4.Hash Join方法

    把连接属性作为hash码,用同一个hash函数把Student表和SC表中的元组散列到hash表中。

    划分阶段(building phase, 也称为partitioning phase):

    对包含较少元组的表(如Student表)进行一遍处理把它的元组按hash函数分散到hash表的桶中

    试探阶段(probing phase,也称为连接阶段join phase)

    对另一个表(SC表)进行一遍处理

    把SC表的元组也按同一个hash函数(hash码是连接属性)进行散列

    把SC元组与桶中来自Student表并与之相匹配的元组连接起来

    查询优化策略

    查询优化的优点:用户不必考虑如何最好地表达查询以获得较好的效率,系统可以比用户程序的“优化”做得更好

    1. 优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息。
    2. 如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。
    3. 优化器可以考虑数百种不同的执行计划,程序员一般只能考虑有限的几种可能性。
    4. 优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动 优化相当于使得所有人都拥有这些优化技术。

     

    代数优化

    基于关系代数等价变换规则的优化方法,称为代数优化

    ①XXX结合律、交换律……

    ②查询树的启发式优化

    关系代数表达式典型的启发式规则有:

    1.选择运算应尽可能先做。这在优化策略中是最重要、最基本的一条,因为选择运算一般使计算的中间结果大大变小???

    2.把投影运算和选择运算同时进行

    3.把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系

    4.把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算

    5.找出公共子表达式

    理优化

    物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划,达到查询优化的目标。

    选择的方法可以是:

    ①基于规则的启发式优化:如对于用OR连接的析取选择条件,一般使用全表顺序扫描;如果2个表都已经按照连接属性排序,则选用排序-合并方法等

    ②基于代价估算的优化:对各算法通过代价估算公式计算代价选择最优解

    ③两者结合的优化方法

     

    基于启发式规则的存取路径选择优化

    一、选择操作的启发式规则

    1.对于小关系,使用全表顺序扫描,即使选择列上有索引

    2.对于选择条件是主码 = 值 的查询,查询结果最多是一个元组,可以选择主码索引

    3.对于选择条件是非主属性 = 值的查询,并且选择列上有索引,则要估算查询结果的元组数目,如果比例较小(< 10%)可以使用索引扫描,否则还是使用全表顺序扫描

    4.对于选择条件是属性上的非等值查询或范围查询,并且选择列上有索引,同样要估算查询结果的元组数目。

    5.对于用AND连接的合取选择条件,如果有涉及这些属性的组合索引,则优先采用组合索引扫描方法;如果某些属性上有一般的索引?否则使用全表顺序扫描

    6.对于用OR连接的析取选择条件,一般使用全表顺序扫描

    二、连接操作的启发式规则

    1.如果2个表都已经按照连接属性排序,则选用排序-合并方法

    2.如果一个表在连接属性上有索引,则可以选用索引连接方法

    3.如果上面2个规则都不适用,其中一个表较小,可以选用Hash Join

    4.最后可选用循环嵌套,选择其中较小的表作为外表

    第10章 数据库恢复技术

    尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏以及并发事务的正确执行,但某些故障仍然不可避免,会导致数据库中部分数据的丢失甚至破坏数据库,数据库恢复就是为了将数据库从错误状态恢复到某一已知的正确状态。

    事务的基本概念

    事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句。

    事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,ROLLBACK表示回滚,在事务运行的过程中发生某种故障事务不能继续执行,系统就会将事务对数据库的已完成操作全部撤销,从而回滚到事务开始时的状态。

     

    事务的特性:

    原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability),简称ACID

    1.原子性:事务是数据库的逻辑工作单位,事务中包括的操作要么都做,要么都不做

    2.一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。事务执行过程中出现故障则称这时的数据库处于不一致性状态。

    3.隔离性:一个事务的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰

    4.持续性(永久性):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

     

    事务的ACID特性可能遭到破坏的因素有:

    (1) 多个事务并行运行时,不同事务的操作交叉执行

    (2) 事务在运行过程中被强制停止

    故障的种类

    1.事务内部的故障:

    2.系统故障:如操作系统故障,CPU故障,系统断电

    3.介质故障:如磁盘损坏、磁头碰撞、瞬时强磁场干扰等

    4.计算机病毒

    恢复的实现技术及策略

    数据转储

    转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据称为后被副本。

    转储又分为静态转储动态转储:静态转储必须等待正在运行的用户事务结束才能进行;动态转储是指转储期间允许对数据库进行存取或修改,即转储和用户事务可以并发执行。

    也可分为海量转储增量转储:海量转储即每次转储全部数据库,增量转储即每次只转储上一次转储后更新的数据。

    登记日志文件(Logging)

    日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式并不完全一样,主要有两种格式:以记录为单位的日志文件以数据块为单位的日志文件

    对以记录为单位的日志文件,日志文件中需要登记的内容包括:

    • 各个事务的开始(BEGIN TRANSACTION)标记
    • 各个事务的结束(COMMIT或ROLLBACK)标记
    • 各个事务的所有更新操作

    以上每一条内容记为一个日志记录(log record)

    每个日志记录的内容主要包括:

    • 事务标识(标明是哪个事务)
    • 操作的类型(插入、删除或修改)
    • 操作对象(记录内部标识)
    • 更新前数据的旧值(对插入操作而言,此项为空值)
    • 更新后数据的新值(对删除操作而言,此项为空值)

     

    对以数据块为单位的日志文件,日志记录的内容包括事务标识和被更新的数据块。由于将更新前的整个块和更新后的整个块都放入日志文件中,操作的类型和操作对象等信息就不必放入日志记录中了。

     

    日志文件的作用:

    日志文件用于事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复

    具体作用如下:

    1. 事务故障恢复和系统故障恢复必须用日志文件。
    2. 在动态转储方式中必须建立日志文件,备份副本和日志文件结合起来才能有效地恢复数据库。
    3. 在静态转储方式中,也可以建立日志文件。

    登记日志文件

    为保证数据库是可恢复的,登记日志文件时必须遵循两条规则:

    (1) 登记的次序严格按并发事务执行的时间次序

    (2) 必须先写日志文件,后写数据库

    如果先写了数据库修改,但是没有登记这个日志,那么中途运行故障就无法恢复这个修改了。

    恢复策略

    REDO:重做,正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作

    UDNO:撤销,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作

    COMMIT:提交,将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束

    ROLLBACK:回滚,事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成操作全部撤销,回滚到事务开始时的状态

    事务故障的恢复:

    (1)反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新操作

    (2)对该事务的更新操作执行逆操作。(来得及或者未来得及写入数据库都没关系)

    (3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理

    (4)如此继续,直到读到该事务的开始标记

    系统故障的恢复:

    (1)正向扫描日志文件,找出在故障发生前已经提交的事务(这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标记记入REDO队列;同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录),将其事务标记记入UNDO队列

    (2)对撤销队列中的各个事务执行UNDO操作

    (3)对重做队列中的各个事务执行REDO操作

    为什么要REDO?考虑已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库(磁盘)。

    介质故障的恢复:

    (1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态

    (2)装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务,即扫描日志文件找出需要重做和撤销的事务

     

    具有检查点的恢复技术

    在故障发生时还未完成的事务需要撤销,在检查点和故障点之间完成的事务需要重做,因为它们对数据库所做的修改在故障发生时可能还在缓冲区中。

    第11章 并发控制概述

    并发控制概述:事务是并发控制的基本单位,并发控制用于保证事务的隔离性和一致性。

    事务读数据x一般记为R(x),写数据x一般记为W(x)

    如果不对并发操作进行正确调度,可能导致数据的不一致性问题,主要包括丢失修改、不可重复读和读“脏”数据。

    1.丢失修改:两个事务读入同一数据并修改,其中一个事务的修改会丢失

    2.不可读重复:事务T1读取数据后,T2执行更新操作,使T1无法再现前一次读取结果

    3.读脏数据:“脏”数据指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,则T2读取到的数据就为“脏”数据,即不正确的数据。

    封锁

    封锁即事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。

    排它锁(写锁,X锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁前不能再读取和修改A

    共享锁(读锁,S锁):若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改

    活锁和死锁

    活锁即一个事务可能永远等待(系统总是先批准其他事务的锁请求),可以采用先来先服务的策略解决。

    死锁即两个事务互相申请对方锁住的资源导致两个事务永远不能结束。

    预防策略:

    (1) 一次性封锁法:一次性封锁发要求每个事务必须一次将所有要使用的数据全部加锁

           缺点:势必扩大封锁的范围,从而降低了系统的并发度;

    (2) 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

           缺点;难以事先确定封锁顺序

    死锁解除策略:

    (1) 超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁;

           缺点:可能误判死锁,事务因为其他原因使等待时间超过时限;若时限设置得太长,死锁发生后不能及时发现

    (2) 等待图法:并发控制子系统周期性地生成事务等待图,并进行检测,如果发现图中存在回路,则发生了死锁。

    如果检测到死锁,一般采用的方法是选择一个处理死锁代价较小的事务,将其撤销,释放此事务持有的所有的锁,之后对撤销的事务所执行的数据修改操作必须加以恢复。

    并发调度的可串行性

    定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化的调度。

    可串行性(Serializability)是并发事务正确调度的准则,按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。

     

    冲突可串行化调度

    冲突操作是指不同的事务对同一个数据的读写操作和写写操作:

    Ri (x)与Wj(x) /* 事务Ti读x,Tj写x,其中i≠j*/

    Wi(x)与Wj(x) /* 事务Ti写x,Tj写x,其中i≠j*/

    不能交换(Swap)的动作:

    • 同一事务的两个操作
    • 不同事务的冲突操作

    一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到 另一个调度Sc’ ,如果Sc’是串行的,称调度Sc 为冲突可串行化的调度

    一个调度时冲突可串行化的,那么它一定是可串行化的调度,因此,可以用这种方法来判断一个调度是否是冲突可串行化的。

    冲突可串行化调度是可串行化调度的充分条件,不是必要条件,还有不满足冲突可串行化条

    件的可串行化调度

    Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)

    把w2(A)与r1(B)w1(B)交换,得到:

    r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B)

    再把r2(A)与r1(B)w1(B)交换:

    Sc2=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B)

    Sc2等价于一个串行调度T1,T2,Sc1冲突可串行化的调度

    两段锁协议

    封锁协议(Locking Protocol)即对数据对象加锁时约定的一些规则,如何时申请封锁、持锁时间、何时释放锁等。两段锁协议是最常用的一种封锁协议,使用两段锁协议产生的是可串行化调度(充分条件)

    两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁

    (1) 在对任何数据进行读、写操作之前,首先要申请并获取对该数据的封锁

    (2) 在释放一个封锁之后,事务不得再申请和获得任何其他封锁

    简单来说,申请锁和释放锁必须是连续的

    例:

    事务T1遵守两段锁协议,其封锁序列是:

    Slock A Slock B Xlock C Unlock B Unlock A Unlock C;

    l← 扩展阶段 →l l← 收缩阶段 →l

    事务T2不遵守两段锁协议,其封锁序列是:

    Slock A Unlock A Slock B Xlock C Unlock C Unlock B

    习题

    选择题

    1.关系代数中的等值连接操作是由选择和笛卡尔积这两个操作组成的

    2.事务日志一般用于保存对数据的更新操作

    3.设有一个关系:DEPT(DNO,DNAME),如果要找出倒数第三个字母为 W,并且至少包含 4 个字母的 DNAME,则查询条件子句应写成 WHERE DNAME LIKE (B

    (A)'_ _W_%' (B) '_%W_ _' (C) '_W_ _' (D) '_W_%'

    PS:

    ‘_’匹配单个任意字符,’%’匹配0个或多个任意字符, ‘[ ]’匹配括号内所列字符中的一个, ‘[^]’匹配不在括号内所列字符中的单个字符

    4、以下(D )不属于实现数据库系统安全性的主要技术和方法。

    (A)存取控制技术 (B)视图技术 (C)审计技术 (D)并发控制技术

    PS:

    实现数据库安全性的技术和方法有多种,如存取控制技术、视图技术和审计技术

    并发控制技术用于保证事务的隔离性和一致性

     

    5、有两个关系 R(A,B,C)和 S(B,C,D),则 R÷S 结果的属性个数是(C )。

    (A)3 (B)2 (C)1 (D)不一定

     

    6、设 U 是所有属性的集合,X、Y、Z 都是 U 的子集,且 Z=U-X-Y。下面关于多值依赖的叙述中,不正确的是(??? )。

    (A)若 X→→Y,则 X→→Z (B)若 X→Y,则 X→→Y (C)若 X→→Y,且 Y′∈Y,则 X→→Y′ (D)若 Z=Φ,则 X→→Y

    [解析] 多值依赖的性质包括:

    (1)多值依赖具有对称性 即若X→→Y,则X→→Z,其中Z=U-X-Y

    (2)多值依赖具有传递性 即若X→→Y,Y→→Z, 则X→→Z –Y

    (3)函数依赖是多值依赖的特殊情况。 即若X→Y,则X→→Y。

    (4)若X→→Y,X→→Z,则X→→YZ。

    (5)若X→→Y,X→→Z,则X→→Y∩Z。

    (6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y。

    多值依赖的定义:设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y(Y多值依赖于X)成立, 当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一 组Y的值,这组值仅仅决定于x值而与z值无关

     

    7、现有一个关系:借阅(书号、书名,库存数,读者号,借期,还期),假如同一本书允许一个读者多次借阅,但不能同时对一种书借多本。则该关系模式的码是(C )。

    (A)书号 (B)读者号 (C)书号+读者号 (D)书号+读者号+借期

     

    9、设有关系 R(A,B,C)的值如下:

    A

    B

    C

    2

    2

    3

    2

    3

    4

    3

    3

    5

     

    下列叙述正确的是(B

    A.函数依赖 A→B 在上述关系中成立 B.函数依赖 BC→A 在上述关系中成立

    C.函数依赖 B→A 在上述关系中成立 D.函数依赖 A→BC 在上述关系中成立

    【解析】:判断一个函数依赖是否成立即对每个决定因素(左边的)其右边的值唯一

    10、设有事务 T1 和 T2,其并发操作顺序如下图所示,该并发操作带来的问题是:(A

    A.丢失更新 B.读“脏数据” C.事务不能提交 D.不能重复读

     

    11、关系代数表达式的优化策略中,首先要做的是(B

    (A)对文件进行预处理 (B)尽早执行选择运算 (C)尽早执行笛卡尔积运算 (D)尽早执行投影运算

     

    12、在 DB 的三级模式中,外模式(D )。

    (A)只有一个 (B)不能有多个 (C)至多一个 (D)可以有多个

     

    13、在 SELECT 语句中,需对分组情况满足的条件进行判断时,应使用( D)。

    (A)WHERE (B)GROUP BY (C)GROUP CONDITION (D)HAVING

     

    14、若两个实体间的关系是 1:m,则进行逻辑设计时实现 1:m 联系的方法是( A

    (A)在“m”端实体转换的关系中加入“1”端实体转换的关系的码

    (B)将“m”端实体转换的关系的码加入“1”端实体转换的关系中

    (C)在两个实体转换的关系中,分别加入另外一个关系的码

    (D)将两个实体转换成一个关系

    【解析】:考察E-R图转换为关系模式,1:n关系可以独自成一个表,也可以与n端关系模式合并

    其规则如下:注意联系独自成表(关系模式)时合并的是实体的码(而不是所有属性)

    (1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的码;如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。(联系本身的属性?)

    (2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码

    (3)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分

     

    15、若数据库中只包含成功事务提交的结果,则此数据库处于(B )状态。

    (A)安全 (B)一致 (C)不安全 (D)不一致

     

    16、关系数据库的规范化理论主要解决的问题是(A

    (A)如何构造合适的数据逻辑结构 (B)如何构造合适的数据物理结构 (C)如何构造合适的应用程序 (D)如何控制不同用的操作权限

    【解析】:概念结构是画E-R图,逻辑结构是建表,物理结构是选择存储结构和存取方法等

    规范化理论是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决数据冗余、插入异常、更新异常、删除异常这些问题。说白了就是改造表。

     

    17、DBMS 普遍采用( C)方法来保证调度的正确性。

    (A)索引 (B)授权 (C) 封锁 (D) 日志

     

    18、X→Ai 成立(i=l,2,…,k)是 X→A1 A2…Ak 成立的(C )。

    (A)充分条件 (B)必要条件 (C)充要条件 (D)既不充分也不必要

     

    19、在进行授权时,数据对象的(A ),授权子系统就越灵活。

    (A)粒度越小 (B)粒度越大(C)约束越细(D)约束越粗

    【解析】:粒度?约束?粒度理解为范围?如数据库、表、表操作等;约束理解为规定的细致与否?

     

    20、数据库的概念模型独立于( A)。

    (A)具体的机器和 DBMS (B)E-R 图 (C)信息世界 (D)现实世界

     

    22、如果一个关系 R 中的属性全部都是主属性,则 R 至少可以达到(B )。

    (A)2NF (B)3NF (C)BCNF (D)4NF

    【解析】一个全部是主属性的关系必然不会有非主属性部分或者传递依赖的问题,故至少是3NF。但此关系无法保证每一个非平凡的多值依赖或者函数依赖都包含码,所以R的最高范式至少是3NF。

     

    23、在 E-R 模型中,如果有 3 个不同的实体集,3 个多对多的联系, 则应转换为(B )个关系模式。

    (A)3 (B)6 (C)9 (D)4

     

    24、关于死锁,下列说法正确的是( D

    (A)死锁是操作系统中的问题,数据库中不存在

    (B)数据库中防止死锁的方法是禁止两个用户同时访问数据库

    (C)当两个用户竞争相同的资源时不会发生死锁

    (D)只有出现并发操作时,才有可能出现死锁

     

    25、写一个修改到数据库中,与写一个表示这个修改的记录到日志文件中的操作,应该( C)。 (A)前者先做 (B)由程序员安排 (C)后者先做 (D)由系统决定哪一个先做

     

    26、在第一个事务以 S 封锁方式读数据 A 时,第二个事务对数据 A 的读取 方式会遭到失败的是(A )。

    (A)实现 X 封锁的读 (B)实现 S 封锁的读 (C)不加锁的读 (D)实现意向共享锁的读

     

    27、视图建立后,在数据字典中存放的是( C)。

    (A)查询语句 (B)组成视图的表的内容 (C)视图的定义 (D)视图对应的表的定义

     

    简答题

    1、什么是视图?使用视图有什么好处?

    【答】: 视图是从一个或几个基本表(或视图)导出的表,数据库只存放视图的定义而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中数据发生变化,从视图查询出的数据也会随之改变。

    视图的作用:

    ①简化用户的操作:用户所做的只是对一个虚表的简单查询,而这个虚表是怎样得来的,用户无须了解。

    ②使用户能以多种角度来看待同一数据:当许多不同种类的用户共享同一个数据库时,这种灵活性是非常有必要的。

    ③对重构数据库提供了一定的逻辑独立性:即使重构数据库也不一定需要修改应用程序。

    ④能够对机密数据提供安全保护:只允许用户查询提供给他的视图而不是直接查询表,可以隐藏表中的机密数据

    ⑤适当的利用视图可以更清晰地表达查询语句:利用视图来表达查询语句

     

    2、发生介质故障时,应该如何恢复数据库?

    【答】:(1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态

    (2)装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务,即扫描日志文件找出需要重做和撤销的事务

     

    3、什么是数据库的审计?它有什么作用?

    【答】:数据库的审计即每当用户对数据库执行操作(CRUD)时就在审计文件中增加一条记录(包含谁执行了什么操作),启用一个专用的审计日志(Audit Log),将用户对数据库的所有操作记录在上面;

    审计的作用:

    (1) 保证数据库的安全性,数据库管理员可以根据审计文件观察是否有人执行了不安全的操作。审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容

    (2) 利于查错,可以通过观察执行了哪些操作来找出错误的来源

    • 审计很费时间和空间
    • DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能
    • 审计功能主要用于安全性要求较高的部门

     

    4、什么是数据库中的事务?它有哪些特性?这些特性的含义是什么

    【答】:事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句。

    事务的特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability),简称ACID

    1.原子性:事务是数据库的逻辑工作单位,事务中包括的操作要么都做,要么都不做

    2.一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。事务执行过程中出现故障则称这时的数据库处于不一致性状态。

    3.隔离性:一个事务的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰

    4.持续性(永久性):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

     

    5、如何判断一个关系是否属于第三范式?

    【答】:判断一个关系是否属于第三范式首先判断它是否属于第二范式,即非主属性是否部分依赖于码,如果属于第二范式再看非主属性是否传递依赖于码,如果两个都是否,则该关系属于第三范式。(1NF:每个属性对应的值域都是不可分的);另外,如果该关系为全码,则它肯定属于第三范式

     

    6、在数据库设计时,什么是数据字典?数据字典中通常有哪些内容?

    【答】:数据流图表达了数据和处理的关系,数据字典是系统中各类数据描述的集合

    数据字典通常包括数据项、数据结构、数据流、数据存储、处理过程5个部分

    ①数据项:数据项描述 = {数据项名,数据项含义说明,别名,数据类型,取值范围……}

    ②数据结构:数据结构反映了数据之间的组合关系。数据结构描述 = {数据结构名,含义说明,组成:{数据项或数据结构}}

    ③数据流:数据流是数据结构在系统内传输的路径。数据流描述 = {数据流名,数据流来源,数据流去向,平均流量,高峰期流量,组成:{数据结构}}

    ④数据存储:数据存储是数据结构停留或保存的地方。数据存储描述 = {数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}

    ⑤处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。处理过程描述 = {处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}概念结构设计

     

    7、在数据库的查询优化中,什么是代数优化?什么是物理优化?

    【答】:代数优化即通过一些定律或启发式规则对关系代数操作(选择、投影、连接等)做替换(顺序)、合并等从而达到优化的效果;物理优化即通过使用合适的存储方式及存取方法来实现优化(如选择操作是使用全表扫描还是索引扫描,连接操作是使用嵌套循环还是排序-合并方法等)

    基于关系代数等价变换规则的优化方法,称为代数优化

    物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划,达到查询优化的目标

     

    8、在基于检查点的数据库恢复技术中,检查点记录的内容应该包括哪些?

    【答】:检查点记录的内容包括

    ①建立检查点时刻所有正在执行的事务清单

    ②这些事务最近一个日志记录的地址

     

    9、什么是数据库中的死锁?如何解决死锁问题

    【答】:死锁即两个事务互相申请对方锁住的资源导致两个事务永远不能结束

    解决死锁有以下方案:

    (1) 一次性封锁法:一次性封锁发要求每个事务必须一次将所有要使用的数据全部加锁

           缺点:势必扩大封锁的范围,从而降低了系统的并发度;

    (2) 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

           缺点;难以事先确定封锁顺序

     

    10、举例说明连接操作的排序-合并实现方法

    【答】:假设有两个表Student表和SC表,其有相同属性列Sno表示学生学号

    步骤如下:

    ①如果连接的表没有排好序,首先对Student表和SC表按连接属性Sno排序

    ②取Student表中第一个Sno,依次扫描SC表中具有相同Sno的元组,把它们连接起来

    ③当扫描到Sno不相同的第一个SC元组时,返回Student表扫描它的下一个元组,再扫描SC表中具有相同Sno的元组,把它们连接起来。

    ④重复以上步骤直到Student表扫描完

    11、在学习了关系数据库以后,你觉得它主要的好处是什么?它又有哪些缺陷导致它无法胜任某些应用?

    【答】:好处:①对现实事务中的关系描述很清晰 ②数据定义语言和数据操作语言语义化程度较好 ③便于数据库设计的规范化

    1. 保持数据的一致性;
    2. 由于以标准为前提,数据更新的开销小(相同的字段基本都是只有一处);
    3. 存在很多实际成果和专业技术信息(成熟的技术);
    4. 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
    5. 使用方便:通用的SQL语言使得操作关系型数据库非常方便,可以进行join等复杂查询。

    缺陷:

    1. 为了维护一致性所付出的巨大代价就是其读写性能比较差;
    2. 当有数据更新的表做索引或对表结构进行变更时,性能差;
    3. 对简单查询需要快速返回结果的处理;
    4. 高并发读写需求;
    5. 当字段不固定时,关系型数据库处理起来很麻烦;
    6. 进行大量数据的写入处理时。

     

    应用题

    设有关系模式如下:S(Sno, Sname, Age, Sex), SC(Sno, Cno, Grade), C(Cno, Cname, Teacher)。其中 S 表示学生,C 表示课程,SC 表示 选课。Sno 代表学号,Sname 代表学生姓名,Age 代表学生年龄, Sex 代表学生性别,Cno 代表课程号,Grade 代表成绩,Cname 代 表课程名,Teacher 代表任课教师姓名。用 SQL 语句完成:(共 10 分)

    1、查询平均成绩大于 85 分的学生的姓名及其平均成绩(5 分)。

    2、把三个表的查询和插入权限授予用户张明,并允许张明进一步 把这些权限授予其他用户(5 分)。

    【解析】:

    1.

    SELECT Sname, AVG(Grade) FROM

    (SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade

    FROM Student, SC

    WHERE Student.Sno = SC.Sno); /* 自然连接 */

    GROUP BY Sname HAVING AVG(Grade) > 85

     

    2.授权

    GRANT SELECT, INSERT

    ON TABLE S,SC,C

    TO ZHANGMING

    WITH GRANT OPTION

     

    2、设关系模式 R(A,B,C,D,E),F 是 R 上成立的依赖集,F={ AB→C,BC→A,AC →B,D→E },试写出 R 的所有候选码,并说明理由。

    【解析】:(A,B,D)(A,C,D)(B,C,D)

     

    3、设有关系 R(W, X, Y, Z),依赖关系 F={X→Z,WX→Y},判断该关系模式符合第几范式,并说明理由。

    【解析】:因为其存在非主属性部分依赖于码 ,所以其符合第一范式

     

    4、在数据库系统中有如下一个调度 S,它涉及到 5 个不同的事务 T1、T2、T3、T4 和 T5。 判断调度 S 是否为冲突可串行化。如果调度 S 是冲突可串行化的,就请给出与之等价的一 个串行调度序列。

    【解析】:目前的调度为

    S = r2(A) r1(Q) r5(C) w1(Q) r4(A) w2(Q) w1(B) r3(Q) r3(M) r4(Q) r4(M) r5(M) w5(M)

    冲突操作是指不同的事务对同一个数据的读写操作和写写操作:

    Ri (x)与Wj(x) /* 事务Ti读x,Tj写x,其中i≠j*/

    Wi(x)与Wj(x) /* 事务Ti写x,Tj写x,其中i≠j*/

    不能交换(Swap)的动作:

    • 同一事务的两个操作
    • 不同事务的冲突操作

    S能否交换为一个串行化的调度?

    其可以交换为T1T2T3T4T5(具体过程略)

    序列:r1(Q)w1(Q)w1(B)………

     

    6、在查询优化的代数优化方法中,你认为哪条启发式规则是最重要的?为什么?请举例 说明。

    【解析】:选择运算应尽可能先做。这在优化策略中是最重要、最基本的一条,因为选择运算一般使计算的中间结果大大变小

    如图,先选择之后再做连接操作可以减小数据量

    SELECT Sname FROM Student, SC

    WHERE Student.Sno = SC.Sno AND Cno = ‘2’

     

     

    原址链接https://blog.csdn.net/qq_37205708/article/details/94194465?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
    展开全文
  • 数据数据处理 信息=数据+语义(数据处理) 数据管理三个阶段: 人工管理 文件系统 数据库系统 数据库系统的组成: 数据库 数据库用户 计算机硬件系统 计算机软件系统 数据库是储存在计算机内的、有组织的、...

    第一章(填空)

    数据与数据处理

    1. 信息=数据+语义(数据处理)
    2. 数据管理三个阶段:
      1. 人工管理
      2. 文件系统
      3. 数据库系统
    3. 数据库系统的组成:
      1. 数据库
      2. 数据库用户
      3. 计算机硬件系统
      4. 计算机软件系统
    4. 数据库是储存在计算机内的、有组织的、可共享的相关数据的集合
    5. 数据库中存储的是数据以及数据之间的联系
    6. 数据不一致核心原因:数据冗余
    7. 数据库两个特点:集成性、共享性
    8. 数据库用户(3个):
      1. 最终用户
      2. 应用程序员
      3. 数据库管理员
    9. 软件系统主要包括4个部分
      1. 操作系统(OS)
      2. 数据库管理系统(DBMS,核心)
      3. 应用开发工具
      4. 应用系统。
    10. 数据模型
      1. 数据模型是数据库的框架,是数据库系统的核心和基础。

      2. 是现实世界两级抽象的结果

      3. 数据模型3个要素

        1. 数据结构
        2. 数据操作
        3. 数据完整性约束
      4. 数据结构:实体和实体间联系的表达和实现

      5. 数据操作:允许对数据库中数据执行的操作的集合,同时包含相应的操作规则

      6. 数据完整性约束:给出数据及其联系应具有的制约和依赖规则

      7. 数据模型按应用层次分3个部分:

        1. 概念模型(信息世界)
        2. 逻辑模型(计算机世界,DBMS支持的模型)
        3. 物理模型
      8. 相关术语

        1. 实体、属性、实体型、实体集、码、域、联系
        2. 码由一个或多个属性组成,其值可以唯一标识关系中的一个元组
      9. 实体型之间的联系

        1. 一对一
        2. 一对多
        3. 多对多
      10. 概念模型的表示方法:实体-联系(ER)方法——ER图

      11. ER图

        1. 矩形——实体
        2. 椭圆——属性
        3. 菱形——联系
      12. 对应关系

        现实世界 信息世界 计算机世界
        事物总体 实体集 文件
        事物个体 实体 记录
        特征 属性 字段
        事物的联系 实体模型 数据模型
      13. 常见的逻辑模型

        1. 层次模型:自上向下的层次关系(树)
        2. 网状模型
        3. 关系模型(二维表)
        4. 面对对象模型
      14. 数据库系统的内部体系结构从逻辑上分成:三级架构

        1. 外模式(多个,用户级)
        2. 模式(唯一,概念级)
        3. 内模式(唯一,物理级)
      15. 二级映像

        1. 外模式/模式映像(保证数据与程序间的逻辑独立性)
        2. 模式/内模式映像(唯一,保证数据之间的物理独立性)
      16. 数据库的独立性

        1. 逻辑独立性
        2. 物理独立性
      17. 三级架构、二级映像的优点:

        独立、共享、简化接口、安全保密

    关系数据库基础(填空)

    关系模型

    1. 关系模型只包含单一的数据结构:关系

    2. 关系就是由行列组成的二维表

    3. 相关概念

      1. 属性(列,属性名就是字段名,属性值就是字段值)
      2. 域(属性的取值范围)
      3. 元组(一行,记录)
      4. 分量(一个元组中的每一个属性值称为分量,元组是多个分量的集合)
      5. 关系模式(二维表的结构称为关系模式。关系名为R,其属性名分别为A1,A2,…,An,那么关系模式可以表示为R(A1,A2,…,An))
      6. 关系数据库(在关系数据库中,关系模式是型,关系是它的值)
    4. 关系中的每一个分量必须是不可再分的数据项。

      所有属性都是一个单独的值而不是值的集合

    关系模型的完整性约束

    1. 关系模型的组成:

      1. 关系数据结构
      2. 关系操作
      3. 关系完整性约束
    2. 关系模型的3种完整性约束

    3. 实体完整性(对主键的约束,每个关系必须有主码,且主码对于的所有属性值不为空)

      1. 参照完整性(对外部关系键的约束,不允许引用不存在的实体)
      2. 用户定义完整性
    4. 候选码的特点:

      1. 唯一性、最小性
    5. 传统的集合运算:交并差、笛卡尔积

    6. 专门的代数运算

      1. 选择
      2. 投影
      3. 连接
        1. 自然连接是去除重复列的等值连接
        2. 自然连接只能用于两个关系中有共同属性
        3. 自然连接先向关系的垂直方向运算,再向关系的水平方向运算
      4. 除法
    7. 当且仅当R和S没有公共属性:RS=R×SR \Join S = R \times S,当且仅当R和S没有公共属性

    8. 除了笛卡尔积之外,其他集合运算都要求关系符合相容关系

      相容关系:两个关系具有相同的列数,且两个关系格子的第i个属性来自同个域

    9. 关系代数运算是以集合为基础的运算,即操作的对象和结果都是集合

    10. 在一个关系中,列必须是同质的,即每一列的分量都是同类型的数据。

    SQL基础

    1. SQL是结构化查询语言的简称

    2. SQLServer2016的数据库文件由数据文件和日志文件组成

    3. 修改数据库时,为了防止文件信息被破坏,文件的大小和增长容量只能增加

    4. 修改数据库

      alter database <名>

    5. 数据库表基本操作

      1. 6中完整性约束(CONSTRAINT <约束名>
        1. NULL/NOT NULL
        2. UNIQUE
        3. PRIMARY KEY
        4. FOREIGN KEY
        5. CHECK(用于设置字段的取值范围,相关资料: https://www.w3school.com.cn/sql/sql_check.asp)
        6. DEFAULT

    数据操纵与查询

    数据操纵

    1. 查询时,DISTINCT关键字表示去掉重复值
    2. NULL值不同于0、空字符串或空格,它不占用任何空间

    聚合函数

    1. AVG、SUM、MAX、MIN

    2. COUNT统计列值个数

    3. COUNT(*)统计元组个数。使用时无法使用DISTINCT去重

    COUNT对比

    1. count(*)包括了所有的列,相当于行数;不忽略NULL
    2. count(1)忽略所有列;用1代表代码行,不忽略NULL
    3. count(列名)只包括列名那一列;会忽略列值为空的计数,即某个字段值为NULL时,不统计

    分组查询:

    1. HAVINGWHERE对比
    2. where子句作用域基本表和视图,从中选择满足条件的元组。where子句不能用库函数
    3. Having子句作用于元组,从中选择满足条件的组。使用Having应该先进行group by

    连接

    1. ON先执行,WHERE后执行
    2. ON是生成临时表时使用的条件,WHERE是临时表生成后筛选临时表的条件
    3. ON> WHERE> HAVING

    子查询

    1. 顺序:先子查询,获得结果用于构造父查询的查询条件
    2. EXISTSNOT EXISTS不返回任何实际数据,只有逻辑值“真”“假”

    视图与索引

    视图

    1. 视图优点:
    2. 只提取用户需要的数据,便于管理维护
      1. 安全保护机制
      2. 具有一定的逻辑独立性
    3. encryption 视图加密,schemabinding 视图与引用表绑定
    4. 由于视图是一张虚表,所以对视图的更新,最终转换成对基本表的更新
    5. 视图删除后,只会删除该视图在数据字典中的定义,而与该视图有关的基本表中的数据不会受任何影响
    6. 视图是虚表,其数据不进行存储,其记录来自基本表,只在数据库中存储其定义

    索引

    1. 索引是一个单独的、储存在磁盘上的数据结果,它包含所有记录用那的引用指针,可以把它看作一本字典。

    2. 优点:

      1. 提升查询速度
      2. 保证各行数据的唯一性
      3. 减少分组和排序查询的耗时
      4. 建立在外码上的索引可以加速表之间的连接,利于实现数据参照完整性(不允许引用不存在的实体。)
    3. 缺点

      1. 占用额外物理空间
      2. 维护需要花费时间。更新数据后,索引也需要动态维护
    4. 系统会自动对主键创建聚集索引

    5. 非聚集索引的索引排序和物理排序相互独立(物理存储顺序和索引键的顺序不一致),而聚集索引则相关联

    6. 一个数据表可以有多个非聚集索引,只能有一个聚集索引

    7. 唯一索引保证索引中没有重复值

    8. 唯一索引UNIQUE、聚集索引CLUSTERED(clustered,集群)、NONCLUSTERED非聚集索引
      CREATE UNIQUE INDEX

    关系数据库设计理论

    1. 自反律

      1. 如果YXUY \subseteq X \subseteq U,则XYX→YRR上成立。
      2. SN(SNo,SN)SN \rightarrow (SNo, SN),则 (SNo,SN)SN(SNo, SN) \subseteq SN
    2. 增广律

      1. XYX→YRR上成立,且 ZUZ \subseteq U ,则XZYZXZ→YZRR上也成立
      2. (SNo,SN)(Sex,SN)(SNo, SN) \rightarrow (Sex, SN)
    3. 传递率

      1. XYX→YYZY→ZRR上成立,则XZX→ZRR上也成立
    4. 合并律

      1. XYX→YXZX→ZRR上成立,则XYZX→YZRR上也成立
      2. SNoSNSNo \rightarrow SNSNoAgeSNo \rightarrow Age , 则 SNo(SN,Age)SNo \rightarrow (SN, Age)
    5. 伪传递律

      1. XYX→YYWZYW→ZRR上成立,则XWZXW→ZRR上也成立
    6. 分解律

      1. XYX→YZYZYRR上成立,则XZX→ZRR上也成立
      2. SNo(SN,Age)SNo \rightarrow (SN, Age)SNoSN,SNoAgeSNo \rightarrow SN, SNo \rightarrow Age 互逆
    7. 复合律

      1. XYX→YWZW→ZRR上成立,则XWYZXW→YZRR上也成立
    8. 闭包算法

    数据库安全保护

    1. 数据库的安全性:保护数据库以防止非法使用所造成的数据泄露更改破坏

    2. 安全性控制:要尽可能地杜绝所有可能的数据库非法访问

    3. 常用的安全性措施:

      1. 用户标识和鉴定(最外层)
      2. 用户存储权限控制(系统权限和对象权限(后者可由数据对象的创建者授予))
      3. 定义视图
      4. 数据加密
      5. 审计
    4. 在数据库系统中,定义用户存取权限称为授权

    5. 这些授权定义经过编译后以一张授权表的形式存放在数据字典中

    6. 授权粒度越细,授权子系统就越灵活,能够提供的安全性就越完善

    7. SQL Server 2008的安全模型分为三层结构:

      1. 服务器安全管理
      2. 数据库安全管理
      3. 数据库对象的访问权限管理
    8. 角色指令

      角色名称 权限
      public 最基本的数据库角色
      db_accessadmin 可以添加或删除用户标识
      db_backupoperator 可以发出DBCC、CHECKPOINT和BACKUP语句
      db_datareader 可以选择(取)数据库内任何用户表中的所有数据
      db_datawriter 可以更改数据库内任何用户表中的所有数据
      db_ddladmin 可以发出所有DDL语句,但不能发出GRANT(授权)、REVOKE或DENY语句
      db_denydatareader 不能选择(取)数据库内任何用户表中的任何数据
      db_denydatawriter 不能更改数据库内任何用户表中的任何数据
      db_owner 在数据库中有全部权限
      db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格
    9. 完整性规则的组成:

      1. 触发条件
      2. 约束条件
      3. 违约响应
    10. 数据库的完整性:

      1. 保护数据库中数据的正确性、有效性相容性
      2. 防止错误的数据进入数据库造成无效操作。(正确性)
    11. 数据库的安全性防范非法用户和非法操作;
      数据库的完整性防止合法用户使用数据库时向数据库中加入不符合语义的数据。

    12. 完整性措施的防范对象是不合语义的数据

    13. 完整性约束条件是完整性控制机制的核心

    14. 完整性约束的分类

      1. 值的约束(对数据类型、数据格式、取值范围和空值等进行规定)
        和结构的约束(数据之间联系的约束)
      2. 静态约束(年龄必须大于0)和动态约束(年龄只增不减)
    15. 实施完整性约束的5种方法
      约束、规则、默认、存储过程、触发器

    16. 事务的特征ACID准则

      1. 原子性(Atomicity)

        一个事务是一个不可分割的工作单位。事务在执行时,要么全做,要么全不做。不允许只完成事务的一部分。

      2. 一致性(Consistency)

        数据库应该从一个一致状态转变到另一个一致状态。所谓数据库的一直状态是指数据库中的数据满足完整性约束

      3. 隔离性(Isolation)

        如果多个事务并发执行,那么各个事务应该像独立执行一样,一个事务的执行不能被其他事务干扰。

      4. 持久性(Durability)

        持久性指的是一个事务一旦提交,它对数据库中数据的改变就应该是持久的。即使数据库因故障而受到破坏,DBMS也应该能够恢复。

    17. 事物不一致性

      1. 丢失更新:同时操作,覆盖修改
      2. 污读:读取了后来回滚的数据
      3. 不可重读:读取后数据被修改,再次读取发现数据不一致
    18. 封锁

      1. 排它型封锁(Exclusive Lock),写封锁,X封锁,它采用的原理是禁止并发操作。
      2. 共享封锁(Share Lock),读封锁,S锁,它采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。
    19. 封锁协议

      1. 一级封锁:
        1. 防丢失更新
        2. 事务T在修改数据对象之前必须对其加X锁,直到事务结束
      2. 二级封锁:
      3. 防脏读
      4. 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。(也就是说,事务T在可以读取数据R的时候,已经获得S锁,此时其他事务已经提交且结束,R不会再回滚而改变)
      5. 三级封锁:
      6. 防不可重读
      7. 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。
    20. 存储过程的优点

      1. 模块化的程序设计
      2. 高效率的执行
      3. 减少网络流量
      4. 可以作为安全机制使用
    • 三种触发器:DML、DDL、LOGIN
    展开全文
  • 以SQL SERVER2000为例全面介绍数据库原理、操作,同时主要知识点都列举了案例。
  • 整理自中国人民解放军陆军工程大学的数据库原理与应用的MOOC课程 第一章 数据库系统概论 本章知识点 数据管理的三个阶段 1.人工管理 2.文件系统管理 3.数据库系统管理 人工管理 数据管理特点: * 数据面向...

    整理自中国人民解放军陆军工程大学的数据库原理与应用的MOOC课程

     第一章 数据库系统概论

    本章知识点

    数据管理的三个阶段
       1.人工管理
       2.文件系统管理
       3.数据库系统管理

    人工管理
      数据管理特点:
      * 数据面向应用
      * 数据不保存
      * 数据不能共享
      * 不具有数据独立性(数据独立性是指用户的应用程序与数据的逻辑结构和物理结构是相互独立的)

    文件系统管理
      数据管理特点:
       * 由文件系统管理数据
       * 数据可以长期保存
       * 数据是面向应用的
       * 数据共享性
             * 具有了一定的共享性
             * 存在冗余存储
       * 数据独立性
             * 具有设备独立性
             * 不具有数据独立性

    数据库(Database--DB)
       * 数据库是长期存储在计算机内、有组织的统一管理的可共享相关数据的集合
       数据管理的特点:
         * 采用数据模型组织数据
              * 数据模型不仅描述数据本身的特征,还要描述数据之间的联系
         * 数据面向整个应用领域
              * 数据库采用数据模型将整个组织所涉及的相关数据集合在一个全局数据库中,
                被全组织不同的应用共享
         * 数据由数据库管理系统(DBMS)统一管理和控制
         * 数据具有独立性
              * DBMS完成对数据的存储结构的修改,无需修改应用程序,实现了程序与数据的分离
      数据库管理数据的优点
         * 数据的共享性高、数据独立性高、对数据的控制能力强

    元数据(meta-data):数据的描述信息
    数据字典(data dictionary):系统数据库

    数据库管理系统(Database Management System,DBMS)
        功能为用户或应用程序提供访问数据库的方法,包括DB的建立、查询、更新及各种数据控制
                   1.数据库的定义
                      * DBMS提供数据定义语言(Data Definition Language,DDL)来对数据库中的数据对象进行定义,指定其结构和约束等
                   2.数据操纵
                      * DBMS提供数据操纵语言(Data Manipulation Language,DML)来实现对数据库的基本操作,包括查询数据库以获得所
                        需数据、更新数据库以反映现实世界的变化等
                   3.数据的组织存储和管理
                      * 分类组织、存储和管理各种数据,包括数据字典(存放数据库的定义、数据库运行是的统计信息等)、用户数据、
                        数据的存取路径等
                      * 确定以何种文件结构和存取方式在磁盘上组织这些数据
                      * 实现数据之间的联系
                   4.数据库的事务管理和运行管理(控制功能)
                      * 对数据库的建立、运用和维护等进行统一管理、统一控制,保证数据的安全性、完整性、多用户的并发操作和发生故
                        障后的系统恢复
                   5.数据库的维护
                      * 数据库数据的载入、转换
                      * 数据库的转储、恢复
                      * 数据库的重组和性能监视、分析

    数据库系统(Database System,DBS)
        * 计算机系统中引入数据库的系统
        * 采用数据库技术存储、维护数据,向应用系统提供数据支持


     数据库管理员(DataBase Administrator,DBA)
         * 负责全面管理和控制数据
         * 确定数据库中的信息内容和逻辑结构
         * 确定数据库的存储结构和存取策略
         * 定义数据库的安全性和完整性约束条件
         * 监控数据库的使用和运行
         * 数据库的改进和重组重构

    大多数DBMS遵循三级模式结构
      1.外模式
      2.概念模式
      3.内模式



    DBMS通过三个层次的抽象,可向用户屏蔽数据的复杂性,隐藏关于数据存储和维护的某些细节,提高了数据独立性,减轻了用户使用
    系统的负担。

    模式

    实例

    概念模式

     一个数据库只有一个概念模式,是对概念级数据视图的描述。
    数据库概念模式以某一种数据模型为基础,综合考虑所有用户的需求,并将这些需求有机地结合成一个逻辑整体。
    概念模式是数据库模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序所使用的应用开发工具以及
    高级程序设计语言无关。
    定义概念模式时不仅要定义数据的逻辑结构,而且要定义数据间的联系,定义与数据有关的安全性、完整性要求。

    外模式

    对概念模式所描述的全局数据,数据库用户在应用需求、看待数据的方式、存取数据的权限等方面存在差异,能够看见和使用的
    局部数据是不同的,所以一个数据库可以对应多个外模式,来描述外部级不同用户的数据视图。
    每个外模式描述的就是一个特定用户所感兴趣的那部分数据库的逻辑结构和特征。
    需要说明的是同一外模式,可以为某个用户的多个应用程序所使用,但一个应用程序只能使用一个外模式。

    内模式(internal schema)

    一个数据库只有一个内模式。
    内模式是数据库物理存储结构和存储方式的描述,是数据在数据库内部的表示方式,是内部级数据视图的描述,也称存储模式。
    内模式独立于具体的存储设备,不考虑具体存储设备的物理特性,而是假定数据存储在一个无限大的线性地址空间中。


    某个学生选课系统关系数据库中学生信息的三级模式

    概念模式中,数据库中包含了学生S表的信息,每个学生记录都有学号SNO、姓名SN、性别SEX、出生日期SB和所在系SD五个属性,
                          并定义了了每个属性的数据类型。
    在内模式中,学生信息由一个长度为76字节的存储记录类型来表示,其中包括12个字节的前缀,主要存储如记录长度、模式指针等控制
                          信息和对应学生的五个属性的五个数据字段。此外该存储记录按学生学号字段进行索引。
    在外模式中,使用过程化SQL编程的用户对应一个数据库的外部视图,每个学生的信息由三个变量来表示,其中两个变量对应于概念模
                          式中,学生S表中的学号SNO和姓名SN属性。还有一个变量对应概念模式中其他表中的数据。
                          该用户根据过程化SQL的规则用变量声明来定义外模式,使用ODBC编程的用户也对应一个外部视图,每个学生的信息由
                          四个变量来表示,对应于概念模式中学生S表中的学号SNO、姓名SN、性别SEX和出生日期SB四个属性。根据C语言的规
                          则来定义外模式,该用户不需要学生的所在系SD的信息。

    从某种程度上来讲,概念模式和内模式之间的关系,可以看作是设计与实现的关系。
    而概念模式和外模式之间的关系,可以看作是全局和局部的关系。


    三级模式只是对数据在不同层次上的抽象视图的描述,而实际的数据都存储在物理数据库上。

    DBMS的工作模式

    如果有一请求要检索数据库,那么从物理数据库中,提取出来得数据必须进行转化,以便与用户外模式相匹配。
    在各层间完成请求和结果转换的过程称为映射。
    数据库管理系统在三级模式之间提供了二级映射。

    二级映射

    外模式/概念模式间的映射存在于外部级和概念级之间,用于定义用户的外模式和概念模式的对应关系。
    概念模式/内模式间的映射存在于概念级和内部级之间,用于定义概念模式和内模式的对应关系。
    由于用户所见的局部数据库的逻辑数据结构与概念级的全局的逻辑数据结构可能不一致,例如:字段可能有不同的数据类型、字段名和
    记录名可能改变、几个概念字段可能合成一个单一的外部字段等等。
    因此需要说明特定的外模式和概念模式之间的对应性。对于每一个外模式,都对应一个外模式/概念模式映射。
    由于数据全局逻辑结构与存储结构是不一样的,需要说明概念记录和字段在内部级是如何表示的。由于数据库只有一个概念模式和一个
    内模式,则概念模式/内模式映射是唯一的。
    应用程序依赖于外模式,独立于概念模式和内模式。

    小结:

    大多数DBMS并不是将这三层模式完全分离开来,而只是在一定程度上支持三层模式体系结构。比如:有些DBMS可能在概念模式中还
    包括一些物理层的细节。
    并不是所有的DBMS都具有这种三级结构但ANSI/SPARC体系结构基本上能很好地适应大多数系统。

    数据独立性包括数据的物理独立性和逻辑独立性。
    数据结构是数据对象在计算机中的组织方式。
    数据的逻辑结构是用户可见的数据组织方式。
    数据的物理结构是数据在物理存储空间中的存储方式和存放方法。

    数据独立性




    在数据面向应用的人工管理数据方法中,数据需要由应用程序自己设计、说明和管理。
    程序员在编写程序时自己规定数据的存储结构、存取方法和输入方式等,当数据的存储结构发生变化时,必须由应用程序做相应的修改,
    对数据进行重新定义,应用程序与其所处理的数据是相互依赖的,数据不具有独立性。



    用模式定义语言将有关数据结构的描述存储在DBMS的数据字典中,应用程序通过DBMS从数据字典中得到数据库的结构信息,来存取数据库中的数据。
    数据库中的数据在磁盘上的存储由DBMS管理,用户不需要了解数据库的物理存储结构。

    概念模式/内模式间的映射,定义概念模式和内模式的对应关系。当数据库的存储结构发生改变,也就是数据库的内模式改变了,那么只要对概念模式/内模式的映射进行相应的修改,可使概念模式尽可能保持不变。将内模式变化所带来的影响与概念模式隔离开来,当然对外模式和应用程序的影响更小,从而保证了数据的物理独立性。

    外模式/概念模式间的映射,定义用户的外模式和概念模式的对应关系,当数据的逻辑结构发生变化,比如:在关系数据库中增加新的关系、新的属性,改变属性的数据类型等,也就是数据库的概念模式改变了,那么只要对各个外模式/概念模式间的映射进行相应的修改,比如:修改用户数据视图的定义等,可以使外模式保持不变。
    由于应用程序是在外模式描述的数据结构上编写的,依赖于外模式从而应用程序不必修改,保证了数据的逻辑独立性,相应地也无需修改外模式的能力。

    小结:

    展开全文
  • MYSQL数据库原理与应用-个人总结(上)

    千次阅读 多人点赞 2020-12-26 20:18:40
    此复习为个人整理的有关MySql的复习,大量知识点来自老师上课复习、个人总结、以及部分网上资料,以便能够提供给自己复习时的内容。此资料含有大量的执行语句,并且每一条都是自己亲自试验,只得没问题之后才敢放...
  • MySQL数据库原理应用;项目6 查询维护学生信息管理数据表;复习回顾;知识点导入;任务6-3 理解嵌套查询;在SQL语言中一个SELECTFROMWHERE语句称为一个查询块将一个查询块嵌套在另一个查询块的WHERE子句或HAVING子句...
  • 名词积累: 数据库(Database):存放和提供...数据库系统(Database System):包括数据库、DBMS、应用系统、数据库管理员(DBA) 主键(Primary Key):用于唯一的标识表中的某一条记录的属性或属性的集合。
  • 名词积累: 数据库(Database):存放和提供...数据库系统(Database System):包括数据库、DBMS、应用系统、数据库管理员(DBA) 主键(Primary Key):用于唯一的标识表中的某一条记录的属性或属性的集合。
  • 考察知识点: 常用系统标量函数: a、substring 函数用法 语法格式: substring(表达式,起始,长度) 返回表达式中指定的部分数据,参数“表达式”可为字符串、二进制串、text、image字段或表达式:“起始”、...
  • MySQL数据库原理应用;项目6 查询维护学生信息管理数据表;复习回顾;复习回顾;复习回顾;复习回顾;复习回顾;知识点导入;任务6-6 数据更新;语句格式;说明;例6.71 向course表中插入一条课程记录;语句格式;例6.73向sc...
  • 数据库系统原理与设计 1.1数据库系统 数据管理技术经历了人工管理、文件系统和数据库管理系统3个阶段。 1.人工管理的数据是面向应用程序的。 2.文件系统阶段已经有了操作系统,有专门的软件对数据进行统一管理。 3....
  • 第一章 数据库基础 1.数据库——是一种依照特定数据模型组织、存储和管理数据的文件集合。...由用户、数据库应用程序、数据库管理系统和数据库四个部分组成。 4.数据模型 5.数据模型的分类 层次模型 网络模型 关系模型

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 651
精华内容 260
关键字:

数据库原理与应用知识点