530 likes | 659 Views
第 5 章 关系数据模型. 刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn. 简介. 关系模型是目前商品化数据库产品的主流数据模型: IBM DB2 、 Oracle 、 Sybase 、 Microsoft SQL Server 和 Microsoft Access 、 … 关系模型有着坚实的理论基础(集合论,数理逻辑),可以保证关系模型的合理设计和有效实现。 关系模型简洁易用,关系数据库是由一系列的关系组成,而关系是以人们最熟悉的表格的形式组织和展现给用户的。 表格中的数据可以使用简单易懂的语言进行复杂地查询。. 主要内容.
E N D
第5章关系数据模型 刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn
简介 关系模型是目前商品化数据库产品的主流数据模型: IBM DB2、Oracle、Sybase、Microsoft SQL Server和Microsoft Access、… • 关系模型有着坚实的理论基础(集合论,数理逻辑),可以保证关系模型的合理设计和有效实现。 • 关系模型简洁易用,关系数据库是由一系列的关系组成,而关系是以人们最熟悉的表格的形式组织和展现给用户的。 • 表格中的数据可以使用简单易懂的语言进行复杂地查询。 Hongyan Liu @ Tsinghua University
主要内容 • 关系模型的数据结构 • 关系模型的约束 • 关系操作语言:关系代数 Hongyan Liu @ Tsinghua University
pCode pType pName cost price 101 足球类 足球 85 110 102 足球类 手套 90 122 201 羽毛球类 羽球鞋 28 38 202 羽毛球类 球拍 200 250 301 游泳类 泳镜 85 102 302 游泳类 泳帽 50 63 401 健美类 拉力器 40.5 54.5 402 健美类 十磅哑铃 70 92 403 健美类 跳绳 20 5.1 关系模型的数据结构 • 关系(relation):关系模型的基本组成单元 a named, two-dimensional table of data, consisting of a set of named columns and an arbitrary number of unnamed rows. 描述产品的关系return to page 16
pCode pType pName cost price 101 足球类 足球 85 110 102 足球类 手套 90 122 201 羽毛球类 羽球鞋 28 38 202 羽毛球类 球拍 200 250 301 游泳类 泳镜 85 102 302 游泳类 泳帽 50 63 401 健美类 拉力器 40.5 54.5 402 健美类 十磅哑铃 70 92 403 健美类 跳绳 20 关系 • 列(column):属性(attribute),字段(field) • 第一行各列的值,其余各行对应列的标题 Hongyan Liu @ Tsinghua University
pCode pType pName cost price 101 足球类 足球 85 110 102 足球类 手套 90 122 201 羽毛球类 羽球鞋 28 38 202 羽毛球类 球拍 200 250 301 游泳类 泳镜 85 102 302 游泳类 泳帽 50 63 401 健美类 拉力器 40.5 54.5 402 健美类 十磅哑铃 70 92 403 健美类 跳绳 20 关系 • 行(row):元组(tuple),记录(record) • 除属性所在行之外的每一行 Hongyan Liu @ Tsinghua University
pCode pType pName cost price 101 足球类 足球 85 110 102 足球类 手套 90 122 201 羽毛球类 羽球鞋 28 38 202 羽毛球类 球拍 200 250 301 游泳类 泳镜 85 102 302 游泳类 泳帽 50 63 401 健美类 拉力器 40.5 54.5 402 健美类 十磅哑铃 70 92 403 健美类 跳绳 20 关系 • 属性的域(domain) • 每一个属性在各行中的取值类型都是相同的,都有一个取值范围 Hongyan Liu @ Tsinghua University
关系 • 分量(item):每个属性对应每一行的值 • 原子性,即分量不可以再细分 • 关系模型的基本要求:分量不可分,1NF Hongyan Liu @ Tsinghua University
关系 • 解决方法:横向和纵向分解 return to page 16 Hongyan Liu @ Tsinghua University
关系 • 分量 • 分量可以是空值(null),即什么值都没有,这意味着两种可能: • 一种是其值未知,即目前尚不知道它的取值,如编号为403的产品的成本, • 另一种是不存在,例如,北京市的学生其所属省这个属性的取值就不存在。 • 对空值进行判断时,采用特殊的方法,不论属于何种数据类型,一般都采用“is null”或者“is not null”来判断。 Hongyan Liu @ Tsinghua University
关系 • 关系的度或目(degree):属性的个数 • 关系的基数(cardinality)元组个数 • 总结关系的特点为:each relation has a unique name • 分量不可分(single-valued) • 行相异(each row is unique, sequence is insignificant) • 列同质(each attribute has a unique name, sequence of columns is insignificant) Hongyan Liu @ Tsinghua University
关系模式 • 关系:关系的实例: • 一个关系的内容是随时间而变化的,因此准确地说,关系实际上是关系的实例(instance)的简称, • 关系模式:关系的型 • 关系模式是关系的型的描述,它一般包括关系的名字,属性的名字,属性的域等信息 Product(pCode: char(3), pType: char(50), pName: char(50), cost: real, price: real) 也可暂时忽略域的信息变为: Product(pCode, pType, pName, cost, price) Hongyan Liu @ Tsinghua University
orderNo custNo orderDate delivDate 21 10001 2002-1-5 2002-1-5 22 10002 2002-1-5 2002-1-6 23 10003 2002-2-10 2002-2-20 24 10002 2002-3-4 2002-3-5 关系数据库 • 关系数据库是若干互不相同的关系组成的,而关系数据库模式是由若干个与某应用背景相关的关系模式构成的。 例如,与某公司销售系统有关的另两个关系模式为: Order(orderNo, custNo, orderDate, delivDate) return to page 16 Hongyan Liu @ Tsinghua University
orderNo pCode qty discount 21 101 100 0 21 102 60 0.05 21 202 200 0.1 22 301 1000 0.25 22 302 1000 0 23 202 20 0 24 401 800 0.15 24 402 500 0.2 24 403 500 0 24 101 200 0 关系数据库 OrderDetail(orderNo, pCode, qty, discount) return to page 16 Hongyan Liu @ Tsinghua University
键(key) • 候选键(candidate key) :简称为键(key) • 那些能够唯一标识关系里每一行的属性或属性组,如果是属性组(复合键,composite key),该属性组的任一个真子集不具有此特性 :一个取值只对应一行元组 • 例如:如下表的候选键各有哪些? Order(orderNo, custNo, orderDate, delivDate) page 14 OrderDetail(orderNo, pCode, qty, discount) page 15 Product(pCode, pType, pName, cost, price) page 4 Student(sNo, sName, sex, province, city, telNo) page 9 Hongyan Liu @ Tsinghua University
键 • 主键(primary key) • 任意一个候选键都可以定义为主键 • 每一个表都应该定义一个主键 • 定义主键之后,DBMS可以识别行的重复,在其他关系模式中可以通过主键属性来引用该关系模式中的元组。 • 例如: Customer(custNo, custName, custTel1, custTel2) Order(orderNo, custNo, orderDate, delivDate) Hongyan Liu @ Tsinghua University
键 外键(foreign key) • 是一个关系中的一个属性或属性组,它不是本关系的候选键,但它的值引用的是本关系的键的取值,或是其他关系的键的取值。 • 例1: Customer(custNo, custName, custTel) Order(orderNo, custNo, orderDate, delivDate) • 例2: Part(partNo, partName, weight, color, itemNo) Hongyan Liu @ Tsinghua University
键 Customer Order Hongyan Liu @ Tsinghua University
键 • 例2: Part(partNo, partName, weight, color, itemNo) Hongyan Liu @ Tsinghua University
键 • 超键(super key)是包含任一个候选键的属性或属性组, • 例如,pCode和(pCode, pType)都可以称作关系模式Product的超键。 OrderDetail(orderNo, pCode, qty, discount)的超键有哪些? Hongyan Liu @ Tsinghua University
键 • 主属性、非主属性 • 包含在任一个候选键中的属性称为主属性(prime attribute), • 没有包含在任一个候选键中的属性称为非主属性(non-prime attribute) • 例:Product(pCode, pType, pName, cost, price)的主属性和非主属性各有哪些? • 假设产品没有重名时,情况又怎样? Hongyan Liu @ Tsinghua University
5.2 关系模型的约束 • 约束的类型 • 域完整性约束(domain integrity constraint) • 实体完整性约束(entity integrity constraint) • 参照完整性约束(referential integrity constraint) • 其他一般性约束 • 约束的作用 • 可以检查数据库中数据取值的正确性,最大限度地符合数据的语义 Hongyan Liu @ Tsinghua University
域完整性约束 • 一个关系中某列的所有取值必须来自该属性的域 • 例如,产品的编号pCode属性的域为包含3个数字的字符串,如果某一个元组在该属性上的取值为“a01”就违反了该属性的域约束。 • DBMS应该提供为每个属性定义域的方法,并且为定义的域进行合法性检查,具体定义方法在介绍SQL语句和Access中表的创建时再详细介绍。 Hongyan Liu @ Tsinghua University
实体完整性 • 约束主键属性的取值 • 要求每个关系都要定义一个主键,而且主键的取值不能为空,如果主键是复合键(属性组),则该属性组中的任一个属性的取值都不能为空。 • 一般来说,如果一个关系定义了主键,则系统会自动检查它的每一个取值是否为空,是否重复,如果为空,或者重复,则系统会给出提示,并且不允许相应操作的执行。 • 例:Order(orderNo, custNo, orderDate, delivDate) OrderDetail(orderNo, pCode, qty, discount) 哪些属性的取值不能为空? Hongyan Liu @ Tsinghua University
Order(orderNo, custNo, orderDate, delivDate) OrderDetail(orderNo, pCode, qty, discount) Product(pCode, pType, pName, cost, price) 参照完整性 • 参照完整性约束又称为外键约束(foreign key constraint) • 约束的是外键属性的取值:一个表的外键的取值只能有两种情况: • 或者取所参照的表的主键的某个取值, • 或者为空,如果属性的域定义或其他约束没有限定相应属性的取值不可以为空。 Hongyan Liu @ Tsinghua University
orderNo orderNo pCode custNo qty orderDate discount 21 101 100 0 21 10001 2002-1-5 2002-1-5 Order delivDate 21 102 60 0.05 22 10002 2002-1-15 2002-1-16 21 202 200 0.1 23 10003 2002-2-10 2002-2-20 22 301 1000 0.25 24 10002 2002-3-4 2002-3-5 22 302 1000 0 23 202 20 0 24 401 800 0.15 24 402 500 0.2 24 403 500 0 24 101 200 0 参照完整性 OrderDetail 此时,orderNo可以取空值吗?
一般性约束 • 还有一些约束不是所有关系模式所共同拥有的,而是依赖于具体的应用背景而具有的一些约束,例如: Product表中属性price的取值应该大于属性cost的取值等。 这些约束应该能够由数据库系统提供的方法来定义和实施。 Hongyan Liu @ Tsinghua University
5.3 关系数据模型的操纵语言 • 关系数据模型的操纵语言分为两类: • 关系代数 • 关系演算 • 关系代数包括一系列操作符,描述如何一步步地得到查询结果, • 关系演算用谓词表达关系的操作,根据变量的不同分为: • 元组关系演算 • 域关系演算 Hongyan Liu @ Tsinghua University
关系代数(relational algebra) • 关系代数的基本操作包括5个: • 选择(selection) • 投影(projection) • 并(union) • 笛卡儿积(cross-product) • 集合差(set-difference) Hongyan Liu @ Tsinghua University
关系代数 • 除此之外,还有一些可以由基本运算推导出的其他运算,如: • 交(intersection) • 连接(join) • 重命名(renaming) • 除(division)等。 Hongyan Liu @ Tsinghua University
选择 • σ选择条件(〈关系〉) • 小括号里的关系,即表名,是该操作的参数。 • “选择条件”是个布尔表达式, 由逻辑运算符“与”(“”)和“或”(“”)连接算术比较表达式构成的,每个算术比较表达式的构成为: 属性名 θ常数或属性名 • 属性名(操作符左边)可由属性在关系中的顺序号代替 • θ代表算术比较运算符,包括、、、、、。 • 选择操作的结果仍然是一个关系 Hongyan Liu @ Tsinghua University
pCode pType pName cost price 101 足球类 足球 85 110 102 足球类 手套 90 122 201 羽毛球类 羽球鞋 28 38 202 羽毛球类 球拍 200 250 301 游泳类 泳镜 85 102 302 游泳类 泳帽 50 63 401 健美类 拉力器 40.5 54.5 402 健美类 十磅哑铃 70 92 403 健美类 跳绳 20 选择 • σprice>100(Product) • σ2“足球类” 5>100(Product) = σ2“足球类”(σ 5>100(Product))
pCode pCode pType pType pName pName cost cost price price 101 足球类 足球 85 110 101 足球类 足球 85 110 102 足球类 手套 90 122 102 足球类 手套 90 122 301 游泳类 泳镜 85 102 201 羽毛球类 羽球鞋 28 38 302 游泳类 泳帽 50 63 202 羽毛球类 球拍 200 250 301 游泳类 泳镜 85 102 302 游泳类 泳帽 50 63 401 健美类 拉力器 40.5 54.5 402 健美类 十磅哑铃 70 92 403 健美类 跳绳 20 选择 • σpType=“足球类”pType=“游泳类”(Product)
pType pType pName 足球类 足球类 足球 羽毛球类 足球类 手套 羽毛球类 球拍 游泳类 健美类 游泳类 泳镜 投影 • π属性表( <关系> ) • πpType(Product) • πpType,pName(σprice>100(Product)) Hongyan Liu @ Tsinghua University
r s 并 • <关系1> ∪ <关系2> 关系1和关系2必须符合并兼容(union-compatible)特性: (1)有相同的属性个数 (2)对应的属性有相同的域 Hongyan Liu @ Tsinghua University
并 • πpName, price(σprice>100(Product)) ∪πpName, price(σpType=”游泳类”(Product)) Hongyan Liu @ Tsinghua University
s r 差 • <关系1> - <关系2> • πpCode(Product)-πpCode(OrderDetail) 得到的什么?
r-s r s 交 • <关系1> ∩ <关系2> • r∩s=r-(r-s) 例: • πpCode(σprice>100(Product))∩πpCode( σqty>=100 (OrderDetail)) ∩
笛卡儿积 • <关系1> <关系2> • 设两个关系分别为r和s,分别含有m1和m2个属性,以及n1和n2行元组, • r和s的笛卡儿积结果关系包含的属性依次是r的m1个属性和s的m2个属性 • r和s的笛卡儿积结果将包含(n1 n2)行元组 • 对于r和每一行元组tr和s的每一行元组ts,在结果中都有一行<tr, ts>存在 • 符号< tr, ts >代表两行元组的串接(concatenation)。 Hongyan Liu @ Tsinghua University
Order orderDetail Product
Product. pCode pName orderNo OrderDetail. pCode qty discount 102 手套 21 101 100 0 102 手套 21 102 60 0.05 102 手套 23 202 200 0.1 202 球拍 21 101 100 0 202 球拍 21 102 60 0.05 202 球拍 23 202 200 0.1 笛卡儿积 πpCode, pName(σprice>120(Product))(σorderno=21(OrderDetail)) • σ product.pcode=orderdetatil.pcode (πpCode,pName(σprice>120(Product))(σ orderno=21(OrderDetail)))
笛卡儿积 • πorderNo (OrderDetail) πpCode(σpType=”足球类” (Product)) × Hongyan Liu @ Tsinghua University
连接 • <关系1>c <关系2> • rcs =σc( r s) • c代表连接条件,是由逻辑运算符“”或“”连接算术比较表达式构成的,每个算术比较表达式的组成为: AiθBj • θ代表算术比较运算符:、、、、、,Ai和Bj是分别来自两个关系的属性,或属性和常数组成的算术表达式。 • Productproduct.pcode=orderdetail.pcodeOrderDetail Hongyan Liu @ Tsinghua University
orderDetail Product
连接 • 查找足球类产品的销售情况,包括产品名称、订单编号,产品原价,折扣 πpName,orderno,price,discount(σpType=”足球类”(Product) COrderDetail)) C: product.pcode=orderdetail.pcode • πpCode,pName (Product(price*(1-discount)<cost) (product.pcode=orderdetail.pcode)OrderDetail) • 连接条件为属性名相同的属性的取值相等,结果关系将属性名相同的列只保留一个的连接称为自然连接(natural join) rs Hongyan Liu @ Tsinghua University
连接 例: πpCode,pName(σpType=”足球类”(Product) )OrderDetailπorderNo, orderDate(Order) Hongyan Liu @ Tsinghua University
连接 • 外连接: • 左外连接(left outer join): r *c s • 右外连接(right outer join): r *c s • 全外连接(full outer join): r **c s Hongyan Liu @ Tsinghua University
例:(σpType=”羽毛球类”(Product) ) *OrderDetail
重命名 • ρs(A1,A2, …, An)( r ) • r重命名为s,并将r的n个属性重新命名为对应的(A1,A2,…, An),如果属性不需要改名,则(A1,A2,…, An)可省。 例:Part(pno, pname, weight, subpno) 查找每个零件的编号、名称、重量以及构成它的子零件的名称和重量 Hongyan Liu @ Tsinghua University