第三章关系模型3.1关系模型的数据结构关系模型关系模型是目前数据库技术的主流数据模型。关系模型有着坚实的理论基础,可以保证关系模型的合理设计和有效实现。关系数据库,如DB2、Oracle、Sybase、SQLServer、Access等都是关系模型的数据库管理系统。关系数据库的数据由一系列关系组成,而关系是以人们熟悉的表格的形式组织和呈现数据的,使用简单易懂的语言实现复杂查询。关系模型适合处理规则的、结构化的数据。为适应传统数据处理领域以外的应用,如多媒体、网络大文本,大多数关系数据库管理系统对关系模型也进行了许多扩展。1关系模型的数据结构关系的概念关系模型的基本组成单元是关系(relation)。通俗地讲,关系就是一张二维表。第一行是其余各行对应列的标题,称作属性或字段、列;而其余的行称为元组或记录。例,描述产品的关系Product2关系模型的数据结构描述产品的关系ProductpCodepTypepNameCostprice101足球类足球85110102足球类手套90122201羽毛球类羽球鞋2838202羽毛球类球拍200250301游泳类泳镜85102302游泳类泳帽5063401健美类拉力器40.554.5402健美类十磅哑铃7092403健美类跳绳203关系模型的数据结构关系的数学定义域:具有相同数据类型的值的集合。笛卡尔积:域D1,D2,...,Dn的笛卡尔积为:D1D2...Dn={(d1,d2,...,dn)diDi,i=1,2,...,n}。其中每一个元素(d1,d2,...,dn)叫做一个n元组(n-tuple),元素中第i个值di叫做第i个分量。例:设D1={1,2,3},D2={a,b},则D1D2={(1,a),(1,b),(2,a),(2,b),(3,a),(3,b)}关系:集合D1,D2,...,Dn的笛卡尔积的任一个子集称该集合上的一个关系(Relation)。集合D1,D2,...,Dn是关系中元组的取值范围,称为关系的域(domain);n叫做关系的度(degree)。4关系模型的数据结构关系术语关系(Relation)二维表,关系用关系名标识,如关系r。元组(Tuple)表中的行,一般用变量t∈r表示t是关系r的一个元组。属性(Attribute)表中的一列,如列Ai,dom[Ai]表示属性Ai的域。分量(item)每个属性对应某一行的值。如t(pCode)表示t元组在pCode取值。键(Key,码)可以唯一地确定一个元组的属性组。5关系模型的数据结构关系的性质(关系数据库中对关系的限定)列同质:每一列中的值是同类型的数据,来自同一个域。列无序:列的顺序是无关紧要的。行相异:任意二个元组不能完全相同。行无序:行的顺序是无关紧要的。原子性:关系中的每个分量都是原子值,是不可分的数据项。关于分量的取值分量取值来自于列规定的域。可以为空值(null)。空值有两种可能:未知:目前尚不知它的取值。如某产品403的成本。不存在:如描述客户的关系里,属性tcusTelNo是描述客户的手机号码的,某客户可能根本就没有手机,该属性值就不存在。Null的含义与字符串类属性如t(pType)=“”含义是不同的。6关系模型的数据结构关系模式一个关系的内容是随时间的变化而变化的,关系实际上是关系的实例的简称。而关系模式是关于关系的型的描述。关系模式一般表示为:关系名(属性1:域,……,属性n:域)。如关系Product的关系模式为:Product(pCode:char(3),pType:char(10),pName:char(50),cost:real,price:real);或省略属性域的描述:Product(pCode,pType,pName,cost,real)数据库模式关系数据库是由若干互不相同的关系组成的;关系数据库模式则是由若干关系模式构成的。例:与某公司销售系统相关的另外两个关系:7关系模型的数据结构关系模式Order(orderNo,custNo,orderDate,delivDate)Orderdetail(orderNo,pCode,qty,dicount)关系的一个实例:OrderOrderNocustNoorderDatedeliveDate21100012002-1-52002-1-522100022002-1-152002-1-1623100032002-2-152002-2-2024100022002-3-42002-3-58关系模型的数据结构OrderdetailorderNopCodeQtydiscount21101100021102600.1212022000.12230110000.25223021000023202200244018000.15244025000.22440350002410120009关系模型的数据结构键设关系模式R(U),KU,r是R上的任一关系,若对r中的任意二个不同的元组t1、t2满足:(1)t1[K]t2[K];(2)若KK而t1[K]t2[K]不成立。称K是R的键或候选键。若仅条件(1)成立,称K是R的超键。通俗地讲,键是那些能够唯一标识关系里每一行的属性或属性组。如果是属性组,该属性组的任一真子集不具此特性。为了方便存储和检索关系里的元组,需要为每个关系定义主键,任一候选键都可以定义为主键,选择的原则是:优先选择单一属性候选键。选择数量少的复合键。10关系模型的数据结构外键外键是一个关系模式中的一个属性或属性组,它不是本关系的候选键,但它的值引用的是其它关系的键,或本关系的键。外键是表之间联系的体现方法。例1:某销售公司的两个关系模式:Orderdetail(orderNo,pCode,qty,discount)和Product(pCode,pType,pName,cost,price)Orderdetail的pCode,它本身不是Orderdetai的键,但它是模式Product的键。因此,它是Orderdetail的外键。例2:某大学教务系统的一个有关课程的关系模式如下:Course(courseNo,courseName,credit,hour,preCourseNo)preCourseNo不是本关系的键,但其值取自本关系的键courseNo,它是该关系的外键。11第四章关系模型3.2关系模型的约束约束是施加在关系模式上的一些限制,规范数据库设计或DBMS可利用约束检查数据库中取值的正确性,最大限度地符合数据的语义。域完整性约束一个关系中某列的取值必须来自该属性的域。例:定义pCode的域为number(3),即包含3个数字的字符串,如果某元组分量取值t(pCode)=“all”,则违反域完整性约束。实体完整性约束是对主键属性的约束:每个关系模式都要定义一个主键;每个关系主键的取值不能为空。不同行主键不能相同。如果主键是属性组,则组内任何属性均不能为空。12关系模型的约束参照完整性约束又称外键约束,约束的是两个关系之间属性的取值。一个关系的外键取值只允许两种情况:空。如果该属性的域定义允许其取值为空。所参照的关系的主键值。一般性约束这类约束不是所有关系模式都有的,与应用背景有关。例:Product(pCode,pType,pName,cost,price),要求pricecost。DBMS提供方法来定义和实施这些约束。(约束是一种数据库对象)orderNocustNoordeDatedelivDate21100012002-1-52002-1-522100022002-1-72002-1-9orderNopCodeqty211011002110260212022002230110022302120OrderOrderDetail13第四章关系模型3.3关系代数关系运算理论关系数据库的数据操纵语言(DML)分成查询和更新两大类。关于查询的理论称为关系运算理论,分为两类:关系代数:以集合运算为基础的查询操作。非过程性弱。关系演算:以谓词演算为基础的查询操作。非过程性强。过程性语言与非过程性语言C、Java等语言属于过程性语言,编程时必须给出获得结果的操作步骤,即给出“干什么”和“怎么干”。非过程性语言编程时只需指出需要什么信息,不必给出具体的操作步骤。即只要“干什么”即可。关系代数和关系演算均属于非过程性语言。以此为基础分别产生了关系数据库的SQL和QBE数据操纵语言。14关系代数布尔运算关系可以看做元组的集合,那么集合的并、交、差等布尔运算都可以用到关系中。关系的布尔运算包括:并、交、差、广义笛卡尔积、除等。同类关系:若R和S是同类关系,则满足如下条件:(1)R和S具有相同的度;(2)R和S的对应属性定义在同一个域上。同类关系也称相容运算,布尔运算大多是在同类关系中进行的。15关系代数并(Union)关系R和S的并其结果由属于R或属于S的所有元组组成,其结果为一个新关系。记为:Q=R∪S={t|t∈R或t∈S}例:R∪SABCa1b1c1a1b2c2a2b2c1ABCa1b1c1a1b2c2a1b3c2a2b2c1ABCa1b2c2a1b3c2a2b2c1RS16关系代数差(Difference)关系R和S的差由属于R但不属于S的所有元组组成。记为:Q=R-S={t|t∈R但tS}例:R-Sc1b2a2c2b2a1c1b1a1CBAc1b1a1CBAc1b2a2c2b3a1c2b2a1CBARSR-S17关系代数交(Intersection)关系R和S的交其结果由既属于R又属于S的所有元组组成。记为:Q=R∩S={t|t∈R且t∈S}例:R∩Sc1b2a2c2b2a1c1b1a1CBAc1b2a2c2b2a1CBAc1b2a2c2b3a1c2b2a1CBARSR∩S18关系代数笛卡尔积关系R和S的笛卡尔积为R中所有元组和S中所有元组的串接。结果关系的属性个数:k1+k2,其中k1和k2分别为R和S的属性数。结果关系的元组数:m×n,其中m、n分别为R和S的元组数。R和S的笛卡尔积记为:Q=R×S={t|t=trts,tr∈R且ts∈S}例:ABCa1b1c1a1b2c2a2b2c1RABCa1b2c2a1b3c2a2b2c1S19关系代数R×S=c1b1a1c1b1a1c1b2a2c1b2a2c2b2a1c1b2a2c1b1a1R.CR.BR.Ac2b2a1c2b2a1c2b2a1c2b3a1c1b2a2c2b2a1c2b3a1c1b2a2c2b2a1S.CS.BS.Ac1b2a2c2b3a120关系代数选择选择是一个一元操作,它作用于一个关系上,根据给定的选择条件,从关系集合中选出复合条件的元组。语法:选择条件(关系);选择的结果是一个与输入同模式的关系。选择条件是由算数比较表达式构成的布尔表达式。算数比较表达式:属性名常数或属性名或表达式是、≥、、≤、=、≠等算术比较运算。例1:price100(Product),查询价格大于100元的产品。例2:pType≠“足球类”price100(Product),查找价格大于100的非足球类产品。查询结果:pCodepTypepNameCostprice202羽毛球类球拍200250301游泳类泳镜8510221关系代数投影投影完成从一个关系中抽取其中的某些列的值,作为一个新关系输出。关系代数输出结果要去掉重复行。语法:属性表(关系)例1:pType(Product),查询所有的产品种类。例2:pType,pName(price100(Product)),先选择再投影。例3:price100(pType,price(Product)),先投影再选择。pType足球类羽毛球类