赞
踩
人们在研究和处理数据的过程中,常常把数据的转换分为三个领域——现实世界、信息世界、计算机世界。
这三个世界间的转换过程就是客观现实的信息反映到计算机数据库中的过程。
实体(Entity):
现实世界中存在的可以相互区分的客观事物或概念称为实体。
例如,计算机、电视、大象、人。
实体的特征(Entity Characteristic):
每个实体都有自己的特征,利用实体的特征可以区别不同的实体。
例如,电视有大小、型号、外观形状等特征,人有身高、体重等特征。
现实世界就是通过每个实体所特有的特征来相互区分的
实体集(Entity Set)及实体集间的联系(Relation):
具有相同特征或能用同样特征描述的实体的集合称为实体集。
例如,所有大象的实体集合就是大象的实体集,所有人的实体集合就是人的实体集。
实体标识符:
能唯一标识实体的属性或属性集合。
信息世界(Information World)是现实世界在人们头脑中的反映,人们用思维以现实世界为基础,对事物进行选择、命名、分类等抽象工作之后,并用文字符号表示出来,就形成了信息世界。
信息世界主要涉及以下3个概念:
实例(Example):
实体通过其特征的表示称为实例。实例与现实世界的实体相对应。
例如,学生李勇就是一个学生实体,这个学生实体就是一个学生的实例。
属性(Attribute):
实体的特征在人们思想意识中形成的知识称为属性。
一个实例可能拥有多个属性,其中能惟一标识实体的属性或属性集合称为 码(Key)。
每个属性的取值是有范围的,称为该属性的 域(Domain),属性与现实世界的特征相对应。
对象(Object)及对象间联系(Relation):
同类实例的集合称为对象,对象即实体集中的实体用属性表示得出的信息集合。
实体集之间的联系用对象联系表示。
对象及对象间联系与现实世界的实体集及实体集间的联系相对应。
计算机世界(Computer World)又称数据世界(Data World),是将信息世界中的信息经过抽象和组织,按照特定的数据结构,即数据模型,将数据存储在计算机中。
计算机世界主要涉及以下4个概念:
字段(Field):
用来标记实体的一个属性就叫做字段,它是可以命名的最小信息单位。
例如,学生有学号、姓名、性别、出生日期等字段。字段与信息世界的属性相对应。
记录(Record):
记录是有一定逻辑关系的字段的组合。它与信息世界中的实体相对应,一个记录可以描述一个实体。
例如,一个学生的记录由学号、姓名、性别、出生日期等字段组成。一个记录在某个字段上的取值称为数据项(Item)。
文件(File):
文件是同一类记录的集合。它与信息世界中的对象相对应。
文件的存储形式有很多种,例如,顺序文件、链接文件、索引文件等。
文件集(File Set)
文件集是若干文件的集合,即由计算机操作系统通过文件系统来组织和管理。它与信息世界中的对象集相对应。
文件系统通过对文件、目录、磁盘的管理,可以对文件的存储空间、读写权限等进行管理。
信息的三种世界之间是可以进行转换的
人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为计算机世界。
也就是说,首先将现实世界中客观存在的事物或对象抽象为某一种信息结构,这种结构并不依赖于计算机系统,是人们认识的概念模型;然后再将概念模型转换为计算机上某一具体的DBMS支持的数据模型。这一转换过程如图所示:
信息的三种世界在转换过程中,每种世界都有自己对象的概念描述,但是它们之间又相互对应。信息的三种世界之间的对象对应关系见表:
数据项即 字段。
在把现实世界抽象为信息世界的过程中,实际上是抽象出现实系统中有应用价值的元素及其关联。这时所形成的信息结构就是概念模型。这种信息结构不依赖于具体的计算机系统。
在概念模型中主要涉及以下概念:
实体(Entity):
客观存在并且可以互相区别的事物称为实体。
实体可以是人,也可以是物,也可以是抽象的概念;可以指事物本身,也可以指事物的联系。例如,一名学生,一门课、一次选课、学生和课程的关系等,都是实体。实体是信息世界的基本单位。
属性(Attribute):
实体所具有的某一特征称为属性。
一个实体可以由多个属性来刻画,每一个属性都有其取值范围和取值类型。例如,一个学生实体可以由学号、姓名、性别、出生日期、学院名称等属性组成,(2014029520,赵光明,男,1996-08-20,计算机学院)这些属性值组合在一起表示了一个学生的基本情况。
码(Key):
能在一个实体集中惟一标识一个实体的属性称为码。
码可以只包含一个属性,也可以同时包含多个属性。有多个码时,选择一个作为主码。最极端的一种情况就是所有属性组成主码,称为全码。
域(Domain):
某个(些)属性的取值范围称为该属性的域。
例如,性别的域为(男,女),姓名的域为字符串集合,学院名称的域为学校所有学院名称的集合。
实体型(Entity Type):
具有相同属性的实体具有共同的特征和性质。
用实体名及其属性名集合来抽象和刻画的同类实体称为实体型。例如,学生(学号,姓名,性别,出生日期,学院名称)是一个实体型。
实体集(Entity Set):
同类型的实体集合称为实体集。
例如,全体学生就是一个实体集。
联系(Relation):
现实世界的事物之间是有联系的,这种联系必然要在信息世界中加以反映。
这些联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系:
实体(型)之间的联系有三种:
1:1
,具体结构如图:1:N
,具体结构如图:M:N
,具体结构如图:三种联系的实例:
概念模型的表示方法有很多,最著名且最常用是:实体-联系法,该方法用E-R图来描述现实世界的概念模型:
E-R图:
E-R图也称为E-R模型。
E-R图提供了表示实体、实体的属性以及实体之间联系的方法。在E-R图中,用长方形、椭圆形、菱形分别表示实体、属性、联系。
例如,教师实体、课程实体,职工实体,如图所示:
例如,学生实体有学号、姓名、性别、出生日期、学院名称属性,其中学号为主属性。课程实体有课程号、课程名、学分属性,其中课程号为主属性。如图所示:
例如,学校实体与教师实体之间存在联系。因为每个学校都有许多教师,某一个教师必须属于某一个学校,所以教师和学校之间有联系,联系类型为1:n(即一对多)。如图所示:
虽然概念模型不依赖于计算机系统,但现实世界的数据最终还是要存放到计算机的数据库中。这时就需要将概念模型转化为与具体计算机数据库相关的数据模型。
数据模型(Data Model):
是严格定义的一组概念的集合。
这些概念精确地描述了系统的静态和动态特性,是数据库中用来对现实世界进行抽象的工具,是数据库系统的核心与基础,是描述数据的结构以及定义在其上的操作和约束条件。
数据结构
数据结构是相互之间存在一种或多种特定关系的对象元素的集合。
在任何对象集合中,对象元素都不是孤立存在的,而是在它们之间存在着某种关系,这种对象元素相互之间的关系称为结构。根据对象元素之间关系的不同特性,通常有5种基本结构:集合、线形结构、树形结构、图状结构(或网状结构)、关系结构。
数据操作
数据操作是指数据库中各对象的实例允许执行的操作的集合,包括操作及有关的操作规则。
数据库主要有检索和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则以及实现操作的语言。数据操作是对系统动态特性的描述。
数据的完整性约束条件
数据的约束条件是一组完整性规则的集合。
完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。数据模型应该反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。此外,数据模型还应该提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
层次模型的概念:
用树形结构来表示实体以及实体之间联系的模型称为层次模型。
层次模型是数据库系统中最早出现的数据模型,在现实世界中有许多实体之间的联系就属于层次模型。例如,一个家族的家谱、一个单位的机构设置等。
层次模型的定义及数据结构:
数据库的数据模型如果满足以下两个层次联系,就称为层次模型:
层次模型像一棵倒立的树,只有一个根结点,有若干个叶结点。如图所示:
在层次模型中,实体集使用记录型(或记录)表示。记录描述实体,可以包含若干个字段;字段描述实体的特征,每个字段都必须命名,并且同一实体中的字段不能重名;记录值表示实体特征的具体数据;记录之间的联系使用基本层次联系表示。
层次模型的数据操作和完整性约束条件:
层次模型的数据操作主要有查询、添加、修改和删除。在进行添加、修改和删除操作时要满足以下层次模型的完整性约束条件:
层次模型的优缺点:
在现实世界中,事物之间的联系并不能完全用层次模型表示,于是又产生了网状模型。
网状模型的概念
用网状结构来表示实体以及实体之间联系的模型称为网状模型。
在现实世界中,更多的实体之间的联系呈现出网状结构。例如,一个局域网中计算机的设置、公路交通的设置等。
网状模型的定义及数据结构
数据库的数据模型如果满足以下两个联系,就称为网状模型:
由于网状模型中实体之间的联系是多对多的联系(复合联系),所以基于网状模型的层次数据库联系表达方式比较复杂。如图所示:
网状模型的数据操作和完整性约束条件
网状模型的数据操作主要有查询、添加、修改和删除。在进行添加、修改和删除操作时要满足以下网状模型的完整性约束条件:
网状模型的优缺点
关系模型是数据模型中最重要的模型。目前,几乎所有的数据库管理系统都支持关系模型。数据库领域中当前的研究工作也都是以关系方法为基础的。
关系模型把世界看作是由实体和联系构成的。
在关系模型中,实体通常是以表的形式来表现的。
表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。所谓联系,就是指实体之间的关系,即实体之间的对应关系。
在现实世界中,几乎所有的实体和实体之间的联系都可以用关系模型表示。例如,学生、教师、课程信息等。
关系模型的定义及数据结构
关系模型中主要涉及的概念有:
关系(Relation)。一个关系对应通常所说的一张二维表,Student表就是一个关系,表结构见表:
元组(Tuple)。表中的一行称为一个元组。
属性(Attribute)。表中的一列称为一个属性。
主码(Primary Key)。表中的某个属性或属性组,它们的值可以惟一地确定一个元组,且属性组中不含多余的属性,这样的属性或属性组称为关系的码或主码。
域(Domain)。属性的取值范围称为域。
分量(Element)。元组中的一个属性值称为分量,即行和列的交叉。
关系模式(Relation model)。关系的型称为关系模式,关系模式是对关系的描述。
关系模式的一般表示是:关系名(属性1,属性2,…,属性n)。
关系模型由三部分组成: 关系数据结构、关系操作集合和关系的完整性。
关系模型把所有的数据都组织到表中。表是由行和列组成的,行表示数据的记录,列表示记录中的域。表反映了现实世界中的事实和值。
关系模型的数据操作和完整性约束条件:
关系操作语言都是高度非过程的语言,它将数据的存取路径向用户隐蔽起来,用户只要指出“干什么”或“找什么”,不必说明“怎么干”或“怎么找”,从而大大地提高了数据的独立性,提高了用户的使用效率。
关系模型与非关系模型相比较,具有以下特点:
关系模型的优缺点
面向对象数据库系统(Object Oriented DataBase System,简称OODBS)
面向对象数据库系统(Object Oriented DataBase System,简称OODBS)是数据库技术与面向对象程序设计方法相结合的产物。
现实世界中的事物都是对象,对象可以看成是一组属性和方法的结合体。
例如,学生、汽车、数学定理都是对象。属性则表示对象的状态与组成。
例如,学生具有学号、姓名、身高等属性;汽车具有颜色、型号、价格等属性;数学定理具有含义等属性。对象的行为称为方法。
例如,学生可以进行学习、运动等行为(方法);汽车可以静止或运行等;数学定理可以运用等。
在面向对象技术中,通过方法来访问与修改对象的属性。这样就将属性与方法完美地结合在一起。
在现实世界中有许多对象来自于同一集合,例如,所有的学生都是人,则这些集合统称为类。
类是对象的模板,它规定该类型的对象有哪些属性、哪些方法等。
面向对象方法适于模拟实体的行为,核心是对象。
面向对象数据模型(OO模型)
面向对象数据库系统支持的数据模型称为面向对象数据模型(OO模型),即一个面向对象数据库系统是一个持久的、可共享的对象数据库,而一个对象是由一个OO模型所定义的对象的集合体。OO模型中的主要术语有以下3个:
关系数据库是采用关系模型作为数据组织方式的数据库。关系数据库是应用数学的方法来处理数据库中的数据,也就是说,它是建立在严格的数学理论基础之上的。
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。
关系数据结构:
关系模型的数据结构简单清晰,关系单一。在关系模型中,现实世界的实体以及实体间的各种联系均可用关系来表示,从用户角度看,关系模型中数据的逻辑结构就是一张二维表,由行列组成。
关系操作:
关系模型中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference)等查询(Query)操作和增加(Insert)、删除(Delete)、修改(Update)操作。
其中,查询的表达能力是其最主要的部分。
关系的三类完整性约束:
关系模型提供了完备的完整性控制机制,定义了三类完整性约束:实体完整性、参照完整性和用户定义的完整性。
在关系模型中,数据在用户观点下是一个逻辑结构为二维表的数据模型。而关系模型是建立在关系(或集合)代数的基础之上的。
定义1:
域(Domain)是一组具有相同数据类型的值的集合。
例如,自然数、正整数、所有字符集合,都是域。
定义2:
设
D
1
,
D
2
,
…
,
D
n
D_{1}, D_{2}, …, D_{n}
D1,D2,…,Dn为任意域,定义
D
1
,
D
2
,
…
,
D
n
D_{1}, D_{2}, …, D_{n}
D1,D2,…,Dn的笛卡尔积(Cartesian Product)为:
D
1
×
D
2
×
⋅
⋅
⋅
×
D
n
=
{
(
d
1
,
d
2
,
.
.
.
,
d
n
)
∣
d
i
∈
D
i
,
i
=
1
,
2
,
.
.
.
,
n
}
D_{1}\times D_{2} \times \cdot\cdot\cdot\times D_{n}=\{(d_{1},d_{2},...,d_{n})|d_{i}\in D_{i},i=1,2,...,n\}
D1×D2×⋅⋅⋅×Dn={(d1,d2,...,dn)∣di∈Di,i=1,2,...,n}
具体示例如图:
其中,每一个元素 ( d 1 , d 2 , . . . , d n ) (d_{1},d_{2},...,d_{n}) (d1,d2,...,dn)称为一个 n 元组(n-Tuple),简称为元组(Tuple)。元组中每一个值 d i d_{i} di称为一个分量(Component)。若 D i ( i = 1 , 2 , … , n ) D_{i}(i=1,2,…,n) Di(i=1,2,…,n)为有限集,其基数(Cardinal Number)为 m i ( i = 1 , 2 , … , n ) m_{i}(i=1,2,…,n) mi(i=1,2,…,n),则 D 1 × D 2 × ⋅ ⋅ ⋅ × D n D_{1}\times D_{2} \times \cdot\cdot\cdot\times D_{n} D1×D2×⋅⋅⋅×Dn的基数为 m = m 1 × m 2 × … × m n m=m_{1}×m_{2}×…×m_{n} m=m1×m2×…×mn。
定义3:
D
1
×
D
2
×
…
×
D
n
D_{1}×D_{2}×…×D_{n}
D1×D2×…×Dn的任意一个子集叫做
D
1
×
D
2
×
…
×
D
n
D_{1}×D_{2}×…×D_{n}
D1×D2×…×Dn上的一个关系(Relation),用
R
(
D
1
×
D
2
×
…
×
D
n
)
R(D_{1}×D_{2}×…×D_{n})
R(D1×D2×…×Dn)表示。这里R表示关系名,n表示关系的目或度(Degree)。
具体示例如图:(计算机学院关系是
D
1
×
D
2
D_{1}\times D_{2}
D1×D2的一个子集)
每个元素是关系中的元组,通常用 t 表示。
当n=1时,称为单元关系(Unary Relation);当n=2时,称为二元关系(Binary Relation)。
关系是笛卡尔积的子集,而且是一个有限集,所以关系也可以用一个二维表表示。
这个二维表是由关系的笛卡尔积导出的。
表中的每一行对应一个元组,表中的每一列对应一个域。
为了区分每一列,必须给它起一个名字,称为属性(Attribute)。n目关系必有n个属性。
如果关系中的某一属性组的值能惟一地标识一个元组,则称该属性组为候选键(Candidate Key)。
若一个关系有多个候选键,则选定其中一个作为主码或主键(Primary Key)。主码的诸属性称为主属性(Prime Attribute)。
综上所述,关系可以有三种基本类型:基本表、查询表和视图表。
由此得出,关系具有以下性质:
关系的描述称为关系模式。它包括关系名、组成该关系的各属性名、属性来自的域、属性向域的映像、属性间数据的依赖关系等。因此一个关系模式应当是一个 5 元组。
定义4
关系的描述称为关系模式(Relation Schema)。它可以形式化地表示为:
R
(
U
,
D
,
d
o
m
,
F
)
R(U, D,dom,F)
R(U,D,dom,F)
其中,
R
R
R为关系名,
U
U
U为组成该关系的属性名集合,
D
D
D 为属性组
U
U
U 中属性所来自的域,
d
o
m
dom
dom 为属性向域的映像,
F
F
F 为属性间数据的依赖关系集合。
通常在不产生混淆的情况下,关系模式也可以称为关系。
关系代数是一种抽象的查询语言,是关系数据操作语言的一种传统表达方式,它是用对关系的运算来表达查询的。
关系代数的运算按运算符性质的不同可以分为两大类。
传统的集合运算
传统的集合运算将关系(二维表)看成是元组(记录)的集合。
其运算是以关系的“水平”方向即行的角度来进行运算的。传统的集合运算包括并、差、交、广义笛卡尔积。
专门的关系运算
专门的关系运算将关系(二维表)看成是元组(记录)或列(属性)的集合。
其运算不仅可以从“水平”方向,还可以从“垂直”角度来进行运算。比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的,包括大于、大于等于、小于、小于等于、等于、不小于、与、或、非。专门的关系运算包括选择、投影、连接、除。
关系代数的运算对象是关系(或表),运算结果也是关系(或表)。
关系代数用到的运算符有:
传统的集合运算包括并(Union)、差(Except)、交(Intersection)、笛卡尔积(Cartesian Product)4种运算。它们都是二目运算,即集合运算符两边都必须有运算对象。
现有两个课程关系表 Course1 和 Course2,见下两表:
并:
Course1
∪
\cup
∪ Course2:
差:
Course1
−
-
− Course2:
交:
Course1
∩
\cap
∩ Course2:
笛卡尔积:
Course1
×
\times
× Course2:
仅依靠传统的集合运算还不能灵活地实现多样的查询操作,因此关系模型有一组专门的关系运算,包括选择(Selection)、投影(Projection)、连接(Join)、除(Division)。其中连接又分为等值连接和自然连接两种。
案例体会:
现有三个关系表:Author表,Press表、Publish表:
Author表:
Press表:
Publish表:
选择:
查询PressID编号为22的出版社信息:
σ
P
r
e
s
s
I
D
=
22
(
P
r
e
s
s
)
\sigma_{PressID=22}(Press)
σPressID=22(Press)
查询男作者的信息:
σ
S
e
x
=
′
男
′
(
A
u
t
h
o
r
)
\sigma_{Sex='男'}(Author)
σSex=′男′(Author)
投影:
查询所有作者的编号和姓名:
Π
A
u
t
h
o
r
I
D
,
N
a
m
e
(
A
u
t
h
o
r
)
Π_{AuthorID,Name}(Author)
ΠAuthorID,Name(Author)
查询由21号出版社出版的图书信息:
Π
A
u
t
h
o
r
I
D
,
P
r
e
s
s
I
D
,
T
i
t
l
e
(
σ
P
r
e
s
s
I
D
=
21
(
P
u
b
l
i
s
h
)
)
Π_{AuthorID,PressID,Title}(σ_{PressID=21}(Publish))
ΠAuthorID,PressID,Title(σPressID=21(Publish))
连接:
( Π A u t h o r I D ( σ N a m e = ′ 赵立 岩 ′ ( A u t h o r ) ) ) ⊳ ⊲ A u t h o r . A u t h o r I D = P u b l i s h . A u t h o r I D ( P u b l i s h ) (Π_{AuthorID}(σ_{Name = '赵立岩'}(Author))) \underset {Author. AuthorID= Publish. AuthorID}{\rhd \lhd }(Publish) (ΠAuthorID(σName=′赵立岩′(Author)))Author.AuthorID=Publish.AuthorID⊳⊲(Publish)
除:
该运算我们以另外的例子说明:
已知有两个表 R 和 S,其中表 R 有三列,属性为(A,B,C);表 S 有三列,属性为(B,C,D)。
关系R中 A可以取4个值
(
a
1
,
a
2
,
a
3
,
a
4
)
(a_{1} ,a_{2}, a_{3} ,a_{4})
(a1,a2,a3,a4)
其中:
a
1
a_{1}
a1 对应的属性集合
{
(
b
1
,
c
2
)
,
(
b
2
,
c
3
)
,
(
b
2
,
c
1
)
}
\{(b1,c2),(b2,c3),(b2,c1)\}
{(b1,c2),(b2,c3),(b2,c1)}
a
2
a_{2}
a2对应的属性集合
{
(
b
3
,
c
7
)
,
(
b
2
,
c
3
)
}
\{(b3,c7),(b2,c3)\}
{(b3,c7),(b2,c3)}
a
3
a_{3}
a3对应的属性集合
{
(
b
4
,
c
6
)
}
\{(b4,c6)\}
{(b4,c6)}
a
4
a_{4}
a4对应的属性集合
{
(
b
6
,
c
6
)
}
\{(b6,c6)\}
{(b6,c6)}
其中仅有
a
1
a_{1}
a1对应的属性集合(B,C)全在S中,所有
R
÷
S
=
{
a
1
}
R\div S=\{a_1\}
R÷S={a1}
题目测试01:
设关系模式为:
STUDENT(SID, SNAME, SEX, BIRTHDAY, DNO)
DEP(DNO, DNAME, TEL)
COURSE(CID, CNAME, CRED, TERM, QUOTA)
SC(SID, CID, RESULT)
查询85年以后出生的女同学名单(只列出姓名): Π S N A M E ( σ B I R T H D A Y > 1985 a n d S E X = ′ 女 ′ ( S T U D E N T ) ) \Pi_{SNAME}(\sigma_{BIRTHDAY>1985andSEX='女'}(STUDENT)) ΠSNAME(σBIRTHDAY>1985andSEX=′女′(STUDENT))
查询选修了数据库原理课程且成绩在85分以上的学生姓名: Π S N A M E ( S T U D E N T ⊳ ⊲ Π S I D ( σ R E S U L T > 85 ( S C ⊳ ⊲ Π C I D ( σ C N A M E = ′ 数据库原 理 ′ ( C O U R S E ) ) ) ) ) \Pi_{SNAME}(STUDENT{\rhd \lhd }\Pi_{SID}(\sigma_{RESULT>85}(SC{\rhd \lhd }\Pi_{CID}(\sigma_{CNAME='数据库原理'}(COURSE))))) ΠSNAME(STUDENT⊳⊲ΠSID(σRESULT>85(SC⊳⊲ΠCID(σCNAME=′数据库原理′(COURSE)))))
查询同时选修了课程号为C01和C02两门课程的学生学号: Π S I D ( σ C I D = C 01 ( S C ) ) ∩ Π S I D ( σ C I D = C 02 ( S C ) ) \Pi_{SID}(\sigma_{CID=C01}(SC))∩\Pi_{SID}(\sigma_{CID=C02}(SC)) ΠSID(σCID=C01(SC))∩ΠSID(σCID=C02(SC))
查询计算机系学生选修的全部课程号: Π C I D ( S C ⊳ ⊲ Π S I D ( S T U D E N T ⊳ ⊲ ( σ D N A M E = ′ 计算 机 ′ ( D E P ) ) ) ) \Pi_{CID}(SC{\rhd \lhd }\Pi_{SID}(STUDENT{\rhd \lhd }(\sigma_{DNAME='计算机'}(DEP)))) ΠCID(SC⊳⊲ΠSID(STUDENT⊳⊲(σDNAME=′计算机′(DEP))))
选修全部课程的学生的学号和姓名: Π S I D , S N A M E ( ( Π S I D , C I D ( S C ) ÷ Π C I D ( C O U R S E ) ) ⊳ ⊲ S T U D E N T ) \Pi_{SID,SNAME}((\Pi_{SID,CID}(SC)\div \Pi_{CID}(COURSE)){\rhd \lhd }STUDENT) ΠSID,SNAME((ΠSID,CID(SC)÷ΠCID(COURSE))⊳⊲STUDENT)
题目测试01:
设关系模式为:
S(SID, SNAME, AGE, SEX)
SC(SID, CID, GRADE)
C(CID, CNAME, TEACHER)
查询所有女同学选修课程的课程名称和任课教师名: Π C N A M E , T E A C H E R ( S C ⊳ ⊲ Π S I D ( σ S E X = ′ 女 ′ ( S ) ) ) \Pi_{CNAME, TEACHER}(SC{\rhd \lhd }\Pi_{SID}(\sigma_{SEX='女'}(S))) ΠCNAME,TEACHER(SC⊳⊲ΠSID(σSEX=′女′(S)))
查询LIU同学未选修的课程的课程编号: Π C I D ( C ) − Π C I D ( S C ⊳ ⊲ Π S I D ( σ S N A M E = L I U ( S ) ) ) \Pi_{CID}(C)-\Pi_{CID}(SC{\rhd \lhd }\Pi_{SID}(\sigma_{SNAME=LIU}(S))) ΠCID(C)−ΠCID(SC⊳⊲ΠSID(σSNAME=LIU(S)))
查询至少选修两门课的学生学号: Π S I D ( σ S I D 1 = S I D 2 a n d C I D 1 ≠ C I D 2 ( S C × S C ) ) \Pi_{SID}(\sigma_{SID1=SID2andCID1\neq CID2}(SC\times SC)) ΠSID(σSID1=SID2andCID1=CID2(SC×SC))
查询全部学生都选修的课程的课程编号和课程名称: Π C I D , C N A M E ( ( Π C I D , S I D ( S C ) ÷ Π S I D ( S ) ) ⊳ ⊲ C ) \Pi_{CID,CNAME}((\Pi_{CID,SID}(SC)\div \Pi_{SID}(S)){\rhd \lhd }C) ΠCID,CNAME((ΠCID,SID(SC)÷ΠSID(S))⊳⊲C)
查询优化是必要的。但用户应当认识到,进行优化的工作还将耗费系统的资源。一般说来,优化做得越细,系统的开销就越大。
下面讲的优化是相对的,即不是在所有可能的路径任意挑选最省时间的方法,而是进行各种操作的一般策略。
1. 选择运算尽早进行
对于含有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量和从外存读块的次数。
2. 合并笛卡尔乘积与其后的选择运算为连接运算
在表达式中,当笛卡尔乘积后面是选择运算时,应将它们合并为连接运算,使选择和笛卡尔乘积一起完成,以避免在做笛卡尔乘积之后,还需再次扫描一个较大的笛卡尔乘积的关系进行选择运算。
3. 把投影运算和选择运算同时进行
以避免分开运算造成多次扫描文件,如果有一连串的投影运算和选择运算且只有一个运算对象,那么就可以在扫描表示该对象的文件过程中同时完成所有这些运算。这就避免了重复多次扫描文件,从而节省了操作时间。
4. 把投影运算与其后的其他运算同时进行,以避免重复多次扫描文件
5. 事先处理文件
在执行连接(或笛卡尔乘积后跟选择)运算之前,适当地处理一下文件是有益的。对需要的属性建立索引或进行排序,这两种方法都有助于快速有效地找到应当连接的元组。
6. 存储公用的子表达式
对于有公用的子表达式的操作,应将公用的子表达式的结果存于外存,当从外存中读出它比计算它的时间少时就能节省操作时间,特别是当公用的子表达式出现频繁时效果更好。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。