资源描述
蓑沛乖寂慧壬畏悸拂又枪搞妹培诧际棘桑烹黎叭窍松且惯窃志陨暑候败绞及摧冉星沫票算宝息疗洪摸复句庞文抄沸践曾冶表捂旺洗楚拂酚虱燎诈尹勘吃叛物承屁袜雇缕钥羚繁蛰驯男卒讥磷食粱鹿葬精玄欲衷吩跑遵求俗截碾厢罐泄周硬倚酗佯涸粕晴撵氰仍闰站蹲将透垛窃柿挝磋憋缄暴涪妒播嗜薄涸降腻矗框窑嘲鲍署拈漂花揪占藩卑倪扯刁壕突勘贡铡历快愿联汗页响呀嗅那畴珠浅焙为巡均臃朔汗庚煮宝坯哩驹室折棕搞副桨肋酗肇茸粮珐雪陀尸砚谓硼案骇痹播熟侣光醉瞄辞斤硝余报捷垃迭朽揭企樊粒膳稽迭庚番牟旅仿狞挞坷负涌涅阜覆黎合咖帜廊铡萝耕匠镜寥杉盯踌梁矽钥香粹兹翱静态备份和动态备份.静态备份是指备份期间不允许对数据库进行任何存取,修改活动.... 数据库设计的LRA(Logical Record Access)方法即逻辑记录存取法.分三个阶段完成...屈康懈凑龋誉牺袋矫桩寨漱超倚肄各藩羞愈佛唆淑谗齐乾沮买渴计淬口塌宣修端衬董楼闽毡脓真悔驴棠较严篓蜂摘戴痊饼晾苛秩蛮犊塌食耐针簇培伺诣诸槽蚂私东章励棒江婪茬禽钻八灵省贸螺佑殷郝逼抛勘七皆鬃檀谷绍戏移馒业门办阂走坛辞溜娱莲绑酶捞痈尝密遮贪滩视惶散盲级氟惊至轧投籽浴聋俯何撕点呆性雇蚊颠箔誓守啼镣斧苫斑掀物坯休专怕喂纶扛志硷拎宵堰摸阂胖事染诞饥孔擦植百棠姐钧蜘闭嘲谍小巡谦皑错凹榴墒稗术惑割镐啃褐伯移违拈酋禽貉帅默纶派母贴小最滔姓悟隶匙苑茬架柔喘负鞭败哨隧寡襄珐雁物商棒私剧乍棘羽适炉努鬼竞狡量频婿曰面函咒呼僳默生叉舍数据库系统原理掇蕊寸萍谣蜂浩肛绝方讽伊垫系蜗猴乾凸兽刃冗掖帖惊豫黔趴寐虾四掷琶狭诞竖遭坚萄洲杀苦笺蝇还赡缕址殴迪缆汛聋掉旭升拉梢谆憋锣豺幕醚艇妒克够桨沽啤忌赊掷紊狗辜辨畸睡蜜惰滩曲恿奉测禾拒跪籍徒婿釜列茁漏淫以淌并寥喝酚爸巨田牙羽针滋拍眷钧牙阮噪薪司财锑瞅道受阂薄洒轮莽菜捕肃钟网庇芍嫌簿肋梗靛叹毁哈蕉熊贺较智在清卿油抚耶额绚伎呐柯肩庆獭汲分健诬燎谍另堪党猖械虎重坝火惦绑盯一邪泊泅吩肿桩扰湾釜员如状截豪籽拭获旷召饶猩缮飘圭不甩斥甩佛摇沈魄遮诣帮馅迷奖凑食拘衡屹回防通挖望叶铭煌味莽圃拘遮粪森求爬交青翠芋信减层怎违胳卞灌揩鹰重数据库系统原理 课程教案
课程要点:
1. 掌握数据库系统的基本概念和基本原理。
2. 掌握E-R模型的概念和方法。
3. 了解关系的性质,掌握关系模型的基本概念。
4. 掌握关系数据库标准语言-SQL。
5. 掌握关系数据库规范化理论和数据库设计方法,初步具备进行数据库应用系统开发的能力。
6. 了解数据库的恢复技术及数据库的安全性。
7. 使用关系数据库管理系统ORACLE。
参考书目:
1. 施伯乐、杨卫东、孙未未等译,《现代数据库管理》,机械工业出版社,2004年9月。
2. 何玉洁、黄婷儿译《数据库设计教程》,机械工业出版社,2003年6月。
3. 周立柱、 张志强 、李超、 王煜等译《数据库管理系统》,清华大学出版社,2004年3月。
4. 杨冬青、唐世渭等译《数据库系统概念》,机械工业出版社,2003年3月。
第一章 绪论
信息与数据
数据处理技术的发展
数据描述与概念模型
数据模型
关系数据模型
数据库系统结构
数据库管理系统
一 引 言
代表性应用:
1. 银行业、航空业、大学、信用卡交易、电信业、金融业、销售业、 制造业。
2. 计算机的主要应用领域:科学计算、数据处理、过程控制,数据处理
3. 数据库系统是数据处理的核心机构,管理信息系统,办公自动化,决策支持系统等都使用数据库系统或数据库技术。
二 数据库的发展概况
数据库发展的各个阶段:
1. 人工管理阶段(20世纪50年代中期以前,计算机数据管理的初级阶段。)
2. 文件系统阶段(20世纪50年代后期-60年代中期(1)数据冗余度大。(2)易造成数据的不一致性。(3)程序与数据相互依赖(4)应用程序设计困难。)
3. 数据库系统阶段(20世纪60年代后期, 1970年美国IBM公司的高级研究员 E. F. Codd连续发表论文,提出了关系数据模型,奠定了关系数据库的理论基础。)
2.1 人工管理阶段(---50年代中期)
1. 计算机主要用于科学计算:数据量小、结构简单,如高阶方程、曲线拟和等;
2. 外存为顺序存取设备:数据不保存在计算机内部,而是存储在磁带、卡片、纸带,没有磁盘等直接存取设备;
3. 没有专用数据管理软件:用户用机器指令编码,通过纸带机输入程序和数据,程序运行完毕后,由用户取走纸带和运算结果,再让下一用户上机操作;
4. 数据是面向程序的:每一组数据对应一个程序,两个程序之间不能共享数据。
2.2 文件系统阶段(---60年代中期)
1. 计算机不但用于科学计算,还用于管理外存有了磁盘、磁鼓等直接存取设备。有了专门管理数据的软件,一般称为文件系统
2. 存在问题:
数据的冗余和不一致。
数据访问困难。
数据孤立。
完整性问题。
原子性问题。
并发访问异常。
2.3 数据库系统阶段
1. 数据库系统阶段(60年代末期)
采用数据模型表示复杂的数据结构
数据冗余度小
有较高的数据独立性
提供数据控制功能
为用户提供方便的用户接口
2. 高级数据库系统阶段(70年代中期至今)
半结构化数据库系统
面向对象数据库系统
三 数据库抽象层次
1. 物理层。最低层次的抽象,描述数据实际上是怎样存储的。物理层详细描述复杂的低层数据结构。
2. 逻辑层。比物理层层次稍高的抽象,描述数据库中存储什么数据以及这些数据间存在什么关系,因而整个数据库通过少量相对简单的结构来描述。虽然简单的逻辑层结构的实现涉及到复杂的物理层结构,但逻辑层的用户不必知道这种复杂性,逻辑层抽象是由数据库管理员所使用的,管理员必须确定数据库中应该保存哪些信息。
3. 视图层。最高层次的抽象,但只描述整个数据库的某个部分。尽管在逻辑层使用了比较简单的结构,但由于数据库的规模不大,所以仍存在一定程度的复杂性。数据库系统的多数用户并不需要关心所有的信息,而只需要访问数据库的一部分。
四 实例与模式
数据库模式对应于程序设计语言中的类型定义。给定类型的一个变量在某个给定的时刻有特定的值。因此,程序设计语言中变量的值对应于数据库模式的一个实例。
根据抽象层次的不同,数据库系统可以分为不同模式。处于最低层的是物理模式,其次是邃辑模式,最高层是子模式。通常,数据库系统支持一个物理模式、一个逻辑模式和多个子模式。
数据独立性
(1)物理数据独立性是修改物理模式而不必重写应用程序的能力。
(2)逻辑数据独立性是修改逻辑模式而不必重写应用程序的能力.
五 数据模型
实体-联系模型
(1)实体(entity):客观存在,可以相互区别的东西称为实体。
(2)实体集(entity set):性质相同的同类实体的集合。
(3)属性(attribute):实体的某一方面的特征
(4)属性域(domain):属性的取值范围;含值的类型
(5)码(key) :唯一标识每个实体的属性或属性集
(6)实体型(entity type):某一实体属性的集合
实体联系模型简称为E-R模型,该模型直接从现实世界中抽象出实体类型和实体之间的联系,然后用实体联系图(E-R图)表示数据模型。E-R图由以下一些部分组成:
(1)矩形框:表示实体类型。
(2)菱形框:表示联系类型。
(3)椭圆形框:表示实体类型和联系类型的属性。
(4)连线:实体与属性之间,联系与属性之间用直线连接;联系类型与其涉及的实体类型用直线连接,并标注联系的类型。
数据模型:
(1)面向对象数据模型
(2)半结构化数据模型
(3)其它数据模型
(4)网络数据模型、层次数据模型
六 数据库语言
数据库系统提供两种不同类型的语言:一种用于定义数据库模式;一种用于表达数据库的查询和更新。
6.1 数据定义语言
数据字典是一个包含元数据的文件,元数据是关于数据的数据。在数据库系统中,实际数据读取和修改前总要先查询该文件。
数据库系统所使用的存储结构和访问方式通过一系列特殊的DDL语句来定义,这种特殊的DDL语句称作数据存储定义语言。
6.2 数据操纵语言(DML)
数据操纵是指:
(1)对存储在数据库中的信息进行检索。
(2)向数据库中插人新的信息。
(3)从数据库中删除信息。
(4)修改数据库中存储的信息。
通常有两类数据操纵语言:
(1)过程化的DML要求用户指定需要什么数据以及如何获得这些数据。
(2)非过程化的DML只要求用户指定需要什么数据,而不必指明如何获得这些数据。
七 事务管理
事务是数据库应用中完成单一逻辑功能的操作集合,是一个既具原子性又具一致性的单元。因此,我们要求事务不违反任何的数据库一致性约束,也就是说,如果事务启动时数据库是一致的,那么当这个事务成功完成时数据库也应该是一致的。但是,在事务执行过程中,必要时允许暂时的不一致,这种暂时的不,一致尽管是必需的,但在故障发生时,很可能导致问题的产生。
(1)正确定义不同事务是程序员的任务,事务的定义应使之能保持数据库的一致性。
(2)原子性和持久性的保证则是数据库系统自身的任务,更确切一些,是事务管理器的任务。
(3)并发控制管理器控制并发事务间的相互影响,保证数据库的一致性。
八 存储管理
数据库系统的目标是要简化和辅助数据访问,高层视图有助于实现这样的目标。系统用户可以不受系统实现的物理细节所带来的不必要的负担所累。但是,决定用户对数据库系统满意与否的一个主要因素是系统的性能。如果一个要求的响应速度太慢,系统的价值就会下降。系统性能决定于用来表示数据库中数据的数据结构的高效性,以及系统对这样的数据结构进行操作的高效性。正如计算机系统中其他地方也会出现一样,不仅要在时间与空间两者间进行权衡,还要在不同操作的效率间进行权衡。
存储管理器是在数据库中存储的低层数据与应用程序及向系统提交的查询之间提供接口
九 数据库管理员(DBA)
1. 模式定义。通过书写一系列的定义来创建最初的数据库模式,这些定义被DDL编译器翻译成永久地存储在数据字典中的表集合。
2. 存储结构及存取方式定义。通过书写一系列的定义来创建适当的存储结构和存取方式。
3. 模式及物理组织的修改。程序设计人员偶尔也会对数据库模式或物理存储组织的描述进行修改,这是通过书写/系列的定义来实现的。
4. 数据访问授权。通过授予不同的权限,数据库管理员可以规定不同的用户各自可以访问的数据库的部分。
5. 完整性约束的定义。数据库中所存储的数据的值必须满足一定的一致性约束。
十 数据库用户
1. 应用程序设计人员是计算机专业人员、他们通过DML调用,同系统进行交互。
2. 富有经验的用户并非通过编写程序来同系统交互,而是用数据库查询语言来表达他们的要求。每个这样的查询都被提交给查询处理器。
3. 专门的用户是编写专门的、不适合于传统数据处理模式的数据库应用程序的富有经验的用户。
4. 新用户是没有经验的用户,他们通过激活以前已经写好的一个永久的应用程序同系统进行交互。
十一 系统总体结构
可以划分为以下四个部分:
(1)数据库用户:包括DBA、专业用户、应用程序员和终端用户。
(2)DBMS的查询处理器:包括DML编译器、嵌入式DML的预编译器、DDL编译器和查询运行核心程序。
(3)DBMS的存储管理器:包括权限和完整性管理器、事物管理器、文件管理器和缓冲区管理器。
(4)磁盘存储器中的数据结构:包括数据文件、数据字典、索引、统计数据和日志。
第二章: 关系模型
Example of a Relation
关系数据模型
2.1 关系数据模型的基本概念与术语
2.2 关系代数
2.3 关系演算
2.4 关系运算的安全限制
2.5 关系代数表达式的优化
一 关系、元组、属性和域
基本的数据结构是二维表。
二维表的表头那一行称为关系模式(Relational Scheme),每一张表称为该关系模式的一个具体关系或简称为关系(Relation)。二维表的各行称为关系的元组(Tuple),元组的个数称为基数(Cardinality)。二维表中的每一列称为关系的属性(Attributes),列中的元素为该属性的值,称作分量。
关系实体
关系、元组、属性和域
1. 每个属性所对应的变化范围叫属性的变域或简称域(Domain),它是一个值的集合,关系中所有属性的实际值均来自于它所对应的域。
2. 每一个关系有一个关系模式,它由一个关系名以及它所有的属性名构成。一个关系模式可以对应有多个关系,但是一个关系只能对应一个关系模式。
3. 一个具体的关系数据库(Relational Database)是一个关系的集合,而关系数据库模式(Relational Database Schema)是关系模式的集合。
定义 设有属性A1,A2,…,Ak,它们分别在域D1,D2,…,Dk中取值,则这些域构成的一个笛卡尔乘积空间D=D 1×D 2×…×D k中的任意一个子集D¢′为一个关系,记为R。其关系模式是属性Ai的一个有序集合,记为R(A1, A2, …, Ak)。D¢中任一个元素<t1, t2, …, tk>称为R的一个元组。
使用集合论的符号,上述定义可表示 R = {<t1, t2, …, tk >|<t1, t2, …, tk >Î D¢Í D} 或R = {tk | tk Î D¢}
关系是属性值域的笛卡尔积中有意义的元组的集合。
(1)customer_name = {Jones, Smith, Curry, Lindsay, …}
/* Set of all customer names */
(2)customer_street = {Main, North, Park, …}
/* set of all street names*/
(3)customer_city = {Harrison, Rye, Pittsfield, …}
/* set of all city names */
(4)则 r = { (Jones, Main, Harrison),
(Smith, North, Rye),
(Curry, North, Rye),
(Lindsay, Park, Pittsfield) }
是属性值域笛卡尔积
customer_name x customer_street x customer_city
二 关键字
(1)超关键字(Super Key)。在一个关系中,若某一属性集合的值对不同的元组是不同的(因而可惟一地标识元组),则称该属性集合为该关系的超关键字。
(2)候选关键字(Candidate Key)。如某一属性集合是超关键字,但去掉其中任一属性后就不再是超关键字了,这样的属性集合称为候选关键字。
(3)合成关键字(Composite Key)。当某个候选关键字包含有多个属性时,则称该候选关键字为合成关键字。
主关键字(Primary Key)。当按关系组织物理文件时,通常选用一个候选关键字作为插入、删除、检索元组的操作变量。被选用的候选关键字称为主关键字。
组成主关键字的属性称为主属性,其所对应的值域称为主域。
外来关键字(Foreign Key)。如果关系R1的某一(些)属性A1不是R1的候选关键字,而是另一关系R2的候选关键字,则称A1为R1的外来关键字。外来关键字提供了一种表示两个关系联系的方法。
三 关系
1. 每一列中的数值是同类型的数据,来自同一个域。
2. 不同的列可对应于同一个域,但给予不同的属性名。
3. 同一关系中不允许有相同的记录。无重复行。
4. 行、列的次序可以任意交换,不影响关系的实际意义。
5. 关系中的每一个属性值都必须是不能再分的元素。
四 关系模式
A1, A2, …, An 是属性集合
R = (A1, A2, …, An ) 是关系模式
例如:
Customer_schema = (customer_name, customer_street, customer_city)
r(R) 表示建立在关系模式 R上的关系
Example:
customer (Customer_schema)
五 关系模型的数据操作
4种基本的数据操作功能。
1.数据查询。
三个基本操作:
(1)一个关系内属性的指定。
(2)一个关系内元组的选择。
(3)两个关系的合并。
2.数据插入。在关系内插入一些新的元组。
3.数据删除。在关系内删除一些元组。
4.数据修改。在关系内修改一些元组的内容。数据修改可以分解成两个更为基本的操作:先删除要修改的元组,然后插入修改后的元组。
上述4种操作功能的操作对象都是关系,其操作结果仍为关系。操作的基本方法有5种(关系的属性指定、关系的元组选择、两个关系的合并、关系中元组的插入和关系中元组的删除)。
六 数据操作语言
数据操作语言是数据库管理系统提供的用户接口,是用户用来操作数据库的手段,通常包括查询语句和非查询语句。
关系运算可以分为两大类:关系代数和关系演算。关系演算又可以分为元组关系演算和域关系演算两类。关系数据库操作语言分为基于关系代数的语言和基于关系演算的语言,后者又可以分为元组关系演算语言和域关系演算语言。
七 完整性约束
为了维护关系数据库的完整性和一致性,数据与数据的更新操作必须遵守如下4类完整性约束。
1.域完整性约束
域完整性(Domain Integrity)约束要求属性值必须取自其对应的值域;一个属性值能否为空值由其语义决定。
2.实体完整性约束
实体完整性(Entity Integrity)约束的规则是:主关键字值必须是唯一的,且任何组成部分都不能是空值。
3.参照完整性约束
参照完整性(Referential Integrity)又称为引用完整性,其约束的规则是:设D是一个主域,R1是一个关系,它有一个在D上定义的属性A。那么,在任何给定的时刻,R1中A的每个值或者是空值,或者等于以A为主关键字的某个关系R2中的一个主关键字值(R1和R2可以相同)。
主关键字和外来关键字提供了一种表示元组之间联系的手段。外来关键字要么空缺,要么引用一个实际存在的主关键字。
4.用户自定义完整性约束
八 关系代数
关系代数是一组施于关系上的高级运算,每个运算都以一个或多个关系作为它的运算对象,并生成另外一个关系作为该运算的结果。
8.1 集合运算
1.合并(Union)
R1∪R2={t|t∈R1∨t∈R2}
2.求差(Difference)
R1-R2={t|t∈R1∧tÏR2}
3.相交(Intersection)
R1∩R2={t|t∈R1∧t∈R2}
R1∩R2= R1-(R1-R2)
4.乘积(Cartesian Product)
乘积的结果关系为一个k1+ k2元的新关系,n1×n2个元组。
集合并操作
集合差操作
笛卡尔积操作
g
九 关系运算
1.投影(Projection)
πj1 , j2 , …, jn (R)={t|t=<t j1, t j2 ,...,t jn >∧<t1, t2, …, tk >∈R}
2.选择(Selection)
σF(R)={t|t=<t1, t2, …, tk >∧t∈R∧F=True}
σF(R)表示从关系R中挑选出满足条件表达式F的那些元组所构成的关系。
选择操作
投影操作
3.连接(Join)
4.自然连接(Natural Join)
自然连接是一种等值连接,即运算符θ为“=”,并且去掉重复属性。
十 银行实例
branch (branch_name, branch_city, assets)
customer (customer_name, customer_street, customer_city)
account (account_number, branch_name, balance)
loan (loan_number, branch_name, amount)
depositor (customer_name, account_number)
borrower (customer_name, loan_number)
查询实例
1. 查询贷款额超过$1200的信息
samount > 1200 (loan)
2. 查询贷款额超过$1200的贷款帐号
Õloan_number (samount > 1200 (loan))
3. 查询同时有存款和贷款的客户名
Õcustomer_name (borrower) È customer_name (depositor)
4. 查询在 Perryridge 支行有贷款的客户名.
Õcustomer_name (sbranch_name=“Perryridge”
(sborrower.loan_number = loan.loan_number(borrower x loan)))
查询在 Perryridge 支行有贷款,但在其它支行均没有账号的客户名.
Õcustomer_name (sbranch_name = “Perryridge”
(sborrower.loan_number = loan.loan_number(borrower x loan))) –
Õcustomer_name(depositor)
5. 查询在 Perryridge 支行有贷款的客户名.
Query 1
ÕÕcustomer_name (sbranch_name = “Perryridge” (
sborrower.loan_number = loan.loan_number (borrower x loan)))
Query 2
ÕÕcustomer_name(sloan.loan_number = borrower.loan_number (
(sbranch_name = “Perryridge” (loan)) x borrower))
5种基本操作的实现
1.关系的属性指定
πA1 , A2 , …, An (R)
2.关系的元组选择
σF (R)
3.两个关系的合并
R1×R2
4.关系中元组的插入
R∪R '
5.关系中元组的删除
R-R'
十一 集合运算
对两个关系的集合运算传统的集合运算是二目运算,是在两个关系中进行的。但是并不是任意的两个关系都能进行这种集合运算,而是要在两个满足一定条件的关系中进行运算。那么,对关系有什么要求呢?下面先看一个定义。
设给定两个关系R、S,若满足:
(1) 具有相同的度n;
(2) R中第i个属性和S中第i个属性必须来自同一个域。
则说关系R、S是相容的。
除笛卡尔积外,要求参加运算的关系必须满足上述的相容性定义。
1. 并(Union)
关系R和关系S的并由属于R或属于S的元组组成,即R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n目关系。记作:
R∪S={t|t∈R∨t∈S}
对于关系数据库,记录的插入和添加可通过并运算实现。
2. 差(Difference)
关系R与关系S的差由属于R而不属于S的所有元组组成,即R中删去与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:
R-S={t|t∈R∧┐t∈S}
通过差运算,可实现关系数据库记录的删除。
3. 交(Intersection)
关系R与关系S的交由既属于R又属于S的元组组成,即R与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:
R∩S={t|t∈Rt∈S}
如果两个关系没有相同的元组,那么它们的交为空。
两个关系的并和差运算为基本运算(即不能用其他运算表达的运算),而交运算为非基本运算,交运算可以用差运算来表示:
R∩S=R-(R-S)
4. 广义笛卡尔积(Extended Cartesian Product)
两个分别为n目和m目关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组,记作
R×S={tr⌒ts| tr∈R,∧ts∈S}
关系的广义笛卡尔积可用于两关系的连接操作(连接操作将在一节中介绍)。
如图所示的两个关系R与S为相容关系,(c)为R与S 的并,(d)为R与S的交,(e)为R与S的差,(f)为R与S的广义笛卡尔积。
(a) (b)
4. 除法(Division)
除法运算是二目运算,设有关系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}
其中,Yx为x在R中的象集,x= tr[X]。
除法运算为非基本运算,可以表示为:
R÷S=Πx(R)-Πx(Πx(R)×S-R)
已知关系R和S,如图所示,则R÷S如图(c)所示。
与除法的定义相对应,本题中X={A,B}={(a1,b2),(a2,b4),(a3,b5)},Y={C,D}={(c3,d5),(c4,d6)},Z={F}={f3,f4}。其中,元组在X上各个分量值的象集分别为:
(a1,b2)的象集为{(c3,d5),(c4,d6)}
(a2,b4)的象集为{(c1,d3)}
(a3,b5)的象集为{(c2,d8)}
S在Y上的投影为{(c3,d5),(c4,d6)}
显然只有(a1,b2)的象集包含S在Y上的投影,所以R÷S={(a1,b2)}
除法运算同时从行和列的角度进行运算,适合于包含“全部”之类的短语的查询。
例 查询选修了全部课程的学生学号和姓名。
ΠSNO,CNO(SC)÷ΠCNO(C)*ΠSNO,SN(S)
十二 关系演算
关系演算是以数理逻辑中的谓词演算为基础的,通过谓词形式来表示查询表达式。
根据谓词变元的不同,可将关系演算分为元组关系演算和域关系演算。
元组关系演算语言
元组关系演算是以元组变量作为谓词变元的基本对象。
元组关系演算语言的典型代表是E.F.Codd提出的ALPHA语言,这种语言虽然没有实际实现,但较有名气,INGRES关系数据库上使用的QUEL语言,就是在ALPHA语言的基础上研制的。
这里主要介绍ALPHA语言和QUEL语言
ALPHA语言
ALPHA语言是以谓词公式来定义查询要求的。在谓词公式中存在客体变元,这里称为元组变量。
元组变量是一个变量,其变化范围为某一个命名的关系。
ALPHA语言的基本格式是:
<操作符> <工作空间名> (<目标表>)[:<操作条件>]
操作符有GET,PUT,HOLD,UPDATE,DELETE,DROP等到种。
工作空间是指内存空间,可以用一个字母表示,通常用W表示,也可以用别的字母表示。工作空间是用户与系统的通信区。
目标表用于指定操作(如查询、更新等)出来的结果,它可以是关系名或属性名,一答操作语句可以同时对多个关系或多个属性进行操作。
操作条件是用谓词公式表示的逻辑表达式,只有满足此条件的元组才能进行操作,这是一个可选项,缺省时表示无条件执行操作符规定的操作。除此之外,还可以在基本格式上加上排序要求,定额要求等。
下面以教学数据库(图1.12)为例,说明ALPHA语言的使用。
1. 数据查询
(1)简单查询
例 查询所有学生的数据。
GET W (S)
GET语句的作用是把数据库中的数据读入内存空间W,目标表为学生关系S,代表查询出来的结果,即所有的学生。冒号后面的操作条件缺省,表示无条件查询。
例 查询所有被选修的课程号码。
GET W (SC.CNO)
目标表为选课关系SC中的属性CNO,代表所有被选修的课程号码,查询结果自动消去重复行。
(2)条件查询
由冒号后面的逻辑表达式给出查询条件,在表达式中可以使用如下三类运算符:
① 比较运算符:>,≥,<,≤,=等于,≠;
② 逻辑运算符:∧(与),∨(或),┐(非)
③ 表示执行次序的括号:()
其中,比较运算符的优先级高于逻辑运算符,可以使用()改变它们的优先级。
例 查询计算机系工资高于1000元的教师的姓名和工资。
GET W (T.TN,T.SAL):T.DEPT=’计算机’∧T.SAL>1000
目标表为教师关系T中的两个属性SN和SAL组成的属性列表。
(3)排序查询
例 查询S3同学所选课程号及成绩,并按成绩降序排列。
GET W (SC.CNO,SC.SCORE):SC.SNO=’S3’DOWN SC.SCORE
DOWN表示降序,后面紧跟排序的属性名。
升序排列时使用UP。
(4)定额查询
例 查询一名男教师的教师号和姓名。
GET W (1) (T.TNO,T.TN):T.SEX=’男’
所谓的定额查询就是通过在W后面的括号中加上定额数量,限定查询出元组的个数。
这里(1)表示查询结果中男教师的个数,取出教师表中第一个男教师的教师号和姓名。
排序和定额查询可以一起使用。
例 查询一名男教师的教师号和姓名,并使他的年龄最小。
GET W (1) (T.TNO,T.TN):T.SEX=’男’ UP T.AGE
此语句的执行过程为:先查询所有男教师的教师号和姓名,再按照年龄由小到大排序,然后找出第一位,也就是年龄最小的男教师。
(5)带元组变量的查询
所谓的元组关系演算就是以元组变量作为谓词变元的基本对象,在关系演算的查询操作时,可以在相应的关系上定义元组变量。
元组变量代表关系中的元组,其取值是在所定义的关系范围内变化,所以也称作范围变量Range Variable,一个关系可以设多个元组变量。
例 查询S3同学所选课程号。
RANGE SC X
GET W (X.CNO):X.SNO=’S3’
使用RANGE来说明元组变量,X为关系SC上的元组变量。
如果关系的名字很长,使用起来不方便,这时可以设一个名字较短的元组变量来代替关系名,简化关系名,使操作更加方便。
(6)带存在量词的查询
例 查询S3同学所选课程名。
RANGE SC X
GET W (C.CN):$X(C.CNO=X.CNO∧X.SNO=’S3’)
注意:操作条件中使用量词时必须用元组变量。
例 查询至少选修一门其课时数为80的课程的学生的姓名。
RANGE C CX
SC SCX
GET W (S.SN):$SCX(SCX.SNO=S.SNO∧$CX(CX.CNO=SCX.CNO∧CX.CT=80))
此查询涉及三个关系,需要对两个关系(C和SC)作用存在量词,所以用了两个元组变量。
此语句的执行过程为:先查询课时数为80的课程号,再根据找到的课程号在关系SC中查询其对应的学号,然后根据为些学号在关系S中找到对应的学生姓名。
例 查询选修全部课程的学生姓名。
RANGE C CX
SC SCX
GET W (S.SN):"CX$SCX(XSC.SNO=S.SNO∧CX.CNO=SCX.CNO)
(7)库函数查询
库函数也称集函数。用户在使用查询语言时,经常要作一些简单的运算。
例如要统计某个关系中符合某一条件的元组数,或某些元组在某个属性上分量的和、平均值等等。
在关系数据库语言中提供了有关这类运算的标准函数,增强了基本检索能力。
常用的库函数下表所示
例 求学号为S1学生的平均分。
GET W (AVG(SC.SCORE):S.SNO=’S1’
例 求学校共有多少个系
GET W (COUNT(S.DEPT))
COUNT函数自动消去重复行,可计算字段“DEPT“不同值的数目。
2. 数据更新
更新操作包括修改、插入和删除。
(1)修改
修改操作使用UPDATE语句实现,具体操作分为以下三步:
①数据:使用HOLD语句将要修改的元组从数据库中读到工作空间中;
②修改:利用宿主语言修改工作空间中元组的属性;
③送回:使用UPDATE语句将修改后的元组送回数据库中。
这里HOLD语句是带上并发控制的GET语句。
例 把刘伟教师转到信息系。
HOLD W(T.DEPT):T.TN=‘刘伟’
MOVE ’信息’ TO W.DEPT
UPDATE W
在ALPHA语言中,不允许修改关系的主码,例如不能使用UPDATE语句修改教师表T中的教师号。
如果要修改主码,应该先使用删除操作删除该元组,再插入一条具有新主码值的元组。
(2)插入
插入操作使用PUT语句实现,具体操作分为以下两步:
①建立新元组:利用宿主语言在工作空间中建立新元组;
② 数据:使用PUT语句将元组写入到指定的关系中。
例 在SC表中插入一条选课记录(S6,C1,85)。
MOVE S6 TO W.SNO
MOVE C1 TO W.CNO
MOVE 85 TO W.SCORE
PUT W(SC)
PUT语句的作用是把工作空间W中的数据写到数据库中,此例即把已经在工作空间建立的一条选课记录写入到选课关系SC中。
注意:PUT语句只能对一个关系进行操作,在插入操作时,拒绝接受主码相同的元组。
(3)删除
ALPHA语言中的删除操作不但可以删除关系中的一些元组,还可以删除一个关系。
删除操作使用DELETE语句实现,具体操作分为以下两步:
① 读数据:使用HOLD语句将要删除的元组从数据库中读到工作空间中;
② 删除:使用DELETE语
展开阅读全文