1、第一章 数据库系统的世界The Worlds of Database Systems,数据库系统的发展 数据库管理系统的结构 未来的数据库系统,2,1.1 数据库系统的发展c,一、术语 1.数据库 是长期储存在计算机内的、有组织的、可共享的数据的集合。,3,2.数据库管理系统,数据库系统基础教程A First Course in Database SystemsDBMS - DataBase Management System是处理数据库访问的软件。提供数据库的用户接口。DBMS的目的:提供一个可以方便地、有效地存取数据库信息的环境,5,3.数据库系统 是指在计算机系统中引入数据库后的系统,6
2、,数据库系统构成,7,保存信息的两种不同方法: 永久性的系统文件、数据库系统。 文件方式的问题: 数据的冗余和不一致 数据访问困难 数据孤立 完整性问题 原子性问题 并发访问异常 安全性问题,二、文件系统与数据库系统,8,数据库方法能较好地解决以上的问题 数据的独立性 有效地访问数据 减少应用程序的开发时间 数据的一致性和安全性 统一的数据管理 并发的数据访问,三、为什么用数据库,9,几种模型: 基于树的层次模型 基于图的网状模型 物理相关、无高级查询语言 基于表的关系模型 物理无关、支持高级查询语言, 基于对象的面向对象模型 OO OR,四、数据库模型的发展,定长记录,10,关系数据库系统,
3、11,关查询语言 SQL语言 SELECT balance FROM Accounts WHERE accountNO = 67890;,关系数据库系统,12,DBMS的组成 数据、元数据 存储管理程序 事务管理程序 查询处理程序,1.2 数据库管理系统的结构,13,数据、元数据 关于数据结构的信息(关于数据的数据) 索引(INDEX),DBMS的组成,14,存储管理程序 文件管理程序 缓冲区管理查程序,DBMS的组成,15,查询处理程序 查询优化 磁盘访问,是查询的主要代价; 索引是查询优化的利器,DBMS的组成,16,事务管理程序 事务:是用户定义的一个数据库操作序列 事务的四个特性 原子
4、性A 一致性C 隔离性I 持久性D,DBMS的组成,17,客户-服务器程序体系结构 浏览器-服务器体系结构,DBMS的组成,18,客户-服务器程序体系结构 浏览器-服务器体系结构,1.3 未来的数据库系统,第二章 数据库建模Database Modeling,20,数据库的设计步骤,需求收集和分析 设计概念结构 设计逻辑结构 设计物理结构 物理实现,21,数据库的设计步骤,需求收集和分析 用户关心什么 用户要什么结果 设计概念结构 设计逻辑结构 设计物理结构 物理实现,22,数据库的设计步骤,需求收集和分析 设计概念结构 存什么 关系(联系)如何 ODL或E/R图,是各种数据模型的共同基础 设
5、计逻辑结构 设计物理结构 物理实现,23,数据库的设计步骤,需求收集和分析 设计概念结构 设计逻辑结构 用什么数据模型 数据库的模式(database schema) 用户子模式 设计物理结构 物理实现,24,数据库的设计步骤,需求收集和分析 设计概念结构 设计逻辑结构 设计物理结构 数据怎么存 根据DBMS产品、环境特点 物理实现,25,数据库的设计步骤,需求收集和分析 设计概念结构 设计逻辑结构 设计物理结构 物理实现 运行DDL 装入测试数据 应用程序,26,数据库的设计步骤,想法 需求,ODL,E / R,关系,RDBMS,OODBMS,27,2.1 ODL,对象定义语言 Object
6、 Definition Language 以面向对象的观点、方法,说明数据库的概念结构 可方便地直接转换成 OODBMS 的说明 经过努力,可以转换成 RDBMS 的说明,28,面向对象的设计,对象标识 OID 对象与对象的区别 类 具有相同特性的对象归为一类 对象的归并必须有意义 属于同一类的对象其特性必须相同,29,面向对象的设计,对象的三个特性 属性:特性 联系:引用 方法:函数 接口说明 interface ,30,属性 对象某方面的特征,属性就是数据 只由基本数据类型构成 属性的类型,不能是类、也不能从类中构造 Interface Movie /Movie Class 的ODL说明
7、attribute stringtitle; attribute integeryear; attribute integerlength; attribute enum Film color, blackAndWhite filmType; ;,31,Interface Star attribute stringname; attribute StructAddr string street,string city address; ;,32,联系 对象的引用 对象的关联 对象集合的引用(1:N) Relationship Set stars; 单一对象集合的引用(1:1) Relation
8、ship Star starOf;,33,反向联系 ODL要求显式表示存在的反向联系 Interface Movie /Movie Class 的ODL说明 attribute stringtitle; attribute integeryear; attribute integerlength; attribute enum Film color, blackAndWhite filmType; relationship Set stars inverse Star : starredIn; /Star与Movie的联系 ;,34,联系的多重性 N:N 在联系中,每个C都和D的集合有关,而在
9、反向联系中,每个D都和C的集合有关 N:1 在联系中,每个C都和唯一的D有关,而在反向联系中,每个D都和C的集合有关 1:1 在联系中,每个C都和唯一的D有关,而在反向联系中,每个D都和唯一的C有关,35,Interface Moive relationship Set stars inverse Star : staredIn; relationship Studio ownedBy inverse Studio : owns; ; Interface Star relationship Set staredIn inverse Moive : stars; ; Interface Stud
10、io relationship Set owns inverse Moive : ownedBy; ;,36,ODL中的类型 基本类型 原子类型 接口类型 结构类型,可由以下类型组合而成 集合 无重复,次序无关 包 可重复,次序无关 列表 可重复,次序相关 数组 结构,37,2.2 实体联系图(E/R),用图形的方法,描述实体及实体间的联系 世界由一组称作实体的基本对象及这些对象间的联系组成 元素 实体(Entity) 客观存在并可相互区别的事件或物体 对应于ODL中的对象 实体集(Entity Set) 同类(具有相同类型、相同性质)实体的集合 对应于ODL中的类 用矩形表示,38,2.2
11、实体联系图(E/R),元素 属性(Attribute) 实体所具有的某一特性 用与实体集相连的椭圆表示 联系(Relationship) 实体集之间的关联 可涉及多个实体集 可表示双向的联系 用与相应的实体集相连的菱形表示,39,Movies,Stars,Stars-in,lenght,filmType,title,year,name,address,40,E/R联系的多重性 N与1的表示,Movies,Stars,Stars-in,Studios,Presidents,Runs,Movies,Studios,Owns,41,联系的多向性 E/R图能方便地描述两个以上实体集间的联系,42,联系
12、中的角色 实体集在联系中的作用 参与联系的实体集互异 只标注联系名 同一实体集在一个联系中多次出现 标注联系名及角色名,43,联系中的属性 联系中可以包含属性 由联系而产生的属性 可为由联系产生的属性建立实体集,Stars,Movies,Contracts,Studios,salary,44,将多向联系转换成二元联系 新增连接实体集 引入连接实体集至原实体集的多对一的联系,45,2.3 设计原则,真实性 设计应当忠于规范 存什么 避免冗余 任何事物只表达一次 避免引入过多的元素 选择合适的元素类型 属性? 类/实体集? 联系集?,46,2.4 子类,特殊化与概括 子类与超类 属性的继承,47,
13、ODL中的子类 子类继承其超类的所有特性 属性 联系 Interface Cartoon : Movie relationship set voices; ,48,ODL中的多重继承 类的层次 一个类可以有多个超类 Interface MurderMystery : Movie attribute string weapon; Interface Cartoon-MurderMystery : Cartoon,MurderMystery ,49,E/R中的子类 Isa E/R中的继承,50,2.5 对约束的建模,建模包含对现实世界的对象及联系的描述,也包含对它们的一些约束 键码 单值约束 参照
14、完整性约束 域的约束 一般约束,51,键码 在类的范围内唯一标识一个对象(或者在实体集的范围内唯一标识一个实体)的属性或属性集 一个类中的两个对象(或一个实体集中的两个实体)在构成键码的属性集上取值不能相同 ODL中键码的表示 interface Movie ( key (title,year) ) ,52,超码 一个或多个属性的集合,能在一个实体集中唯一地标识一个实体 一个类(或实体集)中可能有多个超码 候选码 其任意真子集都不为超码的超码 一个类(或实体集)中可能有多个候选码 主码 从候选码中选取的一个,一个类(实体集)中只有一个主码 E / R图中只能表示主码:主码属性名加上下划线,53
15、,单值约束 要求某个角色的值是唯一的,如键码 当一个属性为单值时 可以要求该属性值存在(not null) 可以允许该属性值任选(null) 构成键码的属性,必须有值存在(not null),54,参照完整性约束 要求由某个对象引用的值在数据库中确实存在 参照与被参照、引用与被引用 参照完整性约束的操作(各产品不同) 禁止删除被引用的对象 级联删除 / 修改 E/R图中参照完整性的表示,55,2.6 弱实体集,弱实体集的属性不足以形成主码 有主码的实体集称为强实体集 弱实体集只有作为一对多联系的一部分(多)才有意义 弱实体集与其拥有者之间的联系是标识性联系,56,2.7 关于联系集,联系集的成
16、份 参加联系的实体集的主码 联系集的属性 联系中属性的决策(二元联系) 1:1 联系集的属性:放到任意一端 1:N 联系集的属性:放到 N 端 N:M联系集的属性:只能留在联系集中,57,联系集的取舍(二元联系) 1:1联系:将一端的主码作为另一端的属性 1:N联系:将一端的主码作为 N 端的属性 N:M联系:必须保留联系集 联系集的键码(二元联系) 1:1联系:任意一端的主码 1:N联系:N端的主码 N:M联系:参加联系的所有实体集的主码,58,ODL、E/R建模 关心:存什么数据、关系如何 不关心:用什么数学模型、DBMS产品 透过E/R图,便于与用户交流,59,作业 思考所有带*的练习,
17、并上网查阅解答 练习2.1.7 / 2.2.8 / 2.3.2 / 2.5.3 / 2.5.4 /2.6.4(a),第三章 关系数据模型The Relational Data Model,61,ODL、E/R到关系模型的转换 关系模型的设计理论,62,3.1 关系模型的基本概念,逻辑数据模型 是用户从数据库所看到的数据模型 与DBMS有关 层次、网状、关系、面向对象,63,关系数据模型 数据结构 两维的扁平表 数据操作 关系代数 关系演算 数据的完整性 实体完整性 参照完整性 用户定义的完整性,64,现实世界的实体以及实体间的各种联系均用关系表示 关系数据库系统是建立在关系模型上的数据库系统
18、关系数据库是表的集合,65,模型和模式 数据模型是描述数据的手段 数据模式是用给定的数据模型对具体数据的描述 属性 元组 域 型 值 联系 关系的联系是通过关联属性的值连接的,66,元组 (行、记录),Student ( sno, sname, ssex, sage, sdept ),67,关系实例 关系 实体集、类 关系的实例 元组的集合 元组 实体、对象 数据库实例 给定时刻数据库中数据的一个快照,68,3.2 从ODL设计到关系设计,ODL设计是概念设计的产物 ( Using OO ) ODL描述 关系模式 实现,69,ODL属性 关系属性 原子属性 类 关系 属性 属性 非原子属性(复
19、杂数据类型) 必须转换成原子属性 记录结构 结构的每个item对应一个属性 多值集合 针对每个值建立一个元组 会产生冗余 需规范化,70,ODL属性 关系属性 (续) 其他类型属性 (包、数组、列表) 针对每个元素建立一个元组 增加一个记数属性,表示包的成员号 定长数组 扩展为多个属性,71,ODL联系 关系描述 单值联系 联系的类型为一个类 增加一个(组)属性,存放相关类的键码属性(组) 将类之间的联系 关系之间的联系,72,ODL联系 关系描述(续) 多值联系 联系的类型为某个类的集合类型 1 : N、N : M 增加一个键码属性 为集合的每个成员建立一个元组 其他原始属性重复多次(与集合
20、成员的个数相等) 导致大量的冗余,需要规范化,73,键码是必需的 选择合适的属性(组)作为键码 学号、工号、身份证号. 增加计数属性 联系与反向联系 在联系的双方均有联系的描述 冗余 ODL:双向描述 E/R:相关的键码值进行连接,74,3.3 从E/R图到关系的设计,E/R与ODL描述的差异 联系作为独立的概念 联系嵌套在类定义中 结构化数据 允许使用集合、聚集类型 联系可以有属性 联系无属性 E/R 关系模式 实现,75,实体集到关系的转换 非弱实体集 实体集名 关系名 属性 属性 弱实体集 为弱实体集建立关系 属性:弱实体集的属性 + 辅助实体集的键码,76,E/R联系到关系的转换 用关
21、系表示联系 联系名 关系名 属性 属性 + 相关实体集的键码属性(集) 多向联系的转换 注意,属性的命名,77,3.4 子类结构到关系的转换,ODL中的子类 一个对象完全属于一个类 子类继承其超类的特性 E/R中的子类 分层结构通过与ISA联系有关的实体集进行扩展,78,用关系表示ODL子类 每个子类都有自己的关系 包含该子类的所有特性(含继承特性) 在一个关系中含有所有属性 Movie(title,year,length,filmType,studioName,starName) Cartoon (title,year,length,filmType,studioName,starName,
22、voice) MurderMystery (title,year,length,filmType,studioName,starName,weapon) Cartoon- MurderMystery (title,year,length,filmType,studioName,starName,voice, weapon),79,在关系模型中表示 isa 联系 子类的信息被分散到上层的几个关系中 与ISA联系有关的实体集拥有相同的键码 Movie(title,year,length,filmType) Cartoon(title,year) MurderMystery(title,year,
23、weapon) Voice(title,year,name),80,使用NULL值合并关系 将关系描述成一个全集 属性:所有可能的属性 描述:允许Null值 层次越高,取Null值的属性越多 Movie (title,year,length,filmType,studioName,starName,voice, weapon) 只是一种方法而已,81,作业 思考所有带*的练习,并上网查询解答 练习3.2.3 / 3.3.1 / 3.4.1 / 3.5.3 /,82,3.5 函数依赖,数据依赖 函数依赖 多值依赖 数据依赖是针对数据模式,而不是特定的实例,83,函数依赖(FD) 属性之间的联系
24、假设给定 X 属性的值,就知道 Y的值,那么 X 函数决定 Y 如果R的两个元组在属性A1,A2,An上一致,则它们在另一个属性B上也一致,那么 A1,A2,An函数决定B,记作A1A2AnB if A1A2AnB1then A1A2AnB2A1A2An B1 B2 . Bm A1A2AnBm,84,关系的键码 如果一个或多个属性的集合A1A2An满足如下条件,则该集合为关系R的键码: 1.这些属性函数决定该关系的所有其他属性 2. A1A2An的任何真子集都不能函数决定R的所有其他属性,85,超键码 包含键码的属性集称为超键码,86,寻找关系的键码(来自E/R) 来自实体集的关系的键码就是该
25、实体集的键码属性 对于二元联系R: N:M,相关两个实体的键码都是R的键码属性 N:1,多端实体集的键码是R的加码属性 1:1,任意一端实体集的键码是R的键码 对于多向联系R: 如果多向联系R有一个箭头指向实体集E,则响应的关系中,除了E的键码以外,至少还存在一个键码。,87,寻找关系的键码(来自ODL) 来自ODL的关系的键码不一定就是该类的键码属性 对于单值联系R: 类C有一个指向类D的单值联系,C的关系中包含D的键码。C的键码仍是相应关系的键码 对于多值联系R: 被引用类的键码加入到引用类的键码组合称为键码,88,3.6 函数依赖规则,分解规则 A1A2An B1 B2 . Bm 等价于
26、 A1A2An Bi 合并规则 A1A2An Bi 等价于 A1A2An B1 B2 . Bm,89,平凡的函数依赖 如果对于函数依赖 A1A2An B,B是A中的一个,则该函数依赖就是平凡的函数依赖 平凡依赖是永恒的 title,year title 非平凡 如果B中至少有一个属性不在A中 title,year year,length 完全非平凡 如果B中没有一个属性在A中 title,year length,90,计算属性的闭包 闭包 F的闭包是指F逻辑蕴涵的所有函数依赖的集合,记作F+ 闭包的意义 检验给定的函数依赖是否蕴涵于某个函数依赖集S 从给定的函数依赖,可以推导出蕴涵的函数依赖
27、求闭包 例:对关系R(A,B,C,D,E,F),给定函数依赖ABC,BCAD,DE,CFB,求 A,B+,91,关系的基与最小基 任何一个能从中导出关系的所有依赖的给定依赖集,称为该关系的一个基 如果一个基的任何真子集都不能推导出该关系的依赖全集,则称此基为最小基 求函数依赖的最小基 例:对关系R(A,B,C,D),有ABC,BC,A B,AB C,AC D,求最小函数依赖集,92,3.7 关系数据库模式设计,什么是好的数据库设计 体现客观世界的信息 无过度的冗余 无插入异常 无更新复杂 无删除异常,93,更新复杂!,删除异常!,94,异常的原因 数据依赖的约束 解决方法 数据库设计的规范化分
28、解,95,范式(Normal Forms) 规范化 一个关系满足某个范式所规定的一系列条件时,它就属于该范式 可以用规范化要求来设计数据库 也可以用来验证设计结果的合理性,用其指导优化过程 1NF2NF3NFBCNF4NF,96,第一范式(1NF) 当且仅当一个关系R中,每一个元组的每一个属性只含有一个值时,该关系属于第一范式。 要求属性是原子的,97,第二范式(2NF) 对于关系R,若R1NF,且每一个非主属性完全函数依赖于码,则R2NF。 不能部分依赖于码 sc(sno,sname,cno,grade) sno,cnograde snosname,完全依赖,非完全依赖,98,第三范式(3N
29、F) 对于关系R,若R2NF,且每个非主属性都不传递依赖于码,则R3NF。 主属性可以传递依赖于码 student(sno,sname,sdept,dept_manager) snosname,sdept sdeptdept_manager 传递依赖:snodept_manager,99,Boyce/Codd范式(BCNF) 对于关系R,若R1NF,且所有非平凡的函数依赖,其决定因素是候选码,则RBCNF。 sct(s,c,t)/学生,课程,教师 tc/每位教师只上一门课 (s,c)t (s,t)c/每门课有若干位教师,100,最高范式 BCNF是基于函数依赖的最高范式 但不是数据库模式设计的
30、最高范式,101,范式优化 分解 A1,A2,An = B1,B2,BnC1,C2,Cn 分解的要求 无损连接 BCB或BCC 保持依赖 范式要求,102,分解到高层范式(基于FD) 找出一个不符合范式要求的FD(XY),并使其右端的属性尽可能地多(求出X+) 创建新的模式,包含上述FD的所有(左右)属性(X+的所有属性) 创建另一模式,包含前述FD中的决定因素及剩余的所有属性(U-X+)X) 反复13,直至符合范式要求,103,3.8 多值依赖,BCNF 仍有异常,104,多值依赖(MVD) 按P.110的定义,105,多值依赖(MVD) 设R(U)是属性集U上的一个关系。X、Y、Z是U的子
31、集,且Z=U-X-Y。关系R(U)中多值依赖XY成立,当且仅当对R(U)的任一元组r,给定一对(x,z)值,有一组y的值,这组值仅仅取决于x值,而与z值无关。 对给定X的值,则Y的取值与Z的取值无关,106,给定一对(x,z)值,有一组y的值,107,nametitle,year,108,平凡的多值依赖 如果X包含Y或 XY=U,则XY是平凡的多值依赖 性质 If XY,and YZ then XZ-Y If XY,and Z=U-X-Y then XZ If XY then XY 无分解/合并规则,109,第四范式(4NF) 对于关系R,若R1NF,且所有非平凡的多值依赖,其决定因素是候选码
32、,则R4NF。 基于数据依赖的最高范式 分解要求 无损连接 保持依赖 4NF,110,nametitle,year namestreet,city All Key is BCNF isnt 4NF,R1(name,title,year) R2(name,street,city) All Key is 4NF,111,范式间的联系 高层范式包含低层范式 分解特性,112,作业 思考所有带*的练习,并上网查询解答 练习3.7.5/3.8.3/,第四章 关系模型中的运算,Operations In The Relational Model,114,概述,数据库的核心应用是数据库的查询 查询语言 用户
33、用来从数据库中请求获取信息的语言 关系代数是过程化的查询语言 关系代数是一种抽象的查询语言,115,4.1 关系代数,运算对象:关系 运算结果:关系,116,关系代数,关系代数的运算 普通的集合运算 并、交、差 删除部分关系的运算 选择、投影 合并两个关系元组的运算 连接、积 改名运算,117,关系代数 并Union (),R和S的并,RS,是在R或S或两者中的元素的集合 一个元素在并集中只出现一次 R和S必须同类型(属性集相同、次序相同,但属性名可以不同),118,关系代数 交Intersect (),R和S的交,RS,是在R和S中都存在的元素的集合 一个元素在交集中只出现一次 R和S必须同
34、类型(属性集相同、次序相同,但属性名可以不同),119,关系代数 差Minus (-),R和S的差,R-S,是在R中而不在S中的元素的集合 R和S必须同类型(属性集相同、次序相同,但属性名可以不同),120,关系代数投影Projection(),从关系R中选择若干属性组成新的关系 A1,A2,An(R),表示从R中选择属性集A1,A2,An组成新的关系 列的运算 投影运算的结果中,也要去除可能的重复元组 例: ssex,sage(student) ?,121,关系代数选择Selection(),从关系R中选择符合条件的元组构成新的关系 C(R),表示从R中选择满足条件(使逻辑表达式C为真)的元
35、组 行的运算 例: sage = 23 AND sdep = CS(student) ? 例:列出CS系的学号及姓名 sno,sname(sdep = CS(student) ),122,关系代数笛卡儿积(),关系R、S的笛卡儿积是两个关系的元组对的集合所组成的新关系 RS: 属性是R和S的组合(有重复) 元组是R和S所有元组的可能组合 是R、S的无条件连接,使任意两个关系的信息能组合在一起 例: student sc (注意sno的命名),123,关系代数自然连接( ),从RS的结果集中,选取在某些公共属性上具有相同值的元组,组成新的关系 R、S的公共属性 属性集的交集(名称及类型相同) 公
36、共属性在结果中只出现一次 等值连接 例: student sc (注意sno的命名),124,关系代数条件连接(),从RS的结果集中,选取在指定的属性集上满足条件的元组,组成新的关系 是一个关于属性集的逻辑表达式 R C S,125,关系代数改名(),对关系R实施改名运算,可显式地改变关系名及属性名 将关系R改名为S:s(R) 将关系R(B1,B2,Bn)改名 S(A1,A2,An): S(A1,A2,An)(R),126,关系代数查询中的复合运算,例:找出比95001年龄大的学生的学号和姓名、年龄 s.sno,s.sname,s.sage(s(student) s.sage stu.sage
37、 (stu.sno=95001(stu(student),127,关系代数查询中的复合运算,例:找出比95001年龄大的学生的学号和姓名、年龄(与前例的结果有何差异?) s.sno,s.sname,s.sage(stu.sno=95001 and s.sage stu.sage (s(student)(stu(student),128,关系代数外连接,是连接运算的扩展,可以处理缺失信息 保留非匹配元组 外连接 左外连接 右外连接 全外连接,129,关系代数左外连接,取出左侧关系中所有与右侧关系的任一元组都不匹配的元组,用空值填充所有来自右侧关系的属性,再把产生的元组加到自然连接的结果上 例:列
38、出影星的当官情况(是影星,可能不是官) MovieStar MovieExec,130,关系代数右外连接,与左外连接对称 例:列出行政长官的从影情况(是长官,可能不是影星) MovieStar MovieExec,131,关系代数全外连接,左外连接与右外连接的合成 例:列出所有行政长官和所有影星的关系 MovieStar MovieExec,132,4.5 对关系的约束,关系数据模型 数据结构 关系操作 关系的完整性约束 实体完整性 参照完整性 用户定义的完整性,133,用关系代数作为约束语言,用关系代数可以表达约束 R = 0; R 0 R S;R-S = 0,134,参照完整性约束,如果对
39、象(实体)A与对象(实体)B相关,那么B必须存在 如果一个关系R的一个元组有个分量值为v,那么期望v将出现在另一个关系S的某个元组的特定分量中 v(R) v(S),135,参照完整性约束例,Movie关系中,每部电影的制片人必须出现在MovieExec关系中 Movie(title,year,length,incolor,studioName,producerC#) MoiveExec(name,address,cert#,networth) 每个Movie元组的producerC#分量必须出现在MovieExec元组的cert#分量中 producerC#(Movie) cert#(Movi
40、eExec) producerC#(Movie) -cert#(MovieExec)=0,136,参照完整性约束例,影星只能于存在的Movie中出演角色 Movie(title,year,length,incolor,studioName,producerC#) starsIn(movieTitle,movieYear,starName) movieTitle,movieYear(starsIn) title,year(Movie),137,附加约束函数依赖,对关系student,有snosname stu1.sno = stu2.sno AND stu1.snamestu2.sname(st
41、u1stu2) = 0,138,附加约束用户定义的约束,某些属性的取值有特定的要求 genderFAND gender M(MovieStar) = 0,139,4.6 包的关系运算,集合 无重复 顺序无关 包 可重复 顺序无关 商业数据库系统往往是基于包的 采用包可以获得比集合快的运算速度,140,包的关系运算,并、交、差 投影、选择 乘积、连接 不必去除重复元组!,141,作业,练习4.1.1/4.5.1/4.5.4/4.5.5,第五章 数据库语言SQL,143,概述,SQL的发展 1974年,由Boyce和Chamberlin提出 19751979,IBM San Jose Resear
42、ch Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3),144,概述,现状 大部分DBMS产品都支持SQL,成为操作数据库的标准语言 有方言,支持程度不同,145,数据定义(DDL) 定义、删除、修改关系模式(基本表) 定义、删除视图(View) 定义、删除索引(Index) 数据操纵(DML) 数据查询 数据增、删、改 数据控制(DCL) 用户访问权限的授予、收回,概述SQL的功能,146,交互式SQL 一般DBMS都提供联机交互工具 用户可直接键入SQL命令对数据库进行操作 由DB
43、MS来进行解释,概述SQL的形式,147,嵌入式SQL 能将SQL语句嵌入到高级语言(宿主语言) 使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力 一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句,概述SQL的形式,148,数据定义 Create、Drop、Alter 数据操纵 数据查询:Select 数据修改:Insert、Update、Delete 数据控制 Grant、Revoke,概述SQL的动词,149,数据查询是数据库应用的核心功能 基本结构 Select A1, A2, ., AnFrom r1, r2, ., rmWhere P A1, A2,
44、 ., An(p(r1r1.rm),数据查询,150,Select语句的含义,对 From 子句中的各关系,作笛卡儿积() 对 Where 子句中的逻辑表达式进行选择()运算,找出符合条件的元组 根据 Select 子句中的属性列表,对上述结果作投影( )操作,151,Select语句的含义,结果集 查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集,152,Select子句,对应于关系代数的投影()运算,用以列出查询结果集中的期望属性,153,SQL具有包的特性 Select 子句的缺省情况是保留重复元组( ALL ),可用 Distinct 去除重复元组 Select
45、Distinct sdept From Student Select All sdept From Student 去除重复元组:费时 需要临时表的支持,Select子句重复元组,154,Select子句 *与属性列表,星号 * 表示所有属性 星号 * :按关系模式中属性的顺序排列,并具有一定的逻辑数据独立性 显式列出属性名:按用户顺序排列 Select * From Student Select Student.*,cno,grade From Student,SC Where Student.sno = SC.sno,155,Select子句更名,为结果集中的某个属性改名 使结果集更具可读
46、性 Select sno as stu_no,cno as course_no, grade From SC Select sno,sname,2001 - sage as birthday From Student,156,Where 子句,where子句对应与关系代数中的选择() 查询满足指定条件的元组可以通过Where子句来实现 使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来,157,Where 子句运算符,比较:、=、=、not + 确定范围: Between A and B、Not Between A and B 确定集合:IN、NOT IN 字符
47、匹配:LIKE,NOT LIKE 空值:IS NULL、IS NOT NULL 多重条件:AND、OR、NOT,158,Where 子句Like,字符匹配:Like、Not Like 通配符 % 匹配任意字符串 _ 匹配任意一个字符 大小写敏感,159,Where 子句Like,例:列出姓张的学生的学号、姓名。 Select sno,sname From Student Where sname LIKE 张%,160,Where 子句Like,例:列出张姓且单名的学生的学号、姓名。 Select sno,sname From Student Where sname LIKE 张_ _,161,
48、Where 子句转义符 escape,例:列出课程名称中带有_的课号及课名。 Select cno,cname From Course Where cname LIKE %_% escape ,162,From 子句,From子句对应与关系代数中的笛卡儿积() 列出将被扫描的关系(表) 例:列出所有学生的学号、姓名、课号、成绩。 Select Sudent.sno,sname,SC.cno,grade From Student,SC Where Student.sno = SC.sno,163,From 子句元组变量,为 From 子句中的关系定义元组变量 方便关系名的引用 在同一关系的笛卡儿
49、积中进行辨别 例:列出与95001同岁的同学的学号,姓名,年龄 SelectT.sno,T.sname,T.sage FromStudent as T,Student as S WhereS.sno = 95001 AND T.sage = S.sage,164,Order By子句,指定结果集中元组的排列次序 耗时 ASC(缺省)、DESC、未选中的属性 例:列出CS系中的男生的学号、姓名、年龄,并按年龄进行排列(升序) Select sno, sname,sage From Student Where sdept = CS Order By sage ASC,165,SQL的集合操作,SQL的结果集是“包” 多个 Select 语句的结果可以进行集合操作,使结果为“集合”(default) SQL-92支持 参加集合操作的关系(结果集)必须是相容的,166,SQL的集合操作相容,属性个数必须一致 对应的类型必须一致 属性名无关 最终结果集采用第一个结果的属性名 缺省为自动去除重复元组 除非显式说明ALL Order By放在整个语句的最后,167,SQL的集合操作并,