Database
数据库知识点整理
第1章 绪论
- 了解
- 数据管理技术的产生和发展过程
- 数据库系统优点
- 层次数据模型及网状数据模型基本概念
- 数据库系统的组成
- 数据库管理员(DBA)的职责
- 掌握
- 概念模型的基本概念
- 关系数据模型的相关概念
- 数据库系统三级模式和两级映像的体系结构
- 数据库系统的逻辑独立性和物理独立性
- 知识点
- 数据、数据库、数据库管理系统、数据库系统
- 数据(Data):描述事物的符号记录称为数据。数据与其语义是不可分的
- 数据库(Data Base):数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
- 数据库系统(Data Base System):在计算机系统中引入数据库后的系统构成。一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
- 数据库管理系统(DataBase Management System):数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。DBMS主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。
- 数据库的数据具有【永久储存】、【有组织】、【可共享】三个基本特点
- DBS包括DB、DBMS、DBA
- 使用数据库系统的好处
- 使用数据库系统的好处是由数据库管理系统的特点或优点决定的
- 可以大大提高应用开发的效率
- 当数据的逻辑结构需要改变时,开发人员不必修改应用程序,或者只需要修改很少的应用程序
- 可以减轻DBA维护系统的负担
- 便于数据的集中管理、控制数据冗余、提高数据的利用率和一致性,又有利于应用程序的开发和维护
- 文件系统与数据库系统的区别和联系
- 区别
- 文件系统面向某一应用程序、共享性差、冗余度大、数据独立性差、记录内有结构、整体无结构、由应用程序自己控制
- 数据库系统面向现实世界、共享度高、冗余度小、具有较高物理独立性和一定的逻辑独立性、整体结构化、用数据模型描述、由数据库管理系统提供数据的安全性、完整性、并发控制和恢复能力
- 联系
- 都是计算机系统中管理数据的软件
- 文件系统是操作系统的重要组成部分,而DBMS是独立于操作系统的软件。但是DBMS是在操作系统的基础上实现的,数据库中的数据的组织和存储是通过操作系统中的文件系统来实现的
- 区别
- 适用于文件系统或数据库系统的例子
- 适用于文件系统:数据的备份、软件或应用程序使用过程中的临时数据存储;早期功能比较简单、比较固定的应用系统(照片、短信、微信)
- 适用于数据库系统:企业或部门的信息系统(人事管理系统、学生管理系统)
- 数据库系统特点
- 数据结构化(数据库系统与文件系统的本质区别)
- 数据共享性高,冗余度低,易扩充
- 数据独立性高
- 数据独立性包括数据的【物理独立性】和数据的【逻辑独立性】
- 【物理独立性】:用户的应用程序与数据库中数据的物理存储是相互独立的
- 【逻辑独立性】:用户的应用程序与数据库的逻辑结构是相互独立的
- 数据库管理系统的模式结构和二级映像功能保证了数据库中的数据具有很高的物理独立性和逻辑独立性。
- 数据独立性包括数据的【物理独立性】和数据的【逻辑独立性】
- 数据由DBMS统一管理和控制。提供统一的数据控制功能
- 数据的安全性保护:保护数据以防止不合法的使用造成的数据的泄密和破坏
- 数据的完整性检查:将数据控制在有效的范围内或保证数据之间满足一定的关系
- 并发控制:对多用户的并发操作加以控制和协调,保证并发操作的正确性
- 数据库恢复:当计算机系统发生硬件故障、软件故障,或者由于操作员的失误以及故意的破坏影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失时,能将数据库从错误状态恢复到某一已知的正确状态(亦称为完整状态或一致状态)
- 什么是数据库
- 数据库是长期存储在计算机内有组织的大量的共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。
- DBMS在数据库建立、运用和维护时对数据库进行统一控制,以保证数据的完整性、安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对系统进行恢复。
- 数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的新阶段。
- DBMS的主要功能
- 数据库定义功能
- 数据组织、存储和管理功能
- 数据操纵功能
- 数据库的事务管理和运行管理
- 数据库的建立和维护功能
- 其他功能,如不同数据库之间的互访和互操作功能等
- 概念模型、逻辑模型和物理模型
- 概念模型实际上是现实世界到机器世界的一个中间层次。概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。
- 概念模型强调语义表达能力,简单清晰易于用户理解
- 逻辑模型(数据模型):按计算机系统的观点对数据建模,用于数据库管理系统的实现。
- 物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方法和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
- 实体、实体型、实体集、实体之间的联系、属性、码、实体联系图(E-R图)
- 实体:客观存在并可相互区分的事物
- 实体型:用实体名及其属性名集合来抽象和刻画同类实体
- 实体集:同型实体的集合
- 实体之间的联系
- 实体(型)内部的联系:组成实体的各属性之间的联系
- 实体(型)之间联系:不同实体集之间的联系。一对一、一对多、多对多
- 属性:实体所具有的某一特性,一个实体可由若干个属性来刻画。
- 码:唯一标识实体的属性集称为码。
- 实体联系图(E-R图):提供了表示实体型、属性和联系的方法
- 实体型:用矩形表示,矩形框内写明实体名。
- 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来。
- 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。
- 数据模型、数据模型的作用、数据模型三要素
- 数据模型是数据库系统中最重要的概念之一。数据模型是数据库中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架
- 一般地讲,数据模型是严格定义的概念的集合。这些概念精确地描述系统的静态特性、动态特性和完整性约束条件。
- 数据模型是数据库系统的基础。任何一个DBMS都以某一个数据模型为基础,或者说支持某一个数据模型
- 数据模型通常由【数据结构】、【数据操作】、【完整性约束条件】三部分组成
- 层次模型概念
- 有且只有一个结点没有双亲结点,这个节点称为根节点
- 根以外的其他结点有且只有一个双亲结点
- 网状模型概念
- 允许一个以上的结点无双亲
- 一个结点可以有多于一个的双亲
- 层次数据库、网状数据库的优缺点
- 层次数据库
- 优点
- 层次模型数据结构简单清晰
- 层次数据库查询效率高
- 层次数据模型提供了良好的完整性支持
- 缺点:现实世界很多联系是非层次性的,层次模型不能自然地表示这类联系
- 优点
- 网状数据库
- 优点
- 能够更为直接地描述现实世界
- 具有良好的性能,存取效率较高
- 缺点
- 结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。
- 网状数据库的数据定义语言(DDL)、数据操纵语言(DML)比较复杂,要求用户掌握数据库结构和存取路径,不容易使用
- 优点
- 层次数据库
- 关系、属性、域、元组、码、分量、关系模式
- 关系模型由【关系数据结构】、【关系操作集合】、【关系完整性约束】三部分组成。在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成
- 关系:一个关系对应通常说的一张表
- 属性:表中的一列
- 域:属性的取值范围
- 元组:表中的一行
- 码:表中的某个属性组,它可以唯一确定一个元组
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,一般表示为 关系名(属性1,属性2,…,属性n)
- 关系数据库的特点
- 优点
- 关系模型与非关系模型不同,它具有严格的数学基础
- 关系模型的概念单一
- 关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
- 缺点:存取路径对用户透明,查询效率往往不如非关系数据模型
- 优点
- 数据库系统三级模式、两级映像
- 三级模式结构由外模式、模式、内模式组成
- 外模式:亦称子模式或用户模式,局部数据的逻辑结构和特征的描述,是数据库用户的数据视图
- 模式:亦称逻辑模式,是数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式通常是模式的子集
- 内模式:亦称存储模式,对数据的物理结构和存储方式的描述
- 两级映像:外模式/模式映像、模式/内模式映像。在内部实现了三个抽象层次的联系和转换,保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性
- 数据定义语言、数据操纵语言
- 数据定义语言:用来定义数据库模式、外模式和内模式的语言
- 数据操纵语言:用来对数据库中的数据进行查询、插入、删除和修改的语句
- 数据与程序的物理独立性、逻辑独立性
- 【数据与程序的物理独立性】:当数据库的存储结构改变了,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变,这就是数据与程序的物理独立性,简称数据的物理独立性。
- 【数据与程序的物理独立性】:当数据的逻辑结构即模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变,从而应用程序不必修改,这就是数据与程序的逻辑独立性,简称数据的逻辑独立性。
- DBMS在三级模式之间提供的两级映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
- 数据库系统组成
- 数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
- 数据库管理员、系统分析师、数据库设计人员、应用程序员的职责
- 数据库管理员:全面负责管理和控制数据库系统。具体职责包括:
- 决定数据库的信息内容和结构
- 决定数据库的存储结构和存取策略
- 定义数据的安全性要求和完整性约束条件
- 监控数据库的使用和运行
- 数据库系统的改进和重组重构
- 系统分析员:负责应用系统的需求分析和规范说明,他要和用户及DBA相结合,确定系统的硬件软件配置,并参与数据库系统的概要设计
- 数据库设计人员:负责数据库中数据的确定和数据库各级模式的设计。参加用户需求调查和系统分析,然后进行数据库设计
- 应用程序员:负责设计和编写应用程序的程序模块,并进行调试和安装
- 数据库管理员:全面负责管理和控制数据库系统。具体职责包括:
- 数据、数据库、数据库管理系统、数据库系统
- 补充
- 数据库的核心和基础是【数据模型】
- 实现时将现实世界抽象为信息世界的是【概念模型】
- 文件系统阶段比人工管理阶段的优势是【数据可以长期保存】
- 保证数据库系统数据具有较高逻辑独立性的是【外模式/模式映像】
- IBM公司的IMS数据库管理系统采用【层次模型】
- DBMS是一类系统软件,建立在【操作系统】之上
- 网状数据库【一个结点可以由多于一个的双亲】
- 从逻辑模型到物理模型的转换一般由DBMS完成
- 长期存储在计算机内,有组织的、可共享的大量数据集合是【数据库】
- 【人工管理阶段】需要应用程序管理数据
- 通常情况下,外模式是模式的子集
- 通常按照数据结构的类型来命名数据模型
- 常用的数据模型有:层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型
- 最经常使用的概念模型是【E-R图】
- 数据库管理系统提供的数据控制方面的功能包括:数据的【安全性】保护、数据的【完整性】检查、【并发控制】、数据库恢复
- 层次模型和网状模型中的单位是基本层次联系,这是指两个【记录(型)】以及它们之间的【一对多】(包括一对一)的联系
- 数据模型的组成要素中描述系统的静态特性和动态特性的分别是【数据结构】和【数据操纵】
- 试述数据管理的文件管理阶段和数据库系统阶段“数据独立性”有何不同?
- 答:文件系统中数据被组织成相互独立的数据文件,程序按照文件名访问数据,“数据独立性”是一种“设备独立性”。数据库系统的“数据独立性”包括“物理独立性”和“逻辑独立性”,物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的;逻辑独立性是指用户的应用与数据库的逻辑结构是相互独立的。
- 文件系统管理数据的缺点:数据共享性差,冗余度大;数据独立性差
- 三级模式中,描述数据库中全体数据的全局逻辑结构和特征的是【模式】
- 层次模型不能直接表示【m:n关系】
- DBS是一个集合体,包含数据库、计算机硬件、软件和【数据库管理员】
- 数据库(DB),数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是【DBS包括DB和DBMS】
- 【人工管理阶段】没有专门的软件对数据进行管理
- 【数据冗余度高】不属于数据库系统特点
- 数据库系统的数据独立性体现在【不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序】
- 要保证数据库的数据独立性,需要修改的是【三层之间的两种映射】
- 要保证数据库的逻辑数据独立性,需要修改的是【模式与外模式的映射】
- 用户或应用程序看到的那部分局部逻辑结构和特征的描述是【子模式】,它是模式的逻辑子集
- 【数据库管理系统设计】不是DBA数据库管理员的职责
- 给出三个实际部门的E-R图,要求实体型之间具有一对一,一对多,多对多各种不同的联系
第2章 关系数据库(重点)
了解:关系数据结构及形式化定义、关系操作、关系的完整性、关系代数
掌握
- 关系模型的三个组成部分及各部分所包括的主要内容
- 关系数据结构及其形式化定义
- 关系的三类完整性约束
- 关系代数及其运算,包括并、交、差、选择、投影、连接、除、广义笛卡儿积
知识点
关系模型三个组成部分
- 关系数据结构
- 关系操作集合
- 关系完整性约束
- 实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值
- 参照完整性规则:若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
- 用户定义的完整性:针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
关系数据语言的特点和分类
- 关系代数语言
- 关系演算语言
- 具有关系代数和关系演算双重特点的语言
域、笛卡儿积、关系、元组、属性
- 域:域是一组具有相同数据类型的值的集合
- 笛卡儿积:D1D2…*Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
- 关系:在域D1,D2,…,Dn上笛卡儿积D1D2…*Dn的子集,表示为R(D1,D2,…,Dn)
- 元组:关系中的每个元素是关系中的元组
- 属性:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,对每列起一个名字,称为属性
候选码、主码、外码
- 候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)
- 主码:若一个关系有多个候选码,选定其中一个为主码(primary key)
- 外码:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码(foreign key),简称外码
关系模式、关系、关系数据库
- 关系模式:关系的描述称为关系模式(relation schema),
- 关系模式形式化表示为R(U,D,DOM,F)。R为关系名,U为组成该关系的属性名集合,D为属性组U中属性来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合
- 关系:在域D1,D2,…,Dn上笛卡儿积D1D2…*Dn的子集,表示为R(D1,D2,…,Dn)
- 关系是关系模式在某一时刻的状态或内容
- 关系数据库:关系数据库也有型和值之分。
- 关系数据库的型:称为关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。
- 关系数据库的值:是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。
关系模式和关系的区别
- 关系模式是型;关系是值,是关系模式的实例
关系模型的完整性规则
- 实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值
- 参照完整性规则:若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
- 用户定义的完整性:针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
用关系代数完成查询
设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式: S( SNO,SNAME,STATUS,CITY); P(PNO,PNAME,COLOR,WEIGHT); J(JNO,JNAME,CITY); SPJ(SNO,PNO,JNO,QTY); 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成;零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成;供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
求供应工程J1零件的供应商号码SNO:
求供应工程J1零件P1的供应商号码SNO:
求供应工程J1零件为红色的供应商号码SNO:
求没有使用天津供应商生产的红色零件的工程号JNO:
求至少用了供应商S1所供应的全部零件的工程号JNO:
等值连接与自然连接区别和联系
- 自然连接是一种特殊的等值连接,它要求两个关系中进行比较分量,即连接属性必须是相同的属性组,并且要在结果中去掉其中一个的重复属性
代数运算,用基本运算表示其他运算
基本运算
- 【并】:RUS仍为n目关系,由属于R或属于S的元组组成
- 【差】:R-S仍为n目关系,由属于R而不属于S的所有元组组成
- 【笛卡儿积】(全排列组合):RS列:(n+m)列元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组,行:k1k2各元组
- 【投影】:从R中选择出若干属性列组成新的关系
- πA(R) = { t[A] | t∈R }
- 例:查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影 πSname,Sdept(Student)
- 【选择】:在关系R中选择满足给定条件的诸元组
- σF(R) = {t|t∈R∧F(t)= ‘真’} F:选择条件,是一个
- 例:查询信息系(IS系)全体学生 σSdept = ‘IS’ (Student)
其他运算
【交】:RnS仍为n目关系,由既属于R又属于S的元组组成
【连接】:从两个关系的笛卡儿积中选取属性间满足一定条件的元组
【除】:给定关系R(X,Y) 和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合,R÷S = {tr[X] | tr∈R ∧ πY(S) 真包含于 Yx }
补充
关于关系模型
- 一个关系至少要有一个候选码
- 行、列的次序可以任意交换
- 一个列的值只能来自一个域
- 不同的列应有不同的列名
- 一个码是【可有多个或者一个其值能够唯一表示该关系模式中任何元组的属性组成】
- 实体以及实体之间的联系都可以使用相同的结构类型来表示
- 非主属性不可能出现在任何候选码中
候选码都可以唯一地标识一个元组
关系操作中,操作的对象和结果都是【集合】
“性别”属性要求只能取“男”/“女”,这属于【用户定义的完整性】
两个关系R(A,B,C)和S(B,C,D)自然连接,得到结果包含【4】列
在左外连接中,保留的是左边关系中所有的元组
在关系模型中,关系操作包括【查询】【插入】【修改】【删除】
关系模型包括8种查询操作,【并】【笛卡儿积】【选择】【投影】【差】是基本操作
职工([职工号],姓名,年龄,部门号)和部门([部门号],部门名称)存在引用关系,其中【职工】是参照关系,【部门号】是外码
候选码和主码的关系
- 若关系中的某一属性组的值能唯一标识一个元组,该属性组称为候选码
- 如果一个关系有多个候选码,其中一个被选为主码
- 候选码可以有多个,主码是其中的一个
什么是关系完备性?关系演算在语言表达能力上是完备的吗?
- 关系完备性是指一个查询语言能够表示关系代数可以表示的所有查询。
- 关系演算具有完备的表达能力
现有如下关系:患者(患者编号,患者姓名,性别,出生日起,所在单位);医疗(患者编号,患者姓名,医生编号,医生姓名,诊断日期,诊断结果)其中,医疗关系中的外码是【医生编号和患者编号】
现有一个关系:借阅(书号,书名,库存数,读者号,借期,还期),假如同一本书允许一个读者多次借阅,但不能同时对一种书借多本,则该关系模式的外码是【书号+读者号+借期】
关系模型中实现实体间 N:M 联系是通过增加一个【关系】实现
关系代数运算是以【集合运算】为基础的运算
关系数据库管理系统应能实现的专门关系运算包括【选择、投影、连接】
五种基本关系代数运算是【∪ - × σ π】
关系代数表达式的优化策略中,首先要做的是【尽早执行选择运算】
关系数据库中的投影操作是指从关系中【抽出特定字段】
从一个数据库文件中取出满足某个条件的所有记录形成一个新的数据库文件的操作是【选择】操作
关系代数中的连接操作是由【选择和笛卡尔积】操作组合而成
自然连接是构成新关系的有效方法。一般情况下,当对关系R和S是用自然连接时,要求R和S含有一个或者多个共有的【属性】
假设有关系R和S,在下列的关系运算中,【R×S】运算不要求:“R和S具有相同的元数,且它们的对应属性的数据类型也相同”
假设有关系R和S,关系代数表达式R-(R-S)表示的是【R∩S】
有关系SC(S_ID,C_ID,AGE,SCORE),查找年龄大于22岁的学生的学号和分数,正确的关系代数表达式是【πS_ID,SCORE (σ age>22 (SC) ) 】【πS_ID,SCORE (σ age>22 (πS_ID,SCORE,AGE (SC) ) ) 】
下面四个关系表达式是等价的,是判别它们的执行效率【E3最快】
E1 =πA (σ B=C ∧ D=E′ (R×S) )E2 =πA (σ B=C (R× σD=E′ (S) )E3 =πA (R∞B=CσD=E′(S) )E4 =πA (σD=E′ (R∞B=C S) )综合题
第3章 关系数据库标准语言SQL(重点)
了解
- SQL语言发展过程
- 关系数据库技术和关系数据库管理系统RDBMS产品的发展过程
掌握
- SQL语言的特点和优点
- 面向过程的语言和SQL语言的区别
- 关系数据库系统为数据库应用系统的开发提供良好环境,减轻了用户负担,提高用户生产率的原因
- 用SQL语言完成对数据库的增删改查,特别是各种查询
知识点
SQL的特点
- 综合统一。SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体
- 高度非过程化。用 SQL 语言进行数据操作, 只要提出 “做什么”,而无需指明 “怎么做”,因此无需了解存取路径,存取路径的选择以及 SQL 语句的操作过程由系统自动完成。
- 面向集合的操作方式。 SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
- 以同一种语法结构提供两种使用方式。 sQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言, 它能够独立地用于联机交互的使用方式; 作为嵌入式语言, 它能够嵌入到高级语言程序中,供程序员设计程序时使用。
- 语言简捷,易学易用。
在DROP TABLE时,RESTRICT和CASCADE的区别
- RESTRICT表示表的删除是有限制条件的。要删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则表不能被删除
- CASCADE表示表的删除没有限制条件,在删除基本表的同时,相关的依赖对象(如视图)都将被删除
有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式
- (1)SELECT * FROM S WHERE A=10
- (2)SELECT DISTINCT A,B FROM S
- (3)SELECT A,B,S.C,S.D,E,F FROM S,T WHERE S.C=T.C AND S.D=T.D
- (4)SELECT A,B,S.C,S.D,T.C,T.D,E,F FROM S,T WHERE S.C=T.C
- (5)SLEECT A,B,S.C,S.D,T.C,T.D,E,F FROM S,T WHERE A<E
- (6)SELECT S1.C,S1.D,T.C,T.D,E,F FROM T,(SELECT DISTINCT C,D FROM S) AS S1
用SQL语句建立第2章习题6中的4个表,针对建立的4个表用SQL语言完成第2章习题6中的查询
- 建S表 S(SNO,SNAME,STATUS,CITY);
CREATE TABLE S(SNO CHAR(3). SNAME CHAR(10), STATUS CHAR(2), CITY CHAR(10)); - 建P表 P(PNO,PNAME,COLOR,WEIGHT);
CREATE TABLE P(PNO CHAR(3), PNAME CHAR(10), COLOR CHAR(4), WEIGHT INT); - 建J表 J(JNO,JNAME,CITY);
CREATE TABLE J(JNO CHAR(3), JNAME CHAR(10),CITY CHAR(10)); - 建SPJ表 SPJ(SNO,PNO,JNO,QTY);
CREATE TABLE SPJ(SNO CHAR(3), PNO CHAR(3),JNO CHAR(3), QTY INT); - 求供应工程J1零件的供应商号码SNO
SELECT SNOFROM SPJWHERE JNO=’J1’; - 求供应工程J1零件P1的供应商号码SNO
SELECT SNOFROM SPJWHERE JNO=’J1’ AND PNO=’P1’; - 求供应工程J1零件为红色的供应商号码SNO
SELECT SNOFROM SPJWHERE JNO=’J1’ AND PNO IN (SELECT PNO FROM P WHERE COLCO=‘红’);或SELECT SNOFROM SPJ,PWHERE JNO=’J1’ AND SPJ.PNO=P.PNO AND COLOR=’红’; - 求没有使用天津供应商生产的红色零件的工程号JNO
SELECT JNOFROM JWHERE NOT EXISTS (SELECT * FROM SPJ WHERE SPJ.JNO=J.JNO AND SNO IN (SELECT SNO FROM S WHERE CITY=’天津’) AND PNO IN (SELECT PNO FROM P WHERE COLOR=’红’));或SELECT JNOFROM JWHERE NOT EXISTS (SELECT * FROM SPJ,S,P WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO AND S.CITY=’天津’ AND P.COLOR=’红’); - 求至少用了供应商S1所供应的全部零件的工程号JNO
SELECT DISTINCT JNOFROM SPJ SPJZWHERE NOT EXISTS (SELECT * FROM SPJ SPJX WHERE SNO=’S1’ AND NOT EXISTS (SELECT * FROM SPJ SPJY WHERE SPJY.PNO=SPJX.PNO AND SPJY.JNO=SPJZ.JNO));
- 建S表 S(SNO,SNAME,STATUS,CITY);
针对习题3中的4个表,用SQL语言完成以下各项操作
- 找出所有供应商的姓名和所在城市。
SELECT SNAME,CITY FROM S; - 找出所有零件的名称、颜色、重量。
SELECT PNAME,COLOR,WEIGHT FROM P; - 找出使用供应商 S1 所供应零件的工程号码。
SELECT DIST JNO FROM SPJ WHERE SNO=’S1’; - 找出工程项目 J2 使用的各种零件的名称及其数量。
SELECT P.PNAME,SPJ.QTY FROM P,SPJWHERE P.PNO=SPJ.PNO AND SPJ.JNO=’J2’; - 找出上海厂商供应的所有零件号码。
SELECT DISTINCT PNO FROM SPJWHERE SNO IN (SELECT SNO FROM S WHERE CITY=’上海’); - 找出使用上海产的零件的工程名称。
SELECT JNAME FROM SPJ,S,JWHERE S.SNO=SPJ.SNO AND S.CITY=’ 上海 ‘ AND J.JNO=SPJ.JNO或SELECT JNAME FROM J WHERE JNO IN (SELECT JNO FROM SPJ, S WHERE SPJ. SNO=S.SNO AND S.CITY=’上海’); - 找出没有使用天津产的零件的工程号码。
SELECT JNO FROM J WHERE NOT EXISTS (SELECT * FROM SPJ WHERE SPJ.JNO=J.JNO AND SNO IN (SELECT SNO FROM S WHERE CITY=‘天津’)); 或 SELECT JNO FROM J WHERE NOT EXISTS (SELECT *1 FROM SPJ, S WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND S.CITY=‘天津’); - 把全部红色零件的颜色改成蓝色。
UPDATE P SET COLOR=’蓝’ WHERE COLOR=’红’ ; - 由S5供给J4的零件P6改为由S3供应,请作必要的修改。
UPDATE SPJ SET SNO=’S3’ WHERE SNO=’S5’ AND JNO=’J4’ AND PNO=’P6’; - 从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。
DELETE FROM SPJ WHERE SNO=’S2’; 或 DELETE FROM S WHERE SNO=’S2’; 注意删除顺序,应该先从SPJ表中删除供应商S2所供应零件的记录,然后从从S表中删除S2。 - 请将 (S2,J6,P4,200) 插入供应情况关系。
INSERT INTOSPJ(SNO, JNO, PNO, QTY) VALUES (S2,J6,P4,200); 或 INSERT INTO SPJ VALUES (S2,P4,J6,200);
- 找出所有供应商的姓名和所在城市。
基本表、视图,两者的区别和联系
- 基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
- 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
视图的优点
- 视图能够简化用户的操作。
- 视图使用户能以多种角度看待同一数据。
- 视图对重构数据库提供了一定程度的逻辑独立性。
- 视图能够对机密数据提供安全保护。
所有的视图是否都可以更新?为什么?
- 不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。如《概论》3.5.1中的视图S_G(学生的学号及他的平均成绩)
CREAT VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade)FROM SCGROUP BY Sno; - 要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。
- 不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。如《概论》3.5.1中的视图S_G(学生的学号及他的平均成绩)
哪类视图是可以更新的,哪类视图是不可更新的? 各举一例说明
- 基本表的行列子集视图一般是可更新的。如《概论》3.5.3中的例1。
- 若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。如《概论》3.5.3中的S_G视图。
综合题
请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:(1)找出三建工程项目使用的各种零件代码及其数量。(2)找出供应商S1的供应情况。
- 建视图
CREATE VIEW V_SPJ ASSELECT SNO, PNO, QTYFROM SPJWHERE JNO=(SELECT JNOFROM JWHERE JNAME=’三建’); - 对该视图查询
(1) 找出三建工程项目使用的各种零件代码及其数量。SELECT PNO, QTYFROM V_SPJ;(2) 找出供应商S1的供应情况。SELECT PNO, QTY FROM V_SPJWHERE SNO=’S1’;
- 建视图
补充
SQL是【非过程化】的语言,用户无须指定存取路径
对表中数据进行删除的操作是【DELECT】
数据库中建立索引的目的是为了【加快存取速度】
视图是数据库系统三级模式中的【外模式】
基本表和视图一样,都是关系
可以使用SQL对基本表和视图进行操作
可以从基本表或视图上定义视图,视图不仅可以从单个基本表导出,还可以从多个基本表导出
视图不存储数据
SELECT子句中的目标列可以是表中的属性列,也可以是表达式
使用ANY或ALL谓词时必须与比较运算符同时使用
SQL语言具有【数据定义】【数据查询】【数据操纵】【数据控制】的功能
SQL语句中用来消除重复的关键词是【DISTINCT】
若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和列,但保留了主码,这类视图称为【行列子集视图】
SQL语言的数据定义功能包括【模式定义】【表定义】【视图定义】【索引定义】
在视图上不能完成的操作是【在视图上定义新的表】
CREATE、DROP、ALTER实现【数据定义】功能
删除一个视图的命令是【DROP】
删除表S的命令是【DROP TABLE S】
在基本表S中增加一列CN(课程名),可用【ALTER TABLE S ADD (CN CHAR(8))】
在基本表S中删除一个属性“年龄”,可用【ALTER TABLE S DROP Age】
有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是【S.S# = SC.S# and C.C# = SC.C# and SAGE>=20 and CNAME=‘ACCESS’】
设关系数据库中一个表S的结构为S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要把“张二的化学成绩80分”插入S中,则可用【INSERT INTO S VALUES(’张二’,’化学’,80)】
设关系数据库中一个表S的结构为:S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要更正王二的化学成绩为85分,则可用【UPDATE S SET grade=85 WHERE SN=’王二’ AND CN=’化学’】
在SQL语言中,子查询是【嵌入到另一个查询语句之中的查询语句】
SQL是一种【关系数据库】语言
有关系S(S#,SNAME,SEX),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SEX是性别, C#是课程号,CNAME是课程名称。要查询选修“数据库”课的全体男生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是【A.S.S# = SC.S# and C.C# = SC.C# and SEX=’男’ and CNAME=’数据库’】
CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插入如下行时,【(’200823’,’101’,NULL,NULL)】行可以被插入
假设学生关系S(S#,SNAME,SEX),课程关系C(C#,CNAME),学生选课关系SC(S#,C#,GRADE)。要查询选修“Computer”课的男生姓名,将涉及到关系【S,C,SC】
【GRANT】不是数据定义语句
相关子查询和不相关子查询
- 在嵌套查询中,如果子查询的查询条件不依赖于父查询,称为不相关子查询
- 如果子查询的查询条件依赖于父查询,称为相关子查询
ANY和ALL谓词与聚集函数或IN谓词可能存在的等价转换关系
综合题
关系R包含A、B、C三个属性,包含的数据如下
写出对查询语句SELECT * FROM R WHERE X;当X为下列条件时的查询结果
A IS NULL
空的结果集A>8 AND B<20
空的结果集A>10 OR B<20
C+10>25
EXISTS(SELECT B FROM R WHERE A=10)
C IN (SELECT B FROM R)
空的结果集
第4章 数据库安全性
了解
- 计算机系统安全性问题
- 数据库安全性问题
- 威胁数据库安全性因素
掌握
- TCSEC和CC标准的主要内容
- C2级DBMS、B1级DBMS的主要特征
- DBMS提供的安全措施
- 用户身份鉴别、自主存取控制、强制存取控制技术
- 视图技术和审计技术
- 数据加密存储和加密传输
- 使用SQL语言中的GRANT语句和REVOKE语句来实现自主存取控制
知识点
什么是数据库的安全性
- 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏
举例说明对数据库安全性产生威胁的因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
信息安全标准的发展历史,CC评估保证级划分的基本内容
- TCSEC/TDI 安全级别划分
- 安全级别 定义
- A1 验证设计(verified design)
- B3 安全域(security domains)
- B2 结构化保护(structural protection)
- B1 标记安全保护(labeled security protection)
- C2 受控的存取保护(controlled access protection)
- C1 自主安全保护(discretionary security protection)
- D 最小保护(minimal protection)
- CC评估保证级(EAL)的划分
- 评估保证级 定义 TCSEC安全级别(近似相当)
- EAL1 功能测试(functionally tested)
- EAL2 结构测试(structurally tested) C1
- EAL3 系统地测试和检查(methodically tested and checked) C2
- EAL4 系统地设计、测试和复查(methodically designed,tested and reviewed) B1
- EAL5 半形式化设计和测试(semiformally designed and tested) B2
- EAL6 半形式化验证的设计和测试(semiformally verified design and tested) B3
- EAL7 形式化验证的设计和测试(formally verified design and tested) A1
- TCSEC/TDI 安全级别划分
实现数据库安全性控制的常用方法和技术
- 用户身份鉴别
该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。 - 多层存取控制
通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如C2级中的自主存取控制(DAC),B1级中的强制存取控制(MAC) - 视图机制
为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护 - 审计
建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中, DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等 - 数据加密
对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容
- 用户身份鉴别
数据库自主存取控制方法和强制存取方法
- 自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。
- 强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。
- 自主存取控制中自主的含义是:用户可以将自己拥有的存取权限“自主”地授予别人。即用户具有一定的“自主”权。
SQL语言中提供了哪些数据控制(自主存取控制)的语句?请试举几例说明它们的使用方法。
- SQL中 的自主存取控制是通过GRANT 语句和 REVOKE 语句来实现的。如:
GRANT SELECT, INSERT ON Student TO 王平 WITH GRANT OPTION; - 就将Student表的SELECT和INSERT权限授予了用户王平,后面的“WITH GRANT OPTION”子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。
REVOKE INSERT ON Student FROM 王平 CASCADE; - 就将Student表 的INSERT权限从用户王平处收回,选项 CASCADE 表示,如果用户王平将Student 的 INSERT 权限又转授给了其他用户,那么这些权限也将从其他用户处收回。
- SQL中 的自主存取控制是通过GRANT 语句和 REVOKE 语句来实现的。如:
使用GRANT完成下列授权功能
学生(学号,姓名,年龄,性别,家庭住址,班级号)班级(班级号,班级名,班主任,班长)
- 授予用户U1拥有对两个表的所有权限,并可给其他用户授权
GRANT ALL PRIVILEGES ON TABLE 学生,班级 TO U1 WITH GRANT OPTION; - 授予用户U2对学生表具有查看权限,对家庭住址具有更新权限
GRANT SELECT,UPDATE(家庭住址) ON TABLE 学生 TO U2; - 将对班级表查看权限授予所有用户
GRANT SELECT ON TABLE 班级 TO PUBLIC; - 将对学生表的查询、更新权限授予角色R1
GRANT SELECT,UPDATE ON TABLE 学生 TO R1; - 将角色R1授予用户U1,并且U1可继续授权给其他角色
GRANT R1 TO U1 WITH ADMIN OPTION;
- 授予用户U1拥有对两个表的所有权限,并可给其他用户授权
用GRANT和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能以及权限撤销
职工(职工号,姓名,年龄,职务,工资,部门号)部门(部门号,名称,经理名,地址,电话号)
- 用户王明对两个表有SELECT权限
GRANT SELECT ON TABLE 职工,部门 TO 王明;REVOKE SELECT ON TABLE 职工,部门 FROM 王明; - 用户李勇对两个表有INSERT和DELETE权限
GRANT INSERT,DELETE ON TABLE 职工,部门 TO 李勇;REVOKE INSERT,DELETE ON TABLE 职工,部门 FROM 李勇; - 每个职工只对自己的记录有SELECT权限
GRANT SELECT ON TABLE 职工 WHEN USER()=NAME TO ALL;/这里假定系统的GRANT语句支持WHEN子句和USER()的使用。用户将自己的名字作为ID。/REVOKE SELECT ON TABLE 职工 WHEN USER()=NAME FROM ALL; - 用户刘星对职工表有SELECT权限,对工资字段具有更新权限
GRANT SELECT,UPDATE(工资) ON TABLE 职工 TO 刘星;REVOKE SELECT,UPDATE(工资) ON TABLE 职工 FROM 刘星; - 用户张新具有修改这两个的结构的权限
GRANT ALTER TABLE ON TABLE 职工,部门 TO 张新;REVOKE ALTER TABLE ON TABLE 职工,部门 FROM 张新; - 用户周平具有对两个表的所有权限(读,插、改、删数据),并具有给其他用户授权的权限
GRANT ALL PRIVILEGES ON TABLE 职工,部门 TO 周平 WITH GRANT OPTION;REVOKE ALL PRIVILEGES ON TABLE 职工,部门 FROM 周平; - 用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权限,他不能查看每个人的工资
/首先建立一个视图,然后对这个视图定义杨兰的存取权限/GRANT VIEW 部门工资 ASSELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资)FROM 职工,部门WHERE 职工.部门号=部门.部门号GROUP BY 职工.部门号;GRANT SELECT ON TABLE 部门工资 TO 杨兰;REVOKE SELECT ON TABLE 部门工资 FROM 杨兰;DROP VIEW 部门工资;
- 用户王明对两个表有SELECT权限
理解并解释MAC机制中主体、客体、敏感度标记的含义
- 主体是系统中的活动实体,既包括DBMS所管理的实际用户,也包括代表用户的各进程
- 客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等
- 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记。敏感度标记被分成若干级别,如绝密、机密、可信、公开等。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级
强制存取控制机制是如何确定主体能否存取客体
假设要对关系变量S进行强制存取控制,为简化起见,假设要控制存取的数据单元是元组,则每个元组标以密级,如下表所示(4=绝密,3=机密,2=秘密)
假设系统的存取规则是
- 仅当主体的许可证级别大于或等于客体的密级时才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时才能写相应的客体
假定用户U1和U2的许可证级别分别为3和2,则根据规则用户U1能读元组S1和S2,可修改元组S2;用户U2只能读元组S1,修改元组S1
什么是数据库的审计功能,为什么要提供审计功能
- 审计功能是指DBMS的审计模块在用户对数据库执行操作的同时,把所有操作自动记录到系统的审计日志中
- 因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,审计员可以根据审计日志中记录的信息,分析和重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等
补充
- 强制存取控制策略是TCSEC/TDI【B1】级安全级别的特色
- SQL的GRANT和REVOKE语句可以用来实现【自主存取控制】
- 在强制存取控制机制中,当主体的许可证级别等于客体的密级时,主体可以对客体进行【读取、写入】
- 数据库安全技术包括【用户身份鉴别】【自主存取控制和强制存取控制】【视图】【审计】【数据加密】
- 在数据加密技术中,原始数据通过某种加密算法变换为不可直接识别的格式,称为【密文】
- 数据库角色实际上是一组与数据库操作相关的各种【权限】
- 在对用户授予列INSERT权限时,一定要包含对【主码】的INSERT权限,否则用户的插入会因为空值被拒绝。除了授权的列,其他列的值或者取【空值】,或者为【默认值】
- 【出入机房登记和加锁】不属于实现数据库系统安全性主要技术和方法
- SQL中的视图提高了数据库系统的【安全性】
- SQL语言的GRANT和REMOVE语句主要是用来维护数据库的【安全性】
- 在数据库的安全性控制中,授权的数据对象的【范围越小】,授权子系统就越灵活
第5章 数据库完整性
了解
- 数据库的完整性约束条件
- 完整性约束条件分类
- 数据库完整性概念与数据库安全性概念的区别和联系
掌握
- DBMS完整性控制机制的三个方面
- 完整性约束条件的定义
- 完整性约束条件的检查和违约处理
- 使用触发器实现数据库完整性的方法
- 用SQL语言定义关系模式的完整性约束条件
- 定义每个模式的主码
- 定义参照完整性
- 定义于应用有关的完整性
- DBMS完整性控制机制的三个方面
知识点
什么是数据库的完整性
- 数据库的完整性是指数据的【正确性】和【相容性】
数据库完整性概念与数据库安全性概念的区别和联系
- 数据库的完整性和安全性是两个不同的概念,但是有一定的联系
- 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误操作
- 后者是保护数据库防止恶意的破坏和非法的存取。
- 也就是说,安全性措施的防范对象是【非法用户和非法操作】,完整性措施的防范对象是【不合语义的数据】
什么是数据库的完整性约束条件,分类
- 完整性约束条件是指数据库中的数据应该满足的语义约束条件
- 一般可以分为六类
- 静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
- 静态列级约束是对一个列的取值域的说明,包括以下几方面:
- 对数据类型的约束,包括数据的类型、长度、单位、精度等
- 对数据格式的约束
- 对取值范围或取值集合的约束。
- 对空值的约束
- 其他约束
- 静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
- 静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:
- 实体完整性约束。
- 参照完整性约束。
- 函数依赖约束。
- 动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
- 修改列定义时的约束
- 修改列值时的约束
- 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
- 动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
DBMS的完整性控制机制应具有哪三个方面的功能
- 定义功能,即提供定义完整性约束条件的机制
- 检查功能:即检查用户发出的操作请求是否违背了完整性约束条件
- 违约处理功能:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性
RDBMS在实现参照完整性时需要考虑哪些方面
RDBMS在实现参照完整性时需要考虑可能破坏完整性的各种情况以及用户违约后的处理策略
- 外码是否可以接受空值
- 删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种
- 级联删除(CASCADES)
- 受限删除(RESTRICTED)
- 置空值删除(NULLIFIES)
- 在参照关系中插入元组时的问题,这时系统可能采取的作法有
- 受限插入
- 递归插入
- 修改关系中主码的问题
- 一般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。
- 如果允许修改主码,首先要保证主码的唯一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。
用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义
职工([职工号],姓名,年龄,职务,工资,部门号)部门([部门号],名称,经理名,电话)
- 定义每个模式的主码
- 定义参照完整性
- 定义职工年龄不得超过60岁
CREATE TABLE DEPT (Deptno NUMBER(2) PRIMARY KEY, Deptname VARCHAR(10), Manager VARCHAR(10), PhoneNumber CHAR(12));CREATE TABLE EMP (Empno NUMBER(4) PRIMARY KEY, Ename VARCHAR(10), Age NUMBER(2), Job VARCHAR(9), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT C1 CHECK(Age<=60), CONSTRAINT FK_DEPTNO FOREIGN KEY(Deptno) REFERENCES DEPT(Deptno));
在关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的
- 对于违反实体完整性和用户定义的完整性的操作,一般都采用拒绝执行的方式进行处理;
- 而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性
某单位想举行一个小型的联谊会,关系Male记录注册的男宾信息,关系Female记录注册的女宾信息。建立一个断言,将来宾的人数限制在50人以内
CREATE TABLE Male (SerialNumber SmallInt PRIMARY KEY, Name CHAR(8), Age SmallInt, Occuptation CHAR(20) );CREATE TABLE Female (SerialNumber SmallInt PRIMARY KEY, Name CHAR(8), Age SmallInt, Occuptation CHAR(20) );CREATE ASSERTION Party /建立断言PARTY/CHECK((SELECT COUNT() FROM Male)+(SELECT COUNT() FROM Female)<=50);
补充
定义关系的主码意味着主码属性【唯一且所有主码属性不为空】
关于语句CREATE TABLE R(no int,sum int CHECK(sum>0))和CREATE TABLE R(no int,sum int,CHECK(sum>0)),【两条语句都合法且约束效果一样】【前者定义了属性上的约束条件,后者定义了元组上的约束条件】【当sum属性改变时检查,上述两种CHECK约束都要被检查】
在CREATE TABLE时,用户定义的完整性可以通过【NOT NULL】【UNIQUE】【CHECK】等子句实现
关系R的属性A参照引用关系T的属性A,T的某条元组对应的A属性值在R中出现,当要删除T的这条元组时,系统可以采用的策略包括【拒绝执行】【级联删除】【设为空值】
定义数据库完整性一般是由SQL的【DDL】语句实现的
【GRANT】是SQL语言中的数据控制命令
【REFERENCES】允许用户定义新关系时,引用其他关系的主码作为外码
综合题
第6章 关系数据理论(重点)
了解
- “不好”的数据库模式
- 模式的插入异常和删除异常
- 规范化理论的重要意义
掌握
- 关系的形式化定义
- 数据依赖的基本概念(函数依赖、平凡/非平凡/部分/完全/传递函数依赖,码、候选码、外码、多值依赖)
- 范式的概念,1NF-4NF,规范化的含义和作用
- 4个范式的理解与应用
- 各个级别范式中存在的问题和解决方法(插入异常,删除异常,数据冗余)
- 根据应用语义完整地写出关系模式的数据依赖集合,根据数据依赖分析某一个关系模式属于第几范式
知识点
函数依赖、部分函数依赖、完全函数依赖、传递依赖、候选码、主码、外码、全码、1NF、2NF、3NF、BCNF、多值依赖、4NF
- 函数依赖:设R (U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R (U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同, 而在Y上的属性值不同, 则称”X函数确定Y”或”Y函数依赖于X”,记作X→Y
- 函数依赖是最基本的一种数据依赖,也是最重要的一种数据依赖。
- 函数依赖是属性之间的一种联系,体现在属性值是否相等。由上面的定义可以知道,如果X→Y,则r中任意两个元组,若它们在X上的属性值相同,那么在Y上的属性值一定也相同。
- 我们要从属性间实际存在的语义来确定他们之间的函数依赖,即函数依赖反映了(描述了)现实世界的一种语义。
- 函数依赖不是指关系模式R的在某个时刻的关系(值)满足的约束条件,而是指R任何时刻的一切关系均要满足的约束条件
- 完全函数依赖、部分函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X,都有X′→Y,则称Y对X完全函数依赖;若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖
- 候选码、主码: 设K为R(U,F)中的属性或属性组合,若K → U则K为R的候选码。若候选码多于一个,则选定其中的一个为主码
- 外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码也称外码
- 全码:整个属性组是码,称为全码(All-key)
- 1NF:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
- 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
- 2NF:若关系模式R∈1NF,并且每一个非主属性都完全依赖于R的码,则R∈2NF
- 3NF:关系模式R<U,F>中若不存在这样的码X,属性组Y及非主属性Z(Z不包含于Y)使得X→ Y,(Y不→ X),Y→ Z成立,则称R<U,F>∈3NF
- BCNF:关系模式R<U,F>∈1NF.若X→ Y且(Y不包含于X)时X必含有码,则R<U,F>∈BCNF
- 多值依赖:设R (U)是属性集U上的一个关系模式,X、Y、Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→ → Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关
- 4NF:关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→ → Y(Y不包含于X),X都含有码,则称R<U,F>∈4NF
- 函数依赖:设R (U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R (U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同, 而在Y上的属性值不同, 则称”X函数确定Y”或”Y函数依赖于X”,记作X→Y
综合题
建立一个关于系、学生、班级、学会等诸信息的关系数据库。 描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。 描述班级的属性有:班号、专业名、系名、人数、入校年份。 描述系的属性有:系名、系号、系办公室地点、人数。 描述学会的属性有:学会名、成立年份、地点、人数。 有关语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。 请给出关系模式,写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况讨论函数依赖是完全函数依赖,还是部分函数依赖。 指出各关系的候选码、外部码,有没有全码存在?
- 关系模式
- 学生S(S#,SN,SB,DN,C#,SA)
S#—学号,SN—姓名,SB—出生年月,SA—宿舍区 - 班级C(C#,CS,DN,CNUM,CDATE)
C#—班号,CS—专业名,CNUM—班级人数,CDATE—入校年份 - 系 D(D#,DN,DA,DNUM)
D#—系号,DN—系名,DA—系办公室地点,DNUM—系人数 - 学会P(PN,DATE1,PA,PNUM)
PN—学会名,DATE1—成立年月,PA—地点,PNUM—学会人数 - 学生–学会SP(S#,PN,DATE2)
DATE2—入会年份
- 学生S(S#,SN,SB,DN,C#,SA)
- 每个关系模式的极小函数依赖集
- S:S#→SN,S#→SB,S#→C#,C#→DN,DN→SA
- C:C#→CS,C#→CNUM,C#→CDATE,CS→DN,(CS,CDATE)→C#
- D:D#→DN,DN→D#,D#→DA,D#→DNUM
- P:PN→DATE1,PN→PA,PN→PNUM
- SP:(S#,PN)→DATE2
- S中存在传递函数依赖
- S#→DN, S#→SA, C#→SA
- C中存在传递函数依赖
- C#→DN
- (S#,PN)→DATE2
- (CS,CDATE)→C#
- 均为SP中的函数依赖,是完全函数依赖
- 关系 候选码 外部码 全码
- S S# C#,DN 无
- C C#,(CS,CDATE) DN 无
- D D#和DN 无 无
- P PN 无 无
- SP (S#,PN) S#,PN 无
- 关系模式
试由Armostrong公理系统推导出下面三条推理规则
- 合并规则:若X→Z,X→Y,则有X→YZ
已知X→Z,由增广律知XY→YZ,又因为X→Y,可得XX→XY→YZ,最后根据传递律得X→YZ。 - 伪传递规则:由X→Y,WY→Z有XW→Z
已知X→Y,据增广律得XW→WY,因为WY→Z,所以XW→WY→Z,通过传递律可知XW→Z。 - 分解规则:X→Y,Z 包含于 Y,有X→Z
已知Z 包含于 Y,根据自反律知Y→Z,又因为X→Y,所以由传递律可得X→Z。
- 合并规则:若X→Z,X→Y,则有X→YZ
试举出三个多值依赖的实例
- 关系模式MSC(M,S,C)中,M表示专业,S表示学生,C表示该专业的必修课。假设每个专业有多个学生,有一组必修课。设同专业内所有学生的选修的必修课相同,实例关系如下。按照语义对于M的每一个值M i,S有一个完整的集合与之对应而不问C取何值,所以M→→S。由于C与S的完全对称性,必然有M→→C成立。
M S CM 1 S1 C1M 1 S1 C2M 1 S2 C1M 1 S2 C2…… …… …… - 关系模式ISA(I,S,A)中,I表示学生兴趣小组,S表示学生,A表示某兴趣小组的活动项目。假设每个兴趣小组有多个学生,有若干活动项目。每个学生必须参加所在兴趣小组的所有活动项目,每个活动项目要求该兴趣小组的所有学生参加。按照语义有I→→S,I→→A成立。
- 关系模式RDP(R,D,P)中,R表示医院的病房,D表示责任医务人员,P表示病人。假设每个病房住有多个病人,有多个责任医务人员负责医治和护理该病房的所有病人。按照语义有R→→D,R→→P成立。
- 关系模式MSC(M,S,C)中,M表示专业,S表示学生,C表示该专业的必修课。假设每个专业有多个学生,有一组必修课。设同专业内所有学生的选修的必修课相同,实例关系如下。按照语义对于M的每一个值M i,S有一个完整的集合与之对应而不问C取何值,所以M→→S。由于C与S的完全对称性,必然有M→→C成立。
辨析题
- 任何一个二目关系都是属于3NF的。√
- 任何一个二目关系都是属于BCNF的。√
- 任何一个二目关系都是属于4NF的。√
- 当且仅当函数依赖A→B在R上成立,关系R(A,B,C)等于其投影R1(A,B)和R2(A,C)的连接 ×
当且仅当函数依赖A→→B在R上成立,关系R(A,B,C)等于其投影R1(A,B)和R2(A,C)的连接 - 若R.A→R.B,R.B→R.C,则R.A→R.C √
- 若R.A→R.B,R.A→R.C,则R.A→R.(B, C) √
- 若R.B→R.A,R.C→R.A,则R.(B, C)→R.A √
- 若R.(B, C)→R.A,则R.B→R.A,R.C→R.A ×
反例:关系模式 SC(S#,C#,G) (S#,C#)→G,但是S# → G,C#→G
证明
补充
为了设计出性能较优的关系模式,必须进行规范化,规范化主要的理论依据是【关系规范化理论】
规范化理论是关系数据库进行逻辑设计的理论依据,根据这个理论,关系数据库中的关系必须满足:每一个属性都是【不可分解的】
已知关系模式R(A,B,C,D,E)及其上的函数相关性集合F={A→D,B→C ,E→A },该关系模式的候选关键字是【BE】
设学生关系S(SNO,SNAME,SSEX,SAGE,SDPART)的主键为SNO,学生选课关系SC(SNO,CNO,SCORE)的主键为SNO和CNO,则关系R(SNO,CNO,SSEX,SAGE,SDPART,SCORE)的主键为SNO和CNO,其满足【1NF】
设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C表示课程,P表示教师,S表示学生,G表示成绩,T表示时间,R表示教室,根据语义有如下数据依赖集:D={ C→P,(S,C)→G,(T,R)→C,(T,P)→R,(T,S)→R },关系模式W的一个关键字是【(T,S)】
关系模式中,满足2NF的模式【必定是1NF】
关系模式R中的属性全是主属性,则R的最高范式必定是【3NF】
消除了部分函数依赖的1NF的关系模式,必定是【2NF】
如果A->B ,那么属性A和属性B的联系是【多对一】
关系模式的候选关键字可以有1个或多个,而主关键字有【1个】
候选关键字的属性可以有【1个或多个】
关系模式的任何属性【不可再分】
设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C表示课程,P表示教师,S表示学生,G表示成绩,T表示时间,R表示教室,根据语义有如下数据依赖集:D={ C→P,(S,C)→G,(T,R)→C,(T,P)→R,(T,S)→R },若将关系模式W分解为三个关系模式W1(C,P),W2(S,C,G),W2(S,T,R,C),则W1的规范化程序最高达到【BCNF】
在关系数据库中,任何二元关系模式的最高范式必定是【BCNF】
在关系规范式中,分解关系的基本原则是【实现无损连接、保持原有的依赖关系】
不能使一个关系从第一范式转化为第二范式的条件是【每一个非属性都部分函数依赖主属性】
任何一个满足2NF但不满足3NF的关系模式都不存在【非主属性对键的传递依赖】
设数据库关系模式R=(A,B,C,D,E),有下列函数依赖:A→BC,D→E,C→D;下述对R的分解中,哪些分解是R的无损连接分解【(A,B,C)(C,D,E) 】【(A,B)(A,C,D,E)】
设U是所有属性的集合,X、Y、Z都是U的子集,且Z=U-X-Y。下面关于多值依赖的叙述中,不正确的是【若X→→Y,且Y′∈Y,则X→→Y′】 ,正确的是【若X→→Y,则X→→Z 】【若X→Y,则X→→Y 】【若Z=∮,则X→→Y 】
若关系模式R(U,F)属于3NF,则【仍存在一定的插入和删除异常】
下列说法不正确的是【任何一个包含三个属性的关系模式一定满足3NF】
设关系模式R(A,B,C),F是R上成立的FD集,F={B→C},则分解P={AB,BC}相对于F【是无损联接,也是保持FD的分解】
关系数据库规范化是为了解决关系数据库中【插入、删除和数据冗余】的问题而引入的。
关系的规范化中,各个范式之间的关系是【1NF∈2NF∈3NF】
数据库中的冗余数据是指可【由基本数据导出】的数据
学生表(id,name,sex,age,depart_id,depart_name),存在函数依赖是id→name,sex,age,depart_id;dept_id→dept_name,其满足【2NF】
设有关系模式R(S,D,M),其函数依赖集:F={S→D,D→M},则关系模式R的规范化程度最高达到【2NF】
设有关系模式R(A,B,C,D),其数据依赖集:F={(A,B)→C,C→D},则关系模式R的规范化程度最高达到【2NF】
下列关于函数依赖的叙述中,哪一条是不正确的【由X→YZ,则X→Y, Y→Z】,正确的是【由X→Y,Y→Z,则X→YZ】【由X→Y,WY→Z,则XW→Z 】【由X→Y,Z∈Y,则X→Z】
X→Y,当下列哪一条成立时,称为平凡的函数依赖【Y∈X】
关系数据库的规范化理论指出:关系数据库中的关系应该满足一定的要求,最起码的要求是达到1NF,即满足【每个属性都是不可分解的】
根据关系数据库规范化理论,关系数据库中的关系要满足第一范式,部门(部门号,部门名,部门成员,部门总经理)关系中,因哪个属性而使它不满足第一范式【部门成员】
有关系模式A(C,T,H,R,S),其中各属性的含义是:
C:课程 T:教员 H:上课时间 R:教室 S:学生
根据语义有如下函数依赖集:
F={C→T,(H,R)→C,(H,T)RC,(H,S)→R}
- 关系模式A的码是【(H,S)】
- 关系模式A的规范化程度最高达到【2NF】
- 现将关系模式A分解为两个关系模式A1(C,T),A2(H,R,S),则其中A1的规范化程度达到【BCNF】
数据库外模式在【数据库逻辑结构设计】阶段设计
生成DBMS系统支持的数据模型在【数据库逻辑结构设计】阶段完成
根据应用需求建立索引在【数据库物理设计】阶段完成
员工性别取值“男”女”/“1”“0”属于【属性冲突】
数据库设计方法包括【新奥尔良方法】【基于E-R模型的方法】【3NF的设计方法】【面向对象的设计方法】【统一建模语言(UML)方法】
数据库设计的基本步骤包括【需求分析】【概念结构设计】【逻辑结构设计】【物理结构设计】【数据库实施】【数据库运行和维护】
集成E-R图要分两个步骤【合并、修改】和【重构】
数据库常见存取方法【索引】【聚簇】【Hash方法】
在进行概念结构设计时,将事物作为属性的基本准则是什么
- 作为属性,不能再具有需要描述的性质,属性必须是不可分的数据项,不能包含其他属性
- 属性不能与其他实体具有联系,即E-R图中所表示的联系是实体之间的联系
将E-R图转换为关系模式时,可以如何处理实体型间的联系
第7章 数据库设计
了解
- 数据库设计的特点
- 数据库物理设计的内容和评价
- 数据库的实施和维护
掌握
- 数据库设计基本步骤
- 数据库设计过程中数据字典的内容
- 数据库设计各个阶段的具体设计内容、设计描述、设计方法
- E-R图的设计
- E-R图向关系模型的转换
知识点
数据库设计过程
这是一个完整的实际数据库及其应用系统的设计过程。不仅包括设计数据库本身,还包括数据库的实施、数据库运行和维护。
- 需求分析
准确了解与分析用户需求(包括数据与处理)。 - 概念结构设计
通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。 - 逻辑结构设计
将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化。 - 数据库物理设计
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法) - 数据库实施
设计人员运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 - 数据库运行和维护
在数据库系统运行过程中对其进行评价、调整与修改。
- 需求分析
试述数据库设计过程中形成的数据库的各级模式
- 在概念设计阶段形成独立于机器特点,独立于各个DBMS产品的概念模式,在本篇中就是E-R图
- 在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后在基本表的基础上再建立必要的视图(View),形成数据的外模式
- 在物理设计阶段,根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
试述数据库设计的特点
- 数据库设计既是一项涉及多学科的综合性技术又是一项庞大的工程项目。其主要特点有:
- 数据库建设是硬件、软件和干件(技术与管理的界面)的结合。
- 从软件设计的技术角度看,数据库设计应该和应用系统设计相结合,也就是说,整个设计过程中要把结构(数据)设计和行为(处理)设计密切结合起来。
- 数据库设计既是一项涉及多学科的综合性技术又是一项庞大的工程项目。其主要特点有:
什么叫数据抽象?试举例说明。
- 数据抽象是对实际的人、物、事和概念进行人为处理,抽取所关心的共同特性,忽略非本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。
- 如分类这种抽象是:定义某一类概念作为现实世界中一组对象的类型。这些对象具有某些共同的特性和行为。它抽象了对象值和型之间的“is member of”的语义。在E-R模型中,实体型就是这种抽象。例如在学校环境中,李英是老师,表示李英是教师类型中的一员,则教师是实体型,李英是教师实体型中的一个实体值,具有教师共同的特性和行为:在某个系某个专业教学,讲授某些课程,从事某个方向的科研。
需求分析阶段的设计目标、调查内容
- 需求分析阶段的设计目标是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。
- 调查的内容是“数据”和“处理”,即获得用户对数据库的如下要求:
- 信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
- 处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。
- 安全性与完整性要求。
数据字典的内容和作用
- 数据字典的内容通常包括:数据项、数据结构、数据流、数据存储、处理过程5个部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
- 数据字典的作用:数据字典是关于数据库中数据的描述,在需求分析阶段建立,是下一步进行概念设计的基础,并在数据库设计过程中不断修改、充实、完善。
数据库的概念结构,特点和设计策略
- 概念结构是信息世界的结构,即概念模型,其主要特点是
- 能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求。是对现实世界的一个真实模型。
- 易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库的设计成功的关键。
- 易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。
- 易于向关系、网状、层次等各种数据模型转换。
- 概念结构的设计策略通常有四种
- 自顶向下。即首先定义全局概念结构的框架,然后逐步细化;
- 自底向上。即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构;
- 逐步扩张。首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构;
- 混合策略。即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
- 概念结构是信息世界的结构,即概念模型,其主要特点是
试述数据库概念结构设计的重要性和设计步骤
- 重要性:数据库概念设计是整个数据库设计的关键,将在需求分析阶段所得到的应用需求首先抽象为概念结构,以此作为各种数据模型的共同基础,从而能更好地、更准确地用某一DBMS实现这些需求。
- 设计步骤:概念结构的设计方法有多种,其中最经常采用的策略是自底向上方法,该方法的设计步骤通常分为两步:第1步是抽象数据并设计局部视图,第2步是集成局部视图,得到全局的概念结构
为什么要视图集成?视图集成的方法是什么?
- 在对数据库系统进行概念结构设计时一般采用自底向上的设计方法,把繁杂的大系统分解子系统。首先设计各个子系统的局部视图,然后通过视图集成的方式将各子系统有机的融合起来,综合成一个系统的总视图。这样设计清晰,由简到繁。由于数据库系统是从整体角度看待和描述数据的,因此数据不再面向某个应用而是整个系统。因此必须进行视图集成,使得数据库能被全系统的多个用户、多个应用共享使用。
- 一般说来,视图集成可以有两种方式:
- 多个分E-R图一次集成;
- 逐步集成,用累加的方式一次集成两个分E-R图。
- 无论采用哪种方式,每次集成局部E-R图时都需要分两步走:
- 合并。解决各分E-R图之间的冲突,将各分E-R图合并起来生成初步E-R图。
- 修改和重构。消除不必要的冗余,生成基本E-R图。
什么是E-R图?构成E-R图的基本要素是什么?
- E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
- 构成E-R图的基本要素是实体型、属性和联系,其表示方法为:
- 实体型:用矩形表示,矩形框内写明实体名;
- 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;
- 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)
画E-R图
画E-R图
数据库的逻辑结构设计,设计步骤。
- 数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本E-R图转换为与选用的DBMS产品所支持的数据模型相符合的逻辑结构。
- 设计步骤为:
- 将概念结构转换为一般的关系、网状、层次模型;
- 将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;
- 对数据模型进行优化。
试述把E-R图转换为DBTG模型和关系模型的转换规则。
- E-R图向DBTG模型的转换规则:
- 1)每个实体型转换为记录型,实体的属性转换为记录的数据项;
- 2)实体型之间1:n(n≥1)的联系转换为一个系,没有任何联系的实体型转换为奇异系;
- 3)K(K≥2)个实体型之间多对多的联系,引入一个连结记录,形成K个实体型和连结记录之间的K个系。连结记录的属性由诸首记录的码及联系属性所组成;
- 4)同一实体型内的1:n,n:m联系,引入连结记录,转换为两个系。
- E-R图向关系模型的转换规则:
- 一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
- 对于实体间的联系则有以下不同的情况:
- 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
- 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
- 一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体码的组合组成该关系的码,或码的一部分。
- 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
- 具有相同码的关系模式可合并。
- E-R图向DBTG模型的转换规则:
由E-R图转换为IMS模型的转换规则
- 1)每个实体型转换为记录型,实体的属性转换为记录的数据项;
- 2)实体型之间1:n(n≥1)的联系转换记录型之间的有向边;
- 3)实体型之间m:n(m>1,n>1)的联系则分解成一对多联系,再根据2)转换;
- 4)K(K≥2)个实体型之间多对多的联系,可先转换成多对两个实体型之间的联系,再根据3)转换。
E-R转换关系模型
补充
数据流程图是用于描述结构化方法中【需求分析】阶段的工具。
数据库设计中,用E-R图赖描述信息结构但不涉及信息在计算机中的表示,这是数据库设计的【概念设计阶段】
在数据库设计中,将E-R图转换成关系数据模型的过程属于【逻辑设计阶段】
子模式DDL是用来描述【数据库的局部逻辑结构】
数据库设计的概念设计阶段,表示概念结构的常用方法和描述工具是【实体联系法和实体联系图】
在E-R模型向关系模型转换时,M:N的联系转换为关系模式时,其关键字是【M、N端实体的关键字组合】
某学校规定,每一个班级最多有50名学生,至少有10名学生;每一名学生必须属于一个班级。在班级与学生实体的联系中,学生实体的基数是【(1,1)】
在关系数据库设计中,设计关系模式是数据库设计中【逻辑设计阶段】阶段的任务
关系数据库的规范化理论主要解决的问题是【如何构造合适的数据逻辑结构】
数据库设计可划分为七个阶段,每个阶段都有自己的设计内容,“为哪些关系,在哪些属性上、键什么样的索引”这一设计内容应该属于【物理设计】设计阶段。
假设设计数据库性能用“开销”,即时间、空间及可能的费用来衡量,则在数据库应用系统生存期中存在很多开销。其中,对物理设计者来说,主要考虑的是【操作开销】
数据库物理设计完成后,进入数据库实施阶段,下述工作中,【扩充功能】一般不属于实施阶段的工作。
从ER图导出关系模型时,如果实体间的联系是M:N的,下列说法中正确的是【增加一个关系表示联系,其中纳入M方和N方的关键字】
在ER模型中,如果有3个不同的实体集,3个M:N联系,根据ER模型转换为关系模型的规则,转换为关系的数目是【6】
数据库外模式在【数据库逻辑结构设计】阶段设计
生成DBMS系统支持的数据模型在【数据库逻辑结构设计】阶段完成
根据应用需求建立索引在【数据库物理设计】阶段完成
员工性别取值“男”女”/“1”“0”属于【属性冲突】
数据库设计方法包括【新奥尔良方法】【基于E-R模型的方法】【3NF的设计方法】【面向对象的设计方法】【统一建模语言(UML)方法】
数据库设计的基本步骤包括【需求分析】【概念结构设计】【逻辑结构设计】【物理结构设计】【数据库实施】【数据库运行和维护】
集成E-R图要分两个步骤【合并、修改】和【重构】
数据库常见存取方法【索引】【聚簇】【Hash方法】
在进行概念结构设计时,将事物作为属性的基本准则是什么
- 作为属性,不能再具有需要描述的性质,属性必须是不可分的数据项,不能包含其他属性
- 属性不能与其他实体具有联系,即E-R图中所表示的联系是实体之间的联系
将E-R图转换为关系模式时,可以如何处理实体型间的联系
- 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
- 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
- 一个m:n联系转换为一个关系模式。
- 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
- 具有相同码的关系模式可合并。
综合题
第8章 数据库编程
了解
- SQL编程技术可以有效客服SQL实现复杂应用方面的不足
- 提高应用系统和RDBMS间的互操作性
掌握
- 嵌入SQL中游标的概念和使用方法
- PL/SQL和存储过程的基本概念、基本结构、语句语法和用法
- ODBC开发应用系统的体系结构
- ODBC API和ODBC的应用程序的工作流程
- 在实际安装的RDBMS上通过编程的方式开发应用程序,完成对数据库的各种操作
- 使用ODBC进行数据库应用程序的设计,使设计的应用程序可移植性好,并且能同时访问不同的数据库,共享数据资源
知识点
嵌入式SQL语言与主语言之间的通信
- 向主语言传递SQL语句的执行状态信息,使主语言能够据此信息空值程序流程,主要用【SQL通信区】(SQL Communication Area,简称SQLCA)实现
- 主语言向SQL语句提供参数,使用【主变量】(host variable)输入数据实现
- 程序把SQL语句查询数据库的结果交主语言处理,用【主变量】和【游标】(cursor)向主语言输出数据
嵌入式SQL语句为了和主语言语句进行区分,在SQL语句前加前缀【EXEC SQL】,以【分号;】结束
主变量可以附加一个指示变量,指示变量可以表示输入主变量是否为【空值】
SQL是面向集合的,主语言是面向记录的,可以使用【游标】解决这一问题
存储过程经过编译、优化之后存储在【数据库服务器中】
应用程序中访问和管理数据库的方法由【嵌入式SQL】【PL/SQL】【ODBC】【JDBC】【OLEDB】
综合题
第9章 关系查询处理和查询优化
了解
- 查询处理的基本步骤(查询分析、查询检查、查询优化、查询执行)
掌握
- 什么是关系系统的查询优化,查询优化的方法
- 画出查询的语法树以及优化后的语法树
- 代数优化算法、物理优化算法
知识点
查询处理的基本步骤
- 查询分析
- 查询检查
- 查询优化
- 查询执行
查询优化在关系数据库系统中的重要性和可能性
- 重要性
- 关系系统的查询优化既是RDBMS实现的关键技术,又是关系系统的优点所在,它减轻了用户选择存取路径的负担,用户只要提出“干什么”,不必指出“这么干”
- 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好
- 可能性
- 优化器可以从数据字典中获取许多统计信息,例如各个关系中的元组数,关系中每个属性值的分布情况,这些属性上是否有索引,是什么索引(B+数索引、Hash索引、唯一索引、组合索引)等等。优化器可以根据这些信息选择有效的执行计划,而用户程序则难以获得这些信息
- 如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的
- 优化器可以考虑数十甚至数百种不同的执行计划,从中选出较优的一个,而程序员一般只能考虑有限的几种可能性
- 优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术
- 重要性
语法树
语法树
关系数据库管理系统查询优化的一般准则
- 代数优化策略
- 选择运算应尽可能先做
- 把投影运算和选择运算同时进行
- 把投影同其前或其后的双目运算结合起来执行
- 把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算
- 找出公共子表达式
- 物理优化
- 选取合适的连接算法
- 代数优化策略
关系数据库管理系统查询优化的一般步骤
- 把查询转换成某种内部表示,通常用的内部表示是语法树
- 把语法树转换成标准(优化)形式,即利用优化算法把原始的语法树转换成优化的形式
- 选择低层的存取路径
- 生成查询计划,选择所需代价最小的计划加以执行
第10章 数据库恢复技术
了解
- 数据库的一致性状态
- 数据库运行中可能产生的故障类型,它们如何影响事务的正常执行,如何破坏数据库数据
- 数据转储的概念及分类
- 数据库的镜像功能
掌握
- 事务的基本概念和事务的ACID性质
- 数据库恢复的实现技术
- 日志文件的内容及作用
- 登记日志文件所要遵循的原则
- 具有检查点的恢复技术
- 恢复的基本原理
- 针对不同故障的恢复策略和方法
- 日志文件的使用
知识点
事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性
- 事务是用户定义的一个数据库操作序列,这些操作要么全做、要么全不,是一个不可分割的工作单位
- 事务具有4个特性(也称ACID特性)
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持续性(Durability)
为什么事务非正常结束时会影响数据库数据的正确性,举例说明
- 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
- 例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放。则可以定义一个事务T,T包括两个操作;Q1=Q1-Q,Q2=Q2+Q。如果T非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q。
登记日志文件时为什么必须先写日志文件,后写数据库?
- 把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。
- 如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
针对不同的故障,试给出恢复的策略和方法(事务故障恢复/系统故障恢复/介质故障恢复)
- 事务故障的恢复步骤
- 反向扫描文件日志,查找该事务的更新操作。
- 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。直至读到此事务的开始标记,该事务故障的恢复就完成了。
- 系统故障的恢复步骤
- 正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
- 对未完成的事务队列中的各个事务进行UNDO处理。
- 对已经提交的事务队列中的各个事务进行REDO处理
- 介质故障的恢复步骤
- 装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。
- 装入转储结束时刻的日志文件副本
- 启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。
- 事务故障的恢复步骤
什么是检查点记录,包括哪些内容
检查点记录是一类新的日志纪录。它的内容包括
建立检查点时刻所有正在执行的事务清单,如下图中的T1、T2
这些事务的最近一个日志记录的地址,如下图中的D1、D2
具有检查点的恢复技术有什么优点?举例
利用日志技术进行数据库恢复时,恢复子系统必须搜索整个日志,这将耗费大量的时间。此外,需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又重新执行了这些操作,浪费了大量时间。检查点技术就是为了解决这些问题。
例如
使用检查点方法进行恢复的步骤。
- ① 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
- ② 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。
- 这里建立两个事务队列:
- UNDO-LIST: 需要执行undo操作的事务集合
- REDO-LIST: 需要执行redo操作的事务集合
- 把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。
- 这里建立两个事务队列:
- ③ 从检查点开始正向扫描日志文件
- 如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列
- 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列,直到日志文件结束
- ④ 对UNDO-LIST中的每个事务执行UNDO操作, 对REDO-LIST中的每个事务执行REDO操作
什么是数据库镜像?它有什么用途?
- 数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。
- 数据库镜像的用途
- 用于数据库恢复。当出现介质故障时,镜像磁盘可继续使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。
- 提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
补充
在系统故障的恢复策略中,为什么UNDO处理反向扫描日志文件,REDO处理正向扫描日志文件
- 如果存在同一个数据的多个UNDO操作,需要将数据恢复到第一个失败事务之前,如果正向扫描处理日志文件,无法实现这一目标,因此应该反向扫描日志文件。对于同一个数据的多个REDO操作,需要将数据恢复到最后一个成功事务之后,因此应该正向扫描日志文件
说明恢复系统是否可以保证事务的原子性和持续性
- 原子性是指操作要么都做,要么都不做,在恢复策略中UNDO可以保证将未成功提交的事务所有操作都取消,REDO可以保证将成功提交的事务所有操作都完成,因此需确保事务的原子性;
- 持续性是指一旦事务提交,对数据库中数据的改变是永久性的,REDO可以保证事务只要提交,改变一定被永久实现,因此要确保事务的持续性
综合题
数据库中为什么要有恢复子系统?它的功能是什么?
- 答: 因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。
- 恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。
数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?
- 事务内部的故障
- 系统故障
- 介质故障
- 计算机病毒
事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据
数据库恢复的基本技术有哪些?
- 数据转储和登录日志文件是数据库恢复的基本技术。
- 当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。
数据库转储的意义是什么? 试比较各种数据转储方法。
- 数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将数据库复制到磁带或另一个磁盘上保存起来的过程。当数据库遭到破坏后可以将后备副本重新装入,将数据库恢复到转储时的状态。
- 静态转储:在系统中无运行事务时进行的转储操作。静态转储简单,但必须等待正运行的用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。
- 动态转储:指转储期间允许对数据库进行存取或修改。动态转储可克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。因为转储期间运行的事务可能修改了某些数据,使得后援副本上的数据不是数据库的一致版本。
- 为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件(log file)。这样,后援副本加上日志文件就能得到数据库某一时刻的正确状态。
- 转储还可以分为海量转储和增量转储两种方式。
- 海量转储是指每次转储全部数据库。
- 增量转储则指每次只转储上一次转储后更新过的数据。
- 从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来更简单些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。
- 数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将数据库复制到磁带或另一个磁盘上保存起来的过程。当数据库遭到破坏后可以将后备副本重新装入,将数据库恢复到转储时的状态。
什么是日志文件?为什么要设立日志文件?
- 日志文件是用来记录事务对数据库的更新操作的文件。
- 设立日志文件的目的是: 进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。
登记日志文件时为什么必须先写日志文件,后写数据库?
- 把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。
- 如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
一个事务的执行,要么全部完成,要么全部不做,一个事务中对数据库的所有操作都是一个不可分割的操作序列的属性是【原子性】
表示两个或多个事务可以同时运行而不互相影响的是【独立性】
事务的持续性是指【事务一旦提交,对数据库的改变是永久的】
SQL语言中的COMMIT语句的主要作用是【提交事务】
SQL语言中用【ROLLBACK】语句实现事务的回滚
若系统在运行过程中,由于某种硬件故障,使存储在外存上的数据部分损失或全部损失,这种情况称为【介质故障】
在DBMS中实现事务持久性的子系统是【恢复管理子系统】
后援副本的作用是【故障后的恢复】
事务日志用于保存【对数据的更新操作】
数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括【日志文件、数据库后备副本】
第11章 并发控制
了解
- 数据库并发控制技术的必要性
- 活锁与死锁的概念
掌握
- 并发操作可能产生数据不一致的情况,包括丢失修改、不可重复读、读“脏”数据等
- 封锁的类型及不同封锁类型(X锁、S锁)的性质和定义,相关的相容控制矩阵
- 封锁协议的概念
- 封锁粒度的概念,多粒度封锁方法,多粒度封锁协议的相容控制矩阵
- 封锁协议与数据一致性的关系,并发调度的可串行性概念
- 两段锁协议与可串行性的关系,两段锁协议与死锁的关系
知识点
在数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?
- 数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。
- 并发控制可以保证事务的【一致性】和【隔离性】
并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?
- 并发操作带来的数据不一致性包括三类
- 丢失修改(LostUpdate)
两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 - 不可重复读(Non-RepeatableRead)
不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。不可重复读包括三种情况1.事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读改数据时,得到与前一次不同的值2.事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了3.事务T1按一条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录后两种不可重复读有时也称为幻影(phantom row)现象 - 读“脏”数据(DirtyRead)
读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。
- 丢失修改(LostUpdate)
- 避免不一致性的方法和技术就是并发控制。常用的并发控制技术包括封锁技术、时间戳方法、乐观控制方法、多版本并发控制方法等
- 并发操作带来的数据不一致性包括三类
什么是封锁?基本的封锁类型有几种?试述它们的含义。
- 封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。
- 基本的封锁类型有两种: 排它锁(简称X锁) 和共享锁(简称S锁)。
- 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
- 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
如何用封锁机制保证数据的一致性
DBMS在对数据进行读写操作之前首先对该数据执行封锁操作
什么是活锁?活锁的产生原因和解决方法
-
活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
什么是死锁?请给出预防死锁的若干方法。
- 在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。
- 防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有两种方法:
- 一次封锁法
要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 - 顺序封锁法
预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
- 一次封锁法
请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?
- 数据库系统一般采用允许死锁发生,DBMS检测到死锁后加以解除的方法。
- DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
- 超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
- DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。
什么样的并发调度是正确的调度?
- 可串行化的调度是正确的调度。
- 可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。
综合题
证明题
为什么要引进意向锁? 意向锁的含义是什么?
- 引进意向锁是为了提高封锁子系统的效率。
- 原因是:在多粒度封锁方法中,一个数据对象可能以两种方式加锁—显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突;还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突;显然,这样的检查方法效率很低。为此引进了意向锁。
- 意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。引进意向锁后,系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。
试述常用的意向锁:IS锁,IX锁,SIX锁,给出这些锁的相容矩阵。
IS锁:如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。例如,要对某个元组加S锁,则要首先对关系和数据库加IS锁
IX锁:如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。例如,要对某个元组加X锁,则要首先对关系和数据库加IX锁。
SIX锁:如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。
相容矩阵
补充
试述两段锁协议的概念。
- 两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。
- 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;
- 在释放一个封锁之后,事务不再申请和获得任何其他封锁。
- “两段”的含义是,事务分为两个阶段:
- 第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。
- 第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务释放已经获得的锁,但是不能再申请任何锁。
- 两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。
不同封锁协议与系统一致性级别的关系是什么?
- 不同的封锁协议对应不同的一致性级别。
- 一级封锁协议可防止丢失修改,并保证事务T是可恢复的。在一级封锁协议中,对读数据是不加S锁的,所以它不能保证可重复读和不读“脏”数据。
- 二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据。在二级封锁协议中,由于读完数据后立即释放S锁,所以它不能保证可重复读。
- 在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束时才释放封锁。所以三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。
什么是封锁协议?不同级别的封锁协议的主要区别是什么?
- 在运用封锁技术对数据加锁时,要约定一些规则。例如,在运用X锁和S锁对数据对象加锁时,要约定何时申请X锁或S锁、何时释放封锁等。这些约定或者规则称为封锁协议(Locking Protocol)。对封锁方式约定不同的规则,就形成了各种不同的封锁协议。不同级别的封锁协议,例如《概论》中介绍的三级封锁协议,三级协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁(即持锁时间的长短)。
- 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
- 二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
- 三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
意向锁中为什么存在SIX锁,而没有XIS锁
完整性约束是否能够保证数据库在处理多个事务时处于一致状态
综合题
为了防止一个用户的工作不适当地影响另一个用户,应该采取【并发控制】
解决并发操作带来的数据不一致问题普遍采用【封锁】技术。
下列不属于并发操作带来的问题是【死锁】
DBMS普遍采用【封锁】方法来保证调度的正确性
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这是【一级封锁协议】
如果事务T获得了数据项Q上的排他锁,则T对Q【既可读又可写】
设事务T1和T2,对数据库中地数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作【T1正在读A,T2也要读A】
如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是【两个都是SELECT】
在数据库系统中,死锁属于【事务故障】