数据库基本概念
数据流图
概念模型
关系模型
关系运算
SQL语言
数据库控制
数据 data:描述事物的符号记录,可以是文字、图形、图像、声音和语言等。
数据库系统(Database System ,DBS):一个采用了数据库技术,有组织的动态地存储大量相关数据,方便多用户访问的计算机系统。数据库系统由数据库、硬件、软件、人员组成。
数据库 database:长期存储在计算机内、有组织、可共享的数据集合。特点是数据间联系密切、冗余度小、独立性高、易扩展,并可为各类用户共享。
硬件:硬件是构成计算机系统的各种物理设备,包括存储数据所需的外部设备。
软件:软件包括操作系统、数据库管理系统及应用程序。
数据库管理系统 DBMS 是数据库系统的核心,主要以下6大功能:
数据定义:DMBS提供数据定义语言(DDL),对数据库结构进行描述,包括外模式、模式和内模式的定义;数据库的完整性定义;安全保密定义;
数据库操作:DBMS提供数据操纵语言(DML),实现对数据库中数据的基本操作,如增删改查。
DML 分为2类,即宿主性和自含型
数据库运行管理
数据的组织、存储和管理:DBMS分类组织、存储和管理各种数据(数据字典、用户数据、存取路径等)。因此要确定以何种文件结构和存取方式组织数据,以提高效率。数据的组织、存储和管理
的目标是提高存储空间的利用率。
数据库的建立和维护:
其他功能
人员:主要有4类。
DBMS 特性
DBMS的分类
集中式数据库系统
分时系统环境下的集中式数据库系统诞生于20世纪60年代中期。在这种系统中,不仅数据是集中的,数据库系统的所有功能都集中在DBMS所在的计算机上。其他的DBMS的产品也是从这种结构开始发展的。
客户端/服务器结构
随着网络技术的发展,很多软件采用客户端/服务器结构体系结构。在这种结构中,一个客户端请求被送到服务器上执行。客户端主要负责表示服务,服务器主要负责数据库服务。采用客户端/服务器结构后,数据库系统被分成前端和后端,前端主要包括图形界面、表格生成、报表处理等工具,后端负责数据存取结构、查询计算和优化、并发控制以及故障恢复等。前端与后端通过SQL或应用程序来接口。
ODBC(开放式数据库互连)和JDBC(Java程序数据库链接)标准定义了应用程序和数据库服务器通信的方法,应用程序用它来打开与数据库链接、发生查询和更新以及获取返回结果等。
数据库服务器一般分为事务服务器和数据服务器
并行数据库系统
并行体系结构的数据库系统是多个物理上连在一起的CPU,而分布式系统是多个地理上分开的CPU。并行体系结构的数据库系统分为共享内存式多处理机和无共享式并行体系结构。
共享内存式多处理机
一台计算机上有多个活动的CPU,它们共享一个内存和一个公共磁盘。这种并行体系结构最接近与传统的但CPU处理器结构,其设计主要是用N个CPU得到N倍单CPU的性能。但是由于不同的CPU对于内存的访问是平等的,这样会导致一个CPU访问的数据被另一个CPU修改,所以有特殊的处理。然而,内存访问是高速的,很难保证进行内存划分时不损失效率,所以随着CPU个数的增加,共享内存问题变得难以解决。
无共享式并行体系结构
一台计算机上有多个活动的CPU,它们有自己的内存和磁盘。各个承担数据库服务的CPU划分它们自身的数据,通过划分的任务以及通过每秒兆级的高速网络通信完成事物查询。
分布式数据库系统
分布式DBMS包括,物理上分布、逻辑上集中的分布式数据库结构,物理上分布、逻辑上分布的分布式数据库结构。
前者的思想是把单位的数据模式按数据来源和用途合理地分布在系统的多个点上,使大部分数据可以就地或就近存取。数据在物理上分布后,由系统同一管理,使用户不感到数据的分布。
后者一般由两部分组成:一是本结点的数据模式,二是本节点共享的其他结点上有关的数据模式。节点间的数据共享由双方协商确定。这种数据库结构有利于数据的集成、扩展和重新配置。
数据库产品很多,它们支持不同的数据模型,使用不同的数据库语言,建立在不同的操作系统上,存储结构也各不相同,但体系结构上都具有相同的特征,采用“三级模式和两级影响”,如下所示。
数据库系统采用三级模式结构,这是数据库管理系统内部的系统结构。数据库有“型”和“值”的概念,“型”是指对某一数据的结构,“值”是型的一个具体赋值。
数据库系统设计员可以在视图层、逻辑层和物理层和物理层对数据进行抽象,通过外模式、概念模式和内模式来描述不同层次上的数据特性。
外模式
外模式也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述。它由若干个外部记录类型组成。用户使用数据操纵语言对数据库进行操作,实际上是对外部记录进行操作。
描述外模式的数据定义语言称为“外模式DDL”。有了外模式,程序员不必关系概念模式,只与外模式发生联系,按外模式的存储结构操作数据。
概念模式
概念模式也称模式,它是数据库中全部数据的逻辑结构和特征描述,由若干个概念记录组成,只涉及型的描述,不涉及具体的值。概念模式的具体值称为模式的实例,同一模式有很多实例。
概念模式反映的是数据库的结构及其联系,相对稳定;实例反映的是数据库某一时刻的状态,所以是相对变动的。
概念模式不仅描述概念记录类型,还要描述记录间的联系、操作以及数据的完整性和安全性要求。概念模式不涉及存储结构、访问技术等细节。只有这样概念模式才算做到了“物理数据独立性”。
描述概念模式的数据定义语言称为“模式DDL”。
内模式
内模式也称存储模式,是数据物理结构和存储方式的描述,内模式定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。如,记录的存储方式(顺序存储、B树结构存储、Hash方式存储),索引按照什么方式组织,数据是否压缩、加密,数据的存储记录结构有何规定。
描述内模式的数据定义语言称为“内模式DDL”。
注意,内部记录不涉及物理记录,也不设计设备的约束。它比内模式更接近于物理存储和访问的哪些软件机制,是操作系统的一部分(即文件系统)。例如磁盘上读写数据。
总之,数据安外模式的描述提供给用户,按内模式的描述存储在磁盘,而概念模式提供了这两级模式的相对稳定的中间层,并使得两级中任意以及的改变都不受另一极影响。
两级映像
数据库系统在三级模式之间提供了两级映像:模式/内模式映像、外模式/模式映像。因为这两级映像保证了数据库中的数据具有较高的逻辑独立和物理独立性。
数据独立性是指数据域程序独立。数据的独立性由二级映像功能来保证。数据独立性包括物理独立性和逻辑独立性
大数据(BigData)是指无法用拥有的软件工具提取、存储、搜索、共享、分析和处理的海量的、复杂的数据集合。大数据的产生背景有以下4个方面:
大数据(BigData)的特征如下:
理解大数据:让大数据更有意义,挖掘潜在的“大价值”这才是对大数据的正确理解。为此有许多问题需要研究与解决
大数据主要面临的三大挑战:
大数据产生的安全风险:
需求分析:分析用户的需求,包括数据、功能和性能需求;得到数据流图、数据字典和需求说明书。
概念设计:用数据模型明确地表示用户的数据需求。其反映了用户的现实工作环境,与数据库的具体实现技术无关。
逻辑设计:根据概念设计模型及软件的数据模型特征,按照一定的转换规则和规范化理论,把概念模型转换为逻辑数据模型,如层次模型、网状模型、关系模型等。
物理设计:为一个确定的逻辑数据模型选择一个最适合应用要求的物理结构模型。
数据模型就是对现实世界数据特征的抽象。最常用的模型分为概念数据模型和基本数据模型。
概念数据模型,也称信息模型,是按用户的观点对数据和信息建模;是现实世界到信息世界的第一层抽象,强调语义表达,易于用户理解;是用户和数据库设计人员交流的语言,主要用于数据库设计。这类模型中最著名的是 实体-联系模型,简称 E-R 模型。
基本数据模型,它是按计算机的观点对数据建模,是现实世界数据特征的抽象。基本数据模型有层次模型、网状模型、关系模型和面向对象模型。
层次模型: 采用树行结构表示数据与数据间的联系。在层次模型中,每个结点表示一个实体,记录之间用结点之间的连接线表示,并且根结点以外的其他结点有且仅有一个双亲结点。
网状模型:也称 DBTG模型,比层次模式更具有普遍性的数据结构,是层次模型的一个特例。网状模型可以直接描述一个显示世界,因为去掉了层次结构的两个限制,允许两个结点之间有多种联系。(称之为复合联系)
关系模型:目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的联系。其最大特色是描述的一致性。
面向对象模型:存储单位为对象,每个对象包含属性和方法,具有类和继承等特点。Computer Associates 的 Jasmine 就是面向对象模型的数据库系统。
面向对象数据模型比网络、层次、关系数据库模型具有更丰富的表达能力。但正因为面向对象模型的丰富表达能力,模型相对复杂,实现起来比较困难。
数据库结构的基础是数据模型,是用来描述数据的一组概念和额定义。数据模型的3要素如下:
概念模型是对信息世界建模,所以概念模型可以准确地表示信息世界中的常用概念。概念模型有许多表示方法,其中最为常用的是实体-联系方法。该方法用E-R图来描述世界的概念模型,称为实体-联系模型(E-R模型)。
E-R模型只能说明实体间的语义联系,还不能进一步地详细说明数据结构。在解决实际问题时,通常先设计一个E-R模型,然后再把其转换成计算机能接受的数据模型。
1.实体
实体集是相同属性的实体集合,每个实体有一组特性(属性)表示。在E-R模型中,实体用矩形表示。
2.属性
属性是实体某方面的特征,例如,职工实体具有工号、姓名、年龄等属性。在同一实体中,每个实体的属性及其域是相同的,但取值不同。E-R模型中的属性有以下分类
3.联系
在E-R模型中,联系用菱形表示,在菱形框内写明联系名,并用无向边分别与有关实体链接,同时在无向边上标注联系的类型(1:1、1:n或m:n)。实体的联系分为实体内部的联系和实体与实体之间的联系。实体内部的联系反映数据在同一记录内各个字段间的联系。
两个不同实体之间的联系
1:1
)1:n
)m:n
)两个以上不同实体集之间的联系
两个以上不同实体集之间存在1:1:1
、1:1:n
、1:m:n
、r:m:n
的联系,例如下图表示了3个不同实体集之间的联系,其中:
r:m:n
)的联系,联系名为 SP_P。表示供应商为多个项目供应多个零件,每个项目可用多个供应商的零件,每种零件可有不同的公因数供应的语义1:m:n
)的联系,联系名为P_D。表示一个特护并发有多个病人和多个医生,一个医生只负责一个并发,一个病人只属于一个病房的语义。
注意3个实体集之间的多对多联系和3个实体集两两之间的多对多联系的语义是不同的。例如,供应商和项目实体集之间的“合同”联系,表示供应商为那几个工程签了合同;供应商与零件之间的“库存”联系,表示供应商库存零件的数量;项目与零件两个实体集之间的“组成”联系,表示一个项目由哪几种零件组成。
同一实体集内的二元联系
同一实体集内的二元联系页存在1:1
、1:n
、m:n
联系。
4.实体-联系方法
E-R 图来表示数据模型,在E-R图中有下标所示的几个主要构件
例子:学校有若干个系,每个系有若干教师和学生;每个教师可以担任若干门课程,并参加多个项目;每个学生可以同时选修多门课程。请设计该学校教学管理系统E-R模型,要求给出每个实体、联系的熟悉。
解:该学校教学管理系统有5个实体,即系、教师、学生、项目和课程。
5.扩充的E-R模型
某些特殊语义仅用基本E-R模型无法表达清楚。在本节讨论扩展的E-R模型,包括弱实体、特殊化、普遍化等概念。
弱实体
在现实世界中有一种特殊的联系,这种联系代表实体间的所有关系,例如职工与家属的联系,家属总是属于某职工的。这种实体对于另一些实具有很强的依赖关系,即一个实体的存在必须以另一个实体为前提,将这类实体称为弱实体。
普遍化、特殊化
前面已经介绍,实体集是具有相同属性的实体集合。但现实中,一方面具有一些共性,另一方面还有各自的特殊性。这样,一个实体可以安装某些特征区分为几个子实体。例如,学生实体集可以分为研究生、本科生和大专生等子集。将这种从普遍到特殊的过程称为“特殊化”。
将几个具有共同特性的实体集概括成一个更普遍的实体集的过程称为“普遍化”。例如,可以将研究生、本科生和大专生概括为学生,还可以将学生、教师、职工概括为人。这就是从特殊到一般的过程。
教职工实体集中的某个职工既是在职生又是教师或工人,那么在职生、教师和工人应该就是重叠特殊化;而在职生、教师和工人的集合等于教职工,所以是全部特殊化。
在扩充E-R模型中,子类继承超类所有属性和联系,但是子类还有自己特殊的属性和联系。
在扩充的E-R图中,超类-子类关系模式使用特殊化圆圈和连线的一般方式表示。超类到圆圈有一条连线,连线为双线表示全特殊化,连线为单线,表示部分特殊化;双竖边框表示子类。有符号“∪”的线表示特殊化;圆圈中的d表示不相交特殊化;圆圈中的o表示重叠特殊化;超类与圆圈用单线相联,表示部分特殊化。下图给出了一个特殊化的应用实例。
关系模型是由若干个关系模式组成的集合。一个关系模式相当于一个记录型,对应于程序设计语言中类型定义的概念。关系是一个实例,也是一张表,对应于应用程序设计语言中遍历的概念。给定遍历的值随时间可能发生变化,类似地,当关系被更新时,关系实例的内容也随时间变化。
教学数据库有4个关系模型如下:
Sno
, Sname
, SD
, Sage
, Sex
):学生S关系模式,属性为 学号、姓名、系、年龄、性别Tno
, Tname
, Age
, Sex
):教师T关系模式,属性为 教师号、姓名、年龄、性别Cno
, Cname
, Pcno
):课程C关系模式,属性为课程号、课程名和先休课程号Sno
, Cno
, Grade
):学生选课SC关系模式,属性为学号、课程号、成绩。关系模式中,有下划线的属性是主码属性。下图是教学模型的一个具体实例。
由于关系模型比网状、层次模型更加简单、灵活,因此关系数据库的使用已相当普遍。但是现实世界中存在许多更复杂数据结构的实际应用领域,需要使用面向对象的数据模型。
1.属性和域
要描述一个事物,需要若干特征来表示,这些特征称为属性。例如 学号、姓名、性别等。
每个属性的取值范围对应一个值的集合,称为该属性的域。例如,学号的域是6位整数;姓名的域是10位字符;性别的域为{男,女}。
在关系数据模型中,通常对域加了限制,所有的域都应是原子数据,如整数、字符串,而集合、数组非原子数据。关系数据模型的这种限制称为第一范式(1NF)条件。但也有些关系数据模型突破了1NF的限制,称为非1NF的关系数据模型。
2.笛卡尔积
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。A表示所有声母的集合,B表示所有韵母的集合,那么A和B的笛卡尔积就为所有可能的汉字全拼。
笛卡尔积中,每个集合称为一个元组,元组的每一个值称为元组的一个分量,元组的个数称为基数。
另外,关系中属性的个数称为“元数”。
案例
给出三个域:
D1=SUPERVISOR = { 张清玫,刘逸 }
D2=SPECIALITY= {计算机专业,信息专业}
D3=POSTGRADUATE = {李勇,刘晨,王敏}
则D1,D2,D3的笛卡尔积为D:
D=D1×D2×D3 ={(张清玫, 计算机专业, 李勇), (张清玫, 计算机专业, 刘晨),
(张清玫, 计算机专业, 王敏), (张清玫, 信息专业, 李勇),
(张清玫, 信息专业, 刘晨), (张清玫, 信息专业, 王敏),
(刘逸, 计算机专业, 李勇), (刘逸, 计算机专业, 刘晨),
(刘逸, 计算机专业, 王敏), (刘逸, 信息专业, 李勇),
(刘逸, 信息专业, 刘晨), (刘逸, 信息专业, 王敏)}
这样就把D1,D2,D3这三个集合中的每个元素加以对应组合,形成庞大的集合群。
3.关系的相关名称
关系表示为R(D1, D2, …, Dn)
4. 关系的3种类型
5. 关系数据库模式
关系的概念对应于程序设计语言中变量的概念,而关系模式对应于程序设计语言中类型定义的概念。关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称之为关系数据库。
关系的描述称为关系模式,可以表示为 $$ R(U,D,dom,F) $$
通常将关系模式间记为: $$ R(U)或(A1,A2,A3,...,An) $$
属性向域的映像常常直接说明属性的类型、长度。通常在关系模式主属性上加下划线表示该属性为主码属性。
6.完整性约束
完整性约束提供了一种手段来保证用户对数据库的修改不会破坏数据的一致性。因此完整性规则防止的是对数据的意外破坏。关系模型的完整性规则是对关系的某种约束条件。关系模型的完整性分为三类:实体完整性、参照完整性(也称引用完整性)、用户定义完整性。
实体完整性:规定基本关系 R 的主属性 A 不能取空值。
参照完整性:实体间的联系是用关系来描述,这样就存在着关系与关系间的引用。
例如,员工和部门关系如下
这两个关系存在着属性的引用,即员工关系中的“部门号”,必须是确实存在的部门的部门号。也就数说,员工关系中的“部门号”属性取值要参照部门关系的“部门号”属性取值。
用户定义完整性:用户定义完整性就是针对某一具体的关系数据库的约束条件,由应用的环境决定。例如,银行的用户账户规定必须大于等于 100000、小于999999。
7.关系运算
现有两个集合
1.并
关系R与S具有相同的关系模式,即R与S的元数相同(结构相同)。关系R与S的并是由属于R或属于S的元组构成的集合,记作 R ∪ S ,其定义如下: R ∪ S={t∈R ∨ t∈S }
2.差
关系R与S具有相同的关系模式,关系R与S的差是由属于R但不属于S的元组构成的集合,记作 R - S ,其定义如下: R - S={t∈R ∧ t∉S }
3.广义迪卡尔积
两个元数分为 n目 和 m目的关系 R和S的广义迪卡尔积是一个(n+m)列的元组的集合。元组前 n 列是关系 R 的一个元组,后m列是关系s的一个元组,记作 R×S
如果 R 和 S 中有相同的属性名,可在属性名前加关系名作为限定,以示区别。若R有 k1个元组,S有k2个元组,则 R 和 S 的广义迪卡尔积有 K1×k2个元组。
4.投影
从关系的垂直方向进行运算,在关系R中选出若干个属性列A组成新的关系。例如我们从S1中取出Sno和Sname的列,其中重复的行需要删除。
5.选择
从关系的水平方向进行运算,在关系R中选择满足条件的元组。例如从S1中选择 Sno 为 No0003的行
1.交
关系R与S具有相同的关系模式,关系R与S的交是由属于R,且属于S的元组构成的集合,记作 R ∩ S ,其定义如下: R - S={t∈R ∧ t∈S }
2.连接
连接运算是从两个关系R和S的笛卡尔积中选取满足条件的元组。因此,迪卡尔积是无条件连接,其他的联机操作认为是有条件连接。
0连接。从R和S的笛卡尔积中选取属性间满足一定条件的元组。
例如关系R、S如下,求(R.A < S.B)
等值连接
从R和S的笛卡尔积中选取属性间满足相等的元组。
自然连接
自然连接是一种特殊的等值连接,它要求两个属性必须相同,并在结果集中去掉重复的列。
自然要求两个属性必须相同,所以只能选择 R.A = S.A的结果
3.除(Division)
除运算是同时从关系的水平方向和垂直方向进行运算。给定关系 R(X,Y) 和 S(Y,Z) ,X、Y、Z 为属性组。 R ÷ S 应当满足元组在 X 上的分量值 x 的象集 Yᵪ 包含关系 S 在属性组 Y 上投影的集合。
解:根据除法定义,此题的 X 为属性 AB,Y为属性 CD。 R ÷ S 应当满足元组在属性 AB 上的分类 x 的象集 Yᵪ 包含关系 S 在属性组 CD 上投影的集合。
关系 S 在 Y 上的投影为 πCD (S) = { (cd),(ef) } 。对于关系 R ,属性组 X(即 AB)可以取 3 个值,即 { (a,b),(b,d),(c,k) },它们的象集分别为:
由上述象集包含 πCD (S) 的有 (a,b) 和 (c,k),因此 R ÷ S = { (a,b),(c,k) }
SQL 是关系数据库中最普遍使用的语言,包括数据查询、数据操纵、数据定义和数据控制功能,是一种通用的、功能强大的关系数据库的标准语言。
SQL 的特点:
SQL语言支持三级模式结构,其中视图对应外模式、基本表对应模式、存储文件对应内模式,具体结构如下图所示
SQL 由以下几个部分组成:
基本表和视图都是表,所不同的是基本表是实际存储在数据库中的表,视图是虚表,是从基本表或其他视图中导出的表。数据库中只存放视图的定义,不存放视图的数据。用户可以用SQL对基本表和视图进行查询等操作,在用户看来基本表和视图是一样的,都是关系(即表)。
一个表可以带若干索引,索引也存储在存储文件中。每个存储文件就是外部存储器上的一个物理文件,存储文件的逻辑结构组成了关系数据库的内模式。
1. 创建表
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]...
[,<表级约束条件>]);
数据类型:
列级完整性约束条件:
建立一个供应商、零件数据库。其中供应商标 S(Sno, Sname, Status, City),分别表示供应商代码、供应商名、供应商状态、供应商所在城市。零件表 P (Pno, Pname, Color, Weight, City) 表示零件号、零件名、颜色、重量及产地。数据库要满足以下要求:
- 供应商代码不能为空,且值唯一,供应商名也是唯一
- 零件号不能为空,且值唯一;零件名不能为空
- 一个供应商可以有多个零件,而一个零件也可以由多个供应商供应
分析:根据题义,供应商和零件分别要建立一个关系模式。供应商和零件之间是一个多对多的联系,在关系数据库中,多对多联系必须生成一个关系模式,而该模式的码是该联系两端实体的码加上联系的属性构成的,若该联系名为SP,那么关系模式为 SP(Sno, Pno, Qty),其中 Qty 表示零件的数量。
CREATE TABLE S(Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(30) UNIQUE, Status CHAR(8), City CHAR(20), PRIMARY KEY(Sno)); CREATE TABLE P(Pno CHAR(5) NOT NULL UNIQUE, Pname CHAR(30), Color CHAR(8), Weigth NUMBERIC(6,2), City CHAR(20), PRIMARY KEY(Pno)); CREATE TABLE SP(Sno CHAR(5), Pno CHAR(5), Status CHAR(8), Qty NUMBERIC(9), PRIMARY KEY(Sno, Pno), FOREIGN KEY(Sno) REFERENCES S(Sno), FOREIGN KEY(Pno) REFERENCES P(Pno));
2.修改和删除表
修改表
ALTER TABLE <表名>[ADD <新列名><数据类型>[完整性约束条件]]
[DROP [列名/完整性约束条件]]
[MODIFY <列名><数据类型>]
例如,向“供应商”表S增加 Zap “邮政编码”:
ALTER TABLE S ADD Zap CHAR(6);
注意,不论基本表中原来是否已有数据,新增加的列一律为空。
又如,将 Status 字段改为整型可用如下语句
ALTER TABLE S MODIFY Status INT;
删除表
DROP TABLE <表名>
3.索引建立与删除
在数据库中,索引使数据无须对整个表进行扫描,就可以在其中找到所需数据。数据库中的索引是某个表中的一列或若干列的值的集合和相应的指向表中物理标识这些值的数据也的逻辑指针清单。索引作用如下:
索引分为聚集索引和非聚集索引。聚集索引是指索引表中索引项的顺序与表中记录的物理顺序一致的索引。
建立索引
CREATE [UNION][CLUSTER]INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]... )
参数说明:
假设供应销售数据库中有供应商 S、零件 P、工程项目 J、供销情况SPJ 关系,希望建立4个索引。其中,供销情况 SPJ 关系,希望建立4个索引。其中,供应商S中 Sno 圣墟建立索引;零件 P 中 Pno 按升序建立索引;工程项目J中 Jno 按升序建立索引;供销情况SPJ中Sno按升序、Pno按降序、Jno按升序建立索引。
CREATE UNION INDEX S-SNO ON S(Sno);
CREATE UNION INDEX P-PNO ON P(Pno);
CREATE UNION INDEX J-JNO ON J(Jno);
CREATE UNION INDEX SPJ-NO ON P(Pno ASC, Pno DESC, Jno ASC);
删除索引
DROP INDEX <索引名>
4.视图创建与删除
视图是从一个或多个基本表或视图中到处的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基本表,而是一个虚拟表,视图所对应的数据并不是实际地以视图结构存储在数据库中,而是存储在视图所引的表中。使用视图优点如下:
1)视图的创建
CREATE VIEW 视图名(列表明)
AS SELECT 查询子句
[WITH CHECK OPTION];
注意,在创建视图时必须遵循以下的规定:
例:若学生关系模式为 Student( Sno, Sname, Sage, Sex, SD, Email, Tel) ,建立”计算机系“学生的视图,并要求进行修改、插入操作时保证该视图中只有计算机系的学生。
CREATE VIEW CS-STUDENT AS SELECT Sno, Sname, Sage, Sex FROM Student WHERE SD='CS' WITH CHECK OPTION;
2)视图的删除
DROP VIEW 视图名
本小结数据查询以下图所示的学生选课数据库为例。
1. SELECT 基本结构
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC|DESC]...]
SQL 查询中的子句顺序为 SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。其中SELECT、FROM是必须的, HAVING子句只能与GROUP BY搭配使用。
>
:大于>=
:大于等于2.简单查询
例1:查询学生-课程数据库中计算机系CS学生的学号、姓名及年龄。
SELECT Sno,Sname,Sage
FROM S
WHERE SD='CS'
注意,为了理解查询语句的结构,通常在写 SQL 语句时要将保留字(如 FORM、WHERE)作为每一行的开头。但是,如果查询子或子查询很短,可以直接将它们写在一行,
例2:若当前年份为 2017,查询学生的出生年份
SELECT Sno,2017-Sage FROM S
3.连接查询
例1:检索选修了课程号“C1”的学生的学号和姓名,可用连接查询和嵌套查询实现
SELECT Sno,Sname
FROM S,SC
WHERE S.Sno = SC.Sno AND SC.Cno = 'C1'
例2:检索选修了课程名为“MS”的学生的学号和姓名,可用连接查询和嵌套查询实现
SELECT Sno,Sname
FROM S,SC,C
WHERE S.Sno = SC.Sno AND C.Cno=SC.Cno AND C.Cname='MS'
例3:检索至少选修了课程号‘C1’和'C2'的学生的学号,实现方法如下
SELECT Sno
FROM SC1,SC2
WHERE SC1.Sno = SC2.Sno AND SC1.Cno = 'C1' AND SC2.Cno = 'C2'
4.子查询与聚集函数
1)子查询
SELECT Sno,Sname
FROM S
WHERE Sno IN (SELECT Sno
FROM SC
WHERE Cno IN (SELECT Cno
FROM C
WHERE Cname='MS'))
2)聚集函数
使用 ANY 和 ALL 谓词时,必须同时使用比较运算符,其含义及等价的转换关系如下表所示。用聚集函数实现子查询通常比直接用ALL或ANY查询效率高.
谓词 | 含义 | 等价转换关系 |
---|---|---|
>ANY | 大于子查询结果的某个值 | >MIN |
>ALL | 大于子查询结果中的所有值 | >MAX |
小于子查询结果中的某个值 |
| |
小于子查询结果中的所有值 |
| |
>=ANY | 大于等于子查询结果中的某个值 | >=MIN |
>=ALL | 大于等于子查询结果中的所有值 | >=MAX |
<=ANY | 小于等于子查询结果中的某个值 | <=MAX |
<=ALL | 小于等于子查询结果中的所有值 | <=MIN |
=ANY | 等于子查询结果中的某个值 | IN |
=ALL | 等于子查询结果中的所有值(通常没有实际意义) | -- |
!=(或<>)ANY | 不等于子查询结果中的某个值 | -- |
!=(或<>)ALL | 不等于子查询结果中的任何一个值 | NOT IN |
例1: 查询课程C1 的最高分和最低分以及高低分之间的差距
SELECT MAX(G),MIN(G),MAX(G)-MIN(G)
FROM SC
WHERE Cno='C1'
例2:查询其他系比计算机系CS所有学生年龄都要小的学生的姓名及年龄
方法1
SELECT Sname,Sage
FROM S
WHERE Sage'CS'
方法2
SELECT Sname,Sage
FROM S
WHERE Sage'CS'
例3:查询其他系比计算机系CS某一学生年龄小的学生的姓名及年龄
方法1
SELECT Sname,Sage
FROM S
WHERE Sage'CS'
方法2
SELECT Sname,Sage
FROM S
WHERE Sage'CS'
5.分组查询
GROUP BY 子句
GROUP BY 可以对元组进行分组,保留字 GROUP BY 后面跟着一个分组属性列表。SELECT 子句中使用的聚集操作符仅用在每个分组上。
查询 SC 中每个学生的平均成绩
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING 子句
假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,在 GROUP BY 子句后面跟一个 HAVING 子句即可。
供应商数据库中 SPJ 关系,查询某工程至少用了3家供应商供应的零件,并按工程号降序排序
SELECT Jno, AVG(Qty)
FROM SPJ
HAVING COUNT(DISTINCT(Sno)) > 2
ORDER BY Jno DESC
6.更名运算
更名使用 AS 子句来实现
old-name AS new-name
例如:
SELECT Sname AS 名称,Age AS 年龄
FROM S
7.字符串操作
%
:匹配任意字符串
_
:匹配任意一个字符
查询地址包含‘科技路’的学生的姓名
SELECT Sname
FROM S
WHERE Add LIKE '%科技路%'
查询名字为‘晓军'的学生的姓名、年龄和所在系的SQL
SELECT Sname,Age,SD
FROM S
WHERE Add LIKE '_晓军'
8.视图的查询
建立“计算机系”(CS表示计算机系)学生的视图,并要求修改、插入、删除操作时保证该视图只有计算机系的学生。
CREATE VIEW CS-STUDENT
AS SELECT Sno,Sname,Sage,Sex
FROM Student
WHERE SD = 'CS'
WITH CHECK OPTION;
查询计算机系年龄小于20岁的学生的学号及年龄
SELECT Sno,Sage FROM CS-STUDENT WHERE Sage < 20
相当于
SELECT Sno,Sage FROM Student WHERE SD = 'CS' AND Sage < 20
1.插入
插入语句的基本格式如下:
INSERT INTO 基本表名 (字段名[,字段名]...);
插入查询语句
INSERT INTO 基本表名 (列表名)
SELECT 查询语句
将学号为 3002、课程号为 C4、成绩为 98 的元组插入 SC 关系中
INSERT INTO SC
VALUES('3004','C4',98)
2.删除
DELETE FROM 基本表名
[WHERE 条件表达式]
删除表 employees 中姓名为张然的记录。
DELETE FROM employees
WHERE name = '张然'
3.修改
UPDATE 基本表名
SET 列名=值表达式(,列名=值表达式...)
[WHERE 条件表达式]
将教师工资增加5%
UPDATE teachers
SET Salary = Salary*1.05
数据库控制,控制的是用户对数据的存储权力,是由DBA决定的。但是,某个用户对某类数据具有何种权利,是个政策问题而不是技术问题。DBMS的功能就是保证这些决定的执行。因此,DBMA数据控制应具有以下功能:
SQL标准包括 DELETE、INSERT、SELECT 和 UPDATE 授权。SELECT 权限对应于 READ权限,SQL 还包括 REFERENCES 权限,用来限制用户在创建关系时定义外码的能力。
1.授权的语句格式
GRANT <权限>[,<权限>]...[ON<对象类型><对象名>] TO <用户>[,<用户>]...
[WITH CHECK OPTION];
注意,不同诶新的操作对象有不同的操作权限
对象 | 类型 | 操作权限 |
---|---|---|
属性列 | TABLE | SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES(4种权限的总和) |
视图 | TABLE | SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES(4种权限的总和) |
基本表 | TABLE | SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、ALL PRIVILEGES(6种权限的总和) |
数据库 | DATABASE | CREATETABLE 建立表的权限,可由DBA授予普通用户 |
说明如下:
如果用户要求给数据库SPJ中的供应商S、零件P、项目J 表赋予各种权限。
将对 供应商S、零件P、项目J 的所有权限赋值给 User1及User2,其授权语句
GRANT ALL PRIVILEGES ON TABLE S,P,J TO User1,User2;
将对公因数 S 的插入权限赋给 User1,并允许将此权限赋给其他用户,其授权语句如下:
GRANT INSERT ON TABLE S TO User1 WITH CHECK OPTION;
DBA 把数据库SPJ建立表的权限赋给用户 User1,其授权语句如下:
GRANT CREATETABLE ON DATABASE TO User1;
2.收回授权语句格式
GRANT <权限>[,<权限>]...[ON<对象类型><对象名>] FROM <用户>[,<用户>]...
如果收回用户要求 给数据库SPJ中的供应商S、零件P、项目J 表的各种权限
将用户User1及User2 对 供应商S、零件P、项目J 的所有权限
REVOKE ALL PRIVILEGES ON TABLE S,P,J FROM User1,User2;
将所有用户对供应商S的所有查询权限收回。
REVOKE SELECT ON TABLE S FROM PUBLIC;
将User1对供应商S的供应商编号的修改权限收回。
REVOKE UPDATE(Sno) ON TABLE S FROM User1;
SQL 提供了将 SQL 语句嵌入到某种高级语言中的使用方式,通常采用预编译的方法识别嵌入到高级语言中的 SQL 语句。
嵌入式 SQL 与主语言之间的通信方式有以下3中:
在关系模型数据库中,一个数据库模式是关系模式的集合。关系数据理论是指导数据库设计的基础,关系数据库设计是数据库语义学的问题。通常,要保证构造的关系既能准确反映现实世界,又有利于应用和具体的操作。关系数据库设计理论的核心是数据间的函数依赖,衡量的标准是关系泛化的程度及分解的无损连接和保持函数依赖性。关系数据库设计的目标是生产一组合适的、性能良好的关系模式,以减少系统中信息存储的冗余度,并可方便地获取信息。
关系模式中的各属性之间的相互依赖、相互制约的联系称为数据依赖。函数依赖是一种最重要、最基本的数据依赖。
学生关系:S(SNO,SN,AGE,DEPT)
选课关系:SC(SNO,CNO,SCORE)
系关系:D(DEPT,MN)
函数依赖。关系模式中属性之间的一种逻辑依赖关系。
假设,学生关系:S(SNO,SN,AGE,DEPT)。由于一个SNO对应一个学生,而一个学生只属于一个系,所以当SNO确定之后,SN,AGE,DEPT的值也唯一确定了,可以说SNO决定函数(SN,AGE,DEPT),或者是(SN,AGE,DEPT)函数依赖于SNO。或者表示为:SN0->(SN,AGE,DEPT);
可以抽象成:X->Y(Y依赖于X,X决定Y)。
平凡的函数依赖和非平凡的函数依赖
平凡依赖要求 Y 是 X 的子集,就是子集决定自己或者自己的一部分。 (SNO,CNO) -> CNO
如果 Y 不属于 X ,那么称为非平凡的函数依赖。 SNO ->(SN,AGE,DEPT)
完全函数依赖 和部分函数依赖
完全依赖是指 X 决定 Y,但是 X 的任意子集都不能决定 Y,这就是完全函数依赖。
反之,X 的一部分就能决定 Y,对于 X->Y 这个关系来说,就是部分依赖了。
注意:只有当决定因素是组合属性的时候,讨论部分依赖才有意义,当决定因素是单属性的时候,只能是完全函数依赖。
传递依赖
A->B,B->C,那么有A->C,这就是传递依赖.
比如,学号->班级,班级->讲师,但是讲师不能决定班级,所以讲师对学号是传递函数依赖。
码
K为U的属性或属性集合,若K->U,则 K 为候选码。
若有多个候选码,则选一个作为主码。候选码通常也称为候选关键字。
主属性和非主属性
包含任何一个候选码的属性称为主属性,否则为非主属性。
外码
若组合U中的熟悉或属性组 X 非它自己的码,但是是另一个关系的码,则成 X 是外码。
函数依赖的公理系统
设关系模式 R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则
根据上述三条推理,又可以退出下列3条推理:
在A->B这一函数依赖中,左边的属性可以随意增加,右边的属性可以随意减少. 因为A决定B,那么增加任意属性依然可以决定B。
关系数据库设计的方法之一就是满足适当的范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式规划化的程度。范式有1NF、2NF、3NF、4NF、5NF,其中1NF级别最低。这几种范式之间,5NF ⊂ 4NF ⊂ 3NF ⊂ 2NF ⊂ 1NF 成立。通过分解,可以将一个低一级范式的关系模式转换成若干个高一级范式的关系模式,这个过程称为规范化。下面给出 1NF、2NF、3NF 的定义。
现在数据库设计最多满足3NF,普遍认为范式过高,虽然具有对数据关系更好的约束性,但也导致数据关系表增加而令数据库IO更易繁忙,原来交由数据库处理的关系约束现更多在数据库使用程序中完成。
1. 1NF(第一范式)
定义:若安息模式 R 的每一个分类是不可再分的数据项,则关系模式 R 属于第一范式。
同一列不能有多个值。
正例: 表4.3——学生和课程的关系
Name | Course |
---|---|
Jim | History |
Jim | Math |
Jim | Chinese |
Alice | English |
Tom | History |
Tom | Math |
反例1: 单一字段存放了多个值,违反了1NF,Jim现在到底上的哪门课呢?
Name | Course |
---|---|
Jim | History,Math,Chinese |
Alice | English |
Tom | History,Math |
反例2: 多个字段表达同一个意思,这也是不符合1NF的。( Course1、 Course2、 Course3 都是表示课程)
Name | Course1 | Course2 | Course3 |
---|---|---|---|
Jim | History | Math | Chinese |
Alice | English | ||
Tom | History | Math |
但是 1NF 存在以下4个问题:
正是因为上述4个原因,所以要对模式进行分解,并引入了2NF。
2. 2NF(第二范式)
定义:若关系模式 R ∈ 1NF,且每一个非主属性完全依赖于码,则关系模式 R ∈ 2NF。
通俗点讲,①必须满足1NF②必须有一个主键,且没有包含在主键中的列必须完全依赖于主键,而不能只依赖主键的一部分
举个例子
Name | Course | Score |
---|---|---|
Tim | Chinese | 70 |
Tim | Math | 90 |
Alice | Chinese | 80 |
Juliea | Math | 80 |
在这张成绩表中,首先满足了1NF,列的原子性。其次,必须有主键,显而易见,(Name+Course)才能唯一确定一个元组,因此,Name+Course为联合主键。Score只有通过Name+Course才能共同确定,仅仅通过Name或Course是不行的。以y=f(x)为例,即,Score=f(Name+Course),Score不能只依赖Name或Course。
3. 3NF(第三范式)
定义:消除了非主属性对于码的传递函数依赖(满足2NF且非主属性列都不传递依赖于主键)。
通俗点讲,3NF必须满足,①满足2NF②不能有传递的依赖关系。换句话说,表中的每一列和主键直接相关,不能是间接相关的。再换句话说,通过主键就能直接定位到每一列,而不能是间接才能定位到
举个例子
订单编号 | 订单项目 | 客户ID | 客户名称 |
---|---|---|---|
001 | 水果 | 101 | 张三 |
002 | 饮料 | 101 | 张三 |
在这个表中,通过订单编号能确定订单项目名称,如001能确定是水果;通过订单编号,能确定客户ID,通过客户ID能确定客户名称,当存在这种情况即存在传递依赖时,这个表就不满足3NF了,需要拆分。
可以拆分为:
订单编号 | 订单项目 | 客户ID |
---|---|---|
001 | 水果 | 101 |
002 | 饮料 | 101 |
客户ID | 客户名称 |
---|---|
101 | 张三 |
分解
对一个给定的模式进行分解,是的分解后的模式是否有原来的模式等价有3中情况:
无损连接
保持函数依赖
事务是一个操作序列,这些操作“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位。事务和程序是两个不同的概念:一般一个程序可包含多个事务。在SQL语言中,事务定义的语句有以下三条:
事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这4个特性也称事务的ACID性质。
在数据库运行过程中,难免会出现故障。因此,数据库的关键技术在于建立数据冗余,即备份数据。如何在数据库出现故障后能够及时地使数据恢复到故障前的正确状态,就是数据库恢复技术。
1.故障类型
2.备份方法
恢复的基本原理是“建立数据冗余”(重复存储)。建立冗余数据的方法是进行数据转储和登记日志文件。数据的转储分为静态转储和动态转储、海量存储和增量存储、日志文件。
静态转储和动态转储
静态转储是指在转储期间不允许对数据库进行任何存取、修改操作;动态转储是指在转储期间允许对数据库进行任何存取、修改操作。因此,转储和用户事务可并发执行。
海量存储和增量存储
海量存储是指每次转储全部数据。增量存储是指每次只转储上次转储后更新过的数据
日志文件
在事务处理的过程中,DMBS把事务开始、事务结束以及对数据的插入、删除、修改 的每一次操作都写入日志文件。一旦发生故障,DMBS 的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此 DBMS 利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后被副本进行介质故障恢复。
3.恢复
事务恢复有以下3个步骤:
4.数据库镜像
为了避免磁盘介质出现故障影响数据库的可用性,许多 DBMS 提供数据库镜像功能用于数据恢复。需要说明的是,数据库镜像是通过复制数据实现的,但频繁的复制数据会降低系统的运行效率。因此,在实际应用中往往对关键的数据和日志文件镜像。
所谓并发控制,是指在多用户共享的系统中有许多用户可能同时对同一数据进行操作。并发操操作带来的问题是数据的不一致性,主要有三类:丢失更新、不可重复读和读脏数据。其主要原因是事务的并发操作破坏了数据的隔离性。 DBMS 的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户得到不正确的数据。
1.并发操作带来的问题
并发操作带来的数据部不一致性有三类:
丢失修改
如下图(a)所示,事务 T1、T2 都是对数据 A 做减 1 操作。 事务 T1 在时刻 t6 把 A 修改后的值 16 写入数据库,但事务 T2 在时刻 t7 再把他对 A 减 1 后的值 15 写入。两个事务都是对 A 的值进行减 1 操作并且都执行成功,但 A 中的值却只减了 1.例如火车售票系统, T1 与 T2 各售出一张票,但数据库例的存储却只减少了一张,造成数据的不一致。原因在与 T1 事务对数据的修改被 T2 事务广覆盖而丢失了,破坏了事务的隔离性。
不可重复读
如图(b)所示,事务 T1 读取 A、B 的值后进行运算,事务 T2 在 t6 时刻对 B 做了修改以后,事务 T1 又重新读取了 A、B 的值再运算,同一事务内对同一组数据的相同运算结果不同,显然与事实不相符。同样是事务 T2 干扰了事务 T1 的独立性。
读脏数据
如图(c)所说义,事务 T1 对数据 C 修改之后,在 t4 时刻事务 T2 读取修改后的的 C 值做处理,之后事务 T1 回滚,数据 C 恢复了原来的值,事务 T2 对 C 所做的处理是无效的,它读的是被丢掉的垃圾值。
通过以上3个例子,在事务并行处理的过程中对相同数据访问导致了数据的不一致性,解决该问题可以从保证事务的隔离性入手。
2.并发控制技术
并发控制技术的主要技术是封锁。基本封锁的类型由排它锁(简称 X 锁或写锁)和共享锁(简称 S 锁或读锁)。
3.活锁与死锁
所谓活锁,是指当事务 T1 封锁了数据 R 时,事务 T2 请求封锁数据 R,于是 T2 等待,当 T1 释放了 R 上的封锁后,系统首先批准 T3 请求, 于是 T2 仍等待,当 T3 释放了 R 上的封锁后,又批准了 T4 请求,依次类推,使得 T2 可能永远等待的现象。
所谓死锁,是指两个以上的事务分别请求封锁对方已经封锁的数据,导致了长期等待而无法继续运行下去的现象。
4.并发调度的可串行性
多个事务的并发执行是正确的,当且晋档其结果与某一次序串地执行它们时的结果相同,称这种调度策略是可串行化的调度。
可串行性是并发事务正确性的准则,按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
5.两端封锁协议
所谓两端封锁协议,是指所有事务必须分两个阶段对数据项枷锁和解锁。即事务分两个阶段,第一个阶段是获得封锁,事务可以获得任何数据项上的任何类型的锁,但不能释放;第二阶段是释放锁,事务可以释放任何数据项上的任何类型的锁,但不能申请。
6.封锁的粒度
封锁对象的大小称为封锁的粒度。封锁对象可以是逻辑单元(如属性、元组、关系、索引项、整个索引甚至整个数据库),也可以是物理单元(如数据页或索引页)。
以下关于数据库系统的描述中,正确的是()。
A.数据库能减少数据冗余,避免一切数据的重复存储
B.各类用户程序均可随意地使用数据库中的各种数据
C.数据库中的概念模式如有改变,子模式不必变,因而用户程序不必改写
D.数据库系统的存储模式如有改变,则概念模式应予以调整,否则用户程序会在执行中出错
答案 C
D.不用调整概念模式,只要调整概念模式-内模式映射即可。
在关系数据库设计中,设计关系模式是数据库中哪个阶段的任务()。
A.逻辑设计阶段
B.概念设计阶段
C.物理设计阶段
D.需求分析阶段
答案 A
数据库逻辑设计的主要目的是产生一个 DBMS 可处理的逻辑数据模型和数据库模式,该模式必须满足数据库的存取、一致性及运行等方面的用户需求。关系数据模型是目前最常用的逻辑数据模型,因此设计关系模式是数据库逻辑设计阶段的主要任务之一。
关系 R1 和 R2 如下所示:
R1
A | B | C | D |
---|---|---|---|
a | d | c | e |
c | b | a | e |
d | e | c | e |
e | f | d | a |
R2
C | D | E | F |
---|---|---|---|
a | e | c | a |
a | e | a | b |
c | e | b | c |
若进行 R1 ⋈ R2,则运算结果共有()个元组
A. 4
B. 5
C. 6
D. 7
答案 A
本体主要考察关系运算中的自然连接运算。自然连接,是通过两个关系中相同属性的相同值来进行连接的一种关系运算。本题中, R1 和 R2 中相同的属性分别是 C 和 D,而取值也相等的是 R1 中的第一行、第三行与 R2 中的第三行,另外还有 R1 中的第二行与 R2 中的第一行和第二行,因此自然连接后的运算结果为
A B C D E F a d c e b c d e c e b c c b a e c a c b a e a b 因此,运算结果共有4分元组(记录)。
下列关于分布式数据库特点的描述错误的是()。
A. 分布式数据库系统的数据是分布的,难以集中控制
B. 分布式数据库系统的数据的组成对应用程序来说是透明的,即具有独立性
C.分布式数据库系统的数据存在冗余且可控
D.分布式数据库系统的数据具有场地自治性
答案 A
分布式数据库系统是传统集中式数据库系统的发展,因此它具有集中式数据库系统的特点。同时,由于它的分布式性而有使这些特点具有新的意义。传统的数据库系统针对文件系统的弱点,采用了集中控制以实现数据共享。对于分布式数据库系统来说,由于数据的分散性,分布式数据库系统具有分散与集中同一的特性。分布式主要有以下几个特点:
- 数据的集中控制性,分布式数据库是由传统的数据库发展而来的,因此也具有集中控制的特性
- 数据的独立性,独立性是指数组的组成对应于程序来说是透明的。应于程序只需要考虑数据的逻辑结构,而不用考虑数据的物理存放,因而数据在物理组织上的改变不会影响应用程序。
- 数据冗余可控性,分布式数据库中的数据一般存储在经常使用的场地上,但应用对两个或两个以上场地的同一数据有存取要求也是时常发生的,而且当传输代价高于存储代价时,可以将同一数据存在两个(甚至更多)的场地上,以节省传输的开销。由于这种冗余是在系统控制下的,所以给系统造成的不利影响是可控的。
- 场地自治性,局部用户所使用的数据库可以不参与到全局数据库中去,这种局部应用独立于全局应用的特性就是局部数据库的自治性。存取的有效分布式数据库系统的全局查询可以分解成等效的子查询,即全局查询的执行计划可以分解成多个子查询执行计划,而子查询计划有时在各场地上分布执行的。
关于数据仓库的特性,下列说法正确的是()。
A. 面向主题的特征是指在组织数据仓库数据时,需要将各种分析需求归类并抽象,形成相应的分析应用主题,并根据分析应用主题的数据需求设计和组织数据
B. 集成特征是指需要将业务系统中所有的数据抽取出来,载入到数据仓库中
C. 集成特性是指需要将企业整个架构中的各个数据和应用集中到数据仓库中
D. 随时间变化性是指数据仓库中的每个数据单元一般都有时间标志,且其中各种数据(包括原始数据)会随时间变化被经常修改
答案 A
面向主题的特性是指将关于主题的数据组织起来分析数据及数据之间的关系。
集成是将业务系统中关于主题的数据集中起来,对数据进行一系列预处理。
随时间变化的特征是不进行分析数据更新操作,但数据仓库随时间变化不断增加、删除、修改数据。
关系 R (A, B, C) 满足下列函数依赖 F { A->B, A->C, B->AC},关系 R 的候选关键字为()。
A. AC
B. A 和 B
C. A 和 BC
D. AC 和 AB
答案 B
本题主要考察候选键。求候选键是求范式或后续规范化处理的基础。求候选键最稳妥的办法是图示法。图示法求候选键的过程如下:
- 将关系的函数依赖关系,用“有向图”的方式表示。
- 找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正确遍历图中所有结点,则该属性集即为关系模式的候选键。
- 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的节点)并入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。
在本题中,我们也可以通过图示法来求候选键。如果一个属性集能唯一标识原则,且又不含有多余属性,那么这个属性集就是候选键。根据图示法,可以得到下图
然后从 A 属性出发,可以遍历到 B、C,因此 A 是一个候选键,但这时,我们注意到,从 B 出发,也可以遍历图中剩余的顶点,因此 B 也是一个候选键。所以本体的候选键是 A 和 B。
设有图书管理数据库,其关系模式 R0 (L#, B#, BNAME, BPRICE, BPUB) , 其属性分别表示个人借书证号、书号、书名、书价、图书出版社。该关系模式属于()。
A. 第一范式但不属于第二范式
B. 属于第二范式但不属于第三范式
C. 属于第三范式
D. 不是范式
答案 A
第一范式要求每个属性都是不可分解的,题中关系模式 R0 的所有属性不可在分解,因而属于第一范式,但它不是第二范式,因为第二范式要求每个分组属性完全依赖于主码,而 R0 中如果将 (L#, B#) 作为主码的话,则属性 BNAME 只是部分依赖于主码(因为它的完全函数依赖于 B#),所以它不是第二范式,如果不满足第二范式也就不可能满足第三范式或更高级别的范式。
如果有多人借同一本书,则 BNAME 等信息要重复出现多次。如果将 R0 分解成 R1 (L#, B#) 和 R2 (B#, BNAME, BPRICE, BPUB) 两个关系模式,则 R1 和 R2 都成为第二范式,在一定程度上降低了数据冗余。
设有如下关系:
关系 R
A | B | C | D |
---|---|---|---|
2 | 1 | a | c |
2 | 2 | a | d |
3 | 2 | b | d |
3 | 2 | b | c |
2 | 1 | b | d |
关系 S
C | D | E |
---|---|---|
a | c | 5 |
a | c | 2 |
b | d | 6 |
与元组演算表达式等价的关系代数表达式是( )。
A. πA,B(σA>E (R ⋈ S))
B. πB(σA>E (R x S))
C. πB(σA>E (R ⋈ S))
D. πB(σR.C=S.C ^ A>E (R x S))
答案 C
在元组演算表达式中, u 代表关系 R 的元组,v 代表关系 S 的元组。
- u[3] = v[1] 表示 R 的第 3 个属性 (C)值等于 S 的第一个属性 (C) 值,相当于关系运算中的 R.C = S.C
- u[4] = v[2] 表示 R 的第 4 个属性(D)值等于 S 的第二个属性 (D) 值,相当于关系运算中的 R.D = S.D
- 从这2个等式可以排除选项 B 个 D
- u[1] > v[3] 表示 R 元组的第一个属性 (A) 值大于 S 元组的第 3 个属性(E)值。相当于关系运算符中的 R.A > S.E 。
- t[1] = u[2] 表示最后结果只取关系 R 的第2个属性(B)。该等式排除了选项 A。
- 根据上面的分析,可以得出,本题的正确答案案为 C。
若关系 R、S 如下图所示, R ÷ S = ( )。
关系 R
A | B | C | D |
---|---|---|---|
a | b | c | d |
a | b | e | f |
c | a | c | d |
关系 S
C | D |
---|---|
c | d |
e | f |
A.
A | B |
---|---|
a | b |
c | a |
B.
C | D |
---|---|
c | d |
C.
A | B |
---|---|
c | d |
D.
A | B |
---|---|
a | b |
答案 D
本题主要考察除法运算。其求解过程为:
首先按除运算定义要求,确定 X,Y,Z 属性集合。Y 是关系 R 中的属性集合,Z 是 S 中全部属性的集合,所以很容易得出 Z = { C, D },同时由于 Y = Z , 所以 Y = { C, D } , X = { A, B }。因此 R ÷ S 结果集包含属性 A 和 B。
然后将关系 R 的 A、B 元组(共有 与
两个元组)与关系 S 做笛卡尔积操作,结果如下
A B C D a b c d a b e f c a c d c a e f 通过检查该表,发现元组 与 S(Z)的笛卡尔积被包含在 R(X, Y) 中,而元组
与 S(Z) 的迪卡尔即有一条记录未被包含在 R(X, Y) 中,所以结果只有原则。
若关系模式 R < {A, B, C}, {A->B, B->C},则将 R 分解为 R1(A, B) 和 R2(B, C),则该分解( )。
A. 满足无损连接,但不保持函数依赖
B. 不满足无损连接,但保持函数依赖
C. 既不满足无损连接,又不保持函数依赖
D. 既满足无损连接,又保持函数依赖
答案 D
本题考查对模式分解的掌握。根据无损连接分解判定定理,有 R1 ∩ R2 -> R2 - R1,即 B -> C 成立,故分解具有无损连接性;又 R 的函数依赖集 F = { A->B, B->C },在 R1、R2 上的投影分别为 F1 = {A->B}、F2 = {B->C},即 F1 ∪ F2 = F,从而 (F1 ∪ F2)+ = F+,根据定义,分解保持了函数依赖。
给定厝模式 R (U, F),U={A, B, C}, F = { AB->C, C->B }。关系 R 有()。
A. 1个非主属性和2个主属性
B. 2个非主属性和1个主属性
C. 0个非主属性和3个主属性
D. 3个非主属性和0个主属性
答案 C
本题主要考察函数依赖的基础知识。
关系中的某一属性或属性组的值的唯一的标识一个元组,而其任何真子集都不能再标识,则成该属性组为候选码。
这里要注意,如果一个关系有多个不同的主码时,那么这些主码组合在一起就是候选码,也就是说一个关系的主码只能选一个,而候选码可以有多个,这就好比选班长一样,候选人可以多个,但是最终的班长只能有一个。当候选码只有一个时,候选码就是主码。
主属性和非主属性是互补的,一个关系模式中的属性不是主属性就是非主属性。组成候选码的属性就是主属性,其他的就是非主属性,所以要判断关系模式中的属性是主属性还是非主属性,首先要求解出候选码。
在本题中,从题目给出的函数依赖关系可以看出,AB 能推导出 C,即能推导出所有的属性;而 C 能推导出 B,同样 AC 也能推导出所有的属性,因此 AB 与 AC 都是该关系的候选码。所以该关系模式都是主属性,没有非主属性。
给定关系模式 R (U,F), U={A, B, C, D}, F = { A->C, A->D, C->B, B->D }, F 中的冗余函数依赖为 ()。
A. A->C
B. A->D
C. C->B
D. B->D
答案 B
冗余函数依赖是指函数依赖集 F 中多余的函数依赖关系。这样多余的含义是驱动该函数依赖后,仍然不改变其性质。比如,去掉 X->Y,然后再 F 中求 X⁺,如果 仍然存在 X⁺ 中,则表名 X->Y 是多余,需要去掉。
本题中,如果 A-> C,那么 F = { A->D, C->B, B->D },这时从 A 出发,就只能推导出 A 和 D,因此 A⁺ = {A,D} ,不包含 C,因此该函数依赖不是多余的。
如果去掉 A->D,那么 F = { A->C, C->B, B->D },这时从 A 出发,能推导出 A 、B、C、 D ,因此 A⁺ = {A, B, C, D},包含了 D,因此该函数依赖是多余的,应该去掉。
同理,如果去掉 C->B, 那么 C⁺={C},不包含 B,而如果去掉 B->D ,那么 B⁺ = {B},因此这两个函数依赖都不是多余的函数依赖。
关系模型允许定义三类数据约束,下列不属于数据约束的是()。
A. 实体完整性约束
B. 参照完整性约束
C. 域完整性约束
D. 用户自定义的完整性约束
答案 C
数据约束是用来确保数据的准确性和一致性的。常见的4中数据约束如下:
- 实体完整性约束:规定表的每一行在表中是唯一的实体。
- 域完整性约束:是指标中的列必须满足特定的数据类型约束,其中约束有包括取值范围、精度等规定。
- 参照完整性约束:是指两个表的主键字和外关键字的数据应一致,包装了表之间数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
- 用户自定义的完整性约束:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户自定义的完整性即是针对某个特定系数据库的约束条件,反映某一具体应用必须满足的语义要求。
在上述四种数据约束中,不属于关系模型定义的三种数据约束是域完整性约束。