全国计算机等级考试四级教程
——数据库原理(2013版)
2015年4月9日录入
目 录
第1章 数据库原理概述 - 7 -
1.1 数据库技术基本概念 - 7 -
1.1.1 信息、数据与数据处理 - 7 -
1.1.2 数据库、数据字典、数据库管理系统、数据库系统 - 7 -
1.1.3 数据库系统中的人员 - 8 -
1.2 数据管理技术的产生与发展 - 8 -
1.3 数据库方法与文件系统方法 - 9 -
1.3.1 数据库库方法的优势 - 9 -
1.3.2 数据库与文件系统 - 9 -
1.4 数据库应用简史 - 9 -
1.5 数据库技术的研究领域 - 10 -
第2章 数据模型和数据库系统的模式结构 - 10 -
2.1 数据模型和数据模型的组成要素 - 10 -
2.1.1 数据模型的概念 - 10 -
2.1.2 数据模型组成的要素 - 10 -
2.2 数据模型的分类 - 10 -
2.3 概念数据库模型——E-R模型 - 11 -
2.3.1 概念数据模型的产生和基本概念 - 11 -
2.3.2 概念模型的一种表示方法——E-R图 - 11 -
2.4 常用的逻辑数据模型 - 11 -
2.4.1 层次和网状模型 - 11 -
2.4.2 关系模型 - 11 -
2.4.3 面向对象模型 - 12 -
2.4.4 对象-关系数据模型 - 12 -
2.5 数据库系统的模式 - 12 -
2.5.1 数据库系统中模式、实例和数据状态的概念 - 12 -
2.5.2 数据库系统的三级模式结构 - 12 -
2.5.3 数据库的两层映像与数据独立性 - 13 -
第3章 关系数据模型和关系数据库系统 - 13 -
3.1 关系数据库系统概述 - 13 -
3.1.2 关系数据模型 - 13 -
3.2 关系模型的数据结构 - 14 -
3.2.1 关系模型的数据结构和基本术语 - 14 -
3.2.2 关系的形式定义和关系数据库对关系的限定 - 14 -
3.2.3 关系数据库中常用的表示方法 - 14 -
3.3 关系模型的完整性约束 - 15 -
3.3.1 关系模型完整性约束的分类 - 15 -
3.3.2 实体完整性约束 - 15 -
3.3.3 参照完整性约束 - 15 -
3.3.4 用户定义完整性约束 - 15 -
3.3.5 关系模型完整性约束的检查 - 16 -
3.4 关系操作语言——关系代数 - 16 -
3.4.1 关系代数操作的分类 - 16 -
3.4.2 基于传统集合论的关系操作 - 16 -
3.4.3 一元专门关系操作 - 17 -
3.4.4 二元的专门关系操作 - 17 -
3.4.5 扩展关系操作 - 17 -
第4章 关系数据库标准语言SQL(一) - 18 -
4.1 SQL概述 - 18 -
4.1.1 结构化查询语言SQL - 18 -
4.1.2 SQL语言的特点 - 18 -
4.1.3 SQL的数据类型 - 18 -
4.1.4 SQL对关系数据库模 - 19 -
4.1.5 SQL语言的组成和语句类型 - 20 -
4.2 SQL的数据定义 - 20 -
4.2.1 模式的定义和删除 - 21 -
4.2.2 基本表的定义、删除和修改 - 21 -
4.2.3 索引的建立和删除 - 22 -
4.2.4 域的建立和删除 - 22 -
4.3 SQL的数据查询 - 22 -
4.3.1 简单查询 - 22 -
4.3.2 连接查询 - 24 -
4.3.3 嵌套查询 - 24 -
4.3.4 集合查询 - 25 -
4.3.5 SQL中的连接表和外连接 - 25 -
4.4 SQL的数据修改 - 25 -
4.4.1 插入数据 - 25 -
4.4.2 删除数据 - 26 -
4.4.3 更新数据 - 26 -
4.5 SQL的数据控制 - 26 -
4.5.1 权限授予 - 26 -
4.5.2 权限收回 - 27 -
第5章 关系数据库标准语言SQL(二) - 27 -
5.1 SQL视图 - 27 -
5.1.1 视图的概念和定义 - 27 -
5.1.2 视图的查询 - 28 -
5.1.3 视图的修改 - 28 -
5.1.4 视图的作用 - 28 -
5.2 数据库程序设计 - 28 -
5.2.1 数据库程序设计概述 - 28 -
5.2.2 数据库程序设计方法 - 28 -
5.2.3 数据库程序设计中的交互序列 - 28 -
5.3 SQL的存储过程与SQL/PSM - 29 -
5.3.1 SQL存储过程与函数概述 - 29 -
5.3.2 SQL/PSM - 29 -
5.3.3 创建、执行和删除存储过程和函数 - 30 -
5.3.4 存储过程和函数示例 - 30 -
5.4 SQL触发器 - 32 -
5.4.1 触发器概述 - 32 -
5.4.2 创建触发器 - 32 -
5.4.3 触发器的激活 - 32 -
5.4.4 删除触发器 - 33 -
5.4.5 触发器示例 - 33 -
5.5 嵌入式SQL - 33 -
5.5.1 嵌入式SQL概述 - 33 -
5.5.2 使用嵌入式SQL时应解决三个问题 - 34 -
5.5.3 嵌入式SQL程序的组成 - 34 -
5.5.4 在嵌入式SQL中使用游标检索多个元组 - 34 -
5.6 动态SQL - 35 -
5.6.1 动态SQL的概念和作用 - 35 -
5.6.2 动态SQL的语句类型和执行方式 - 35 -
5.7 SQL的其他功能 - 36 -
第6章 关系数据库的规范化理论与数据库设计 - 36 -
6.1 “不好”的关系模式中存在问题 - 36 -
6.2 函数依赖 - 36 -
6.2.1 函数依赖的定义 - 36 -
6.2.2 函数依赖的逻辑蕴涵 - 37 -
6.2.3 码 - 37 -
6.2.4 函数依赖的公理系统 - 37 -
6.3 1NF、2NF、3NF和BCNF - 37 -
6.3.1 1NF及进一步规范化 - 37 -
6.3.2 2NF - 37 -
6.3.3 3NF - 38 -
6.3.4 BCNF - 38 -
6.4 多值依赖和4NF - 38 -
6.5 关系模式的分解 - 39 -
6.5.1 模式分解的等价标准 - 39 -
6.5.2 关于模式分解的几个事实 - 39 -
6.6 数据库设计 - 40 -
6.6.1 设计过程概览 - 40 -
6.6.2 概念结构设计 - 40 -
6.6.3 逻辑结构设计 - 40 -
6.6.4 物理结构设计 - 41 -
6.7 规范化理论在数据库设计中的应用 - 41 -
第7章 数据库系统实现技术 - 41 -
7.1 数据库管理系统概述 - 41 -
7.1.1 数据库管理系统的基本功能 - 41 -
7.1.2 数据库管理系统的主要成分和工作流程 - 42 -
7.2 存储管理 - 42 -
7.2.1 物理存储介质简介 - 42 -
7.2.2 数据存储组织 - 42 -
7.2.3 缓冲区管理 - 42 -
7.2.4 数据字典 - 43 -
7.2.5 索引结构 - 43 -
7.3 查询处理 - 43 -
7.3.1 查询处理概述 - 43 -
7.3.2 查询执行 - 44 -
7.3.3 查询优化 - 44 -
7.4 事务管理 - 44 -
7.4.2 故障恢复 - 45 -
7.4.3 并发控制 - 45 -
第8章 数据库系统的体系结构和安全性 - 46 -
8.1 概述 - 46 -
8.2 分布式数据库系统体系结构 - 46 -
8.2.1 分布式数据库系统的主要特点 - 46 -
8.2.2 分布式数据库的设计技术 - 46 -
8.2.3 分布式数据库中的查询处理 - 47 -
8.2.4 分布式数据库系统的并发控制 - 47 -
8.2.5 分布式恢复 - 47 -
8.3 客户机/服务器数据库体系结构 - 47 -
8.3.1 客户机/服务器计算模式 - 47 -
8.3.2 面向WEB应用的数据库体系结构 - 48 -
8.3.3 面向WEB应用的软件开发 - 48 -
8.4 安全数据库以及数据库的安全性 - 48 -
8.4.1 数据安全性问题概述 - 48 -
8.4.2 基于授予收回权限的自主访问控制 - 49 -
8.4.3 多级安全性的强制访问控制 - 49 -
8.4.4 基于角色访问控制 - 49 -
8.4.5 统计数据库的安全性 - 49 -
8.4.6 加密 - 49 -
8.4.7 可信计算机系统评估标准 - 50 -
第9章 数据库技术的发展 - 50 -
9.1 对象及对象-关系数据库 - 50 -
9.1.1 面向对象数据库基本概念 - 50 -
9.1.2 对象数据库标准、语言和设计 - 50 -
9.1.3 对象-关系数据库模型 - 51 -
9.2 几种应用数据库系统 - 51 -
9.2.1 主动数据库 - 51 -
9.2.2 移动数据库 - 51 -
9.2.3 多媒体数据库 - 51 -
9.3 数据仓库 - 51 -
9.3.1 数据仓库的基本概念 - 51 -
9.3.2 数据仓库的数据模型 - 52 -
9.3.3 数据仓库体系结构 - 52 -
9.3.4 联机分析处理 - 52 -
9.4 数据挖掘 - 52 -
9.4.1 知识发现与数据挖掘 - 52 -
9.4.2 关联分析 - 53 -
9.4.3 分类和聚类 - 53 -
1.信息
现实世界事物的存在方式或运动状态的反映。
自然属性:可感知、可存储、可加工、可传递和可再生。
社会属性:资源
2.数据
符号记录,可以鉴别。
包括:数字、文字、图形、图像、声音及其他特殊符号。数字化后存入计算机。
3.信息与数据的关联
数据是信息符号的表示,载体;
信息是数据的内涵,是数据的语义解释。
4.数据处理的基本环节
原始信息称为源数据。
信息的价值:准确性、及时性、完整性、可靠性。
1.数据库
存放数据的仓库。按一定的数据模型组织、较小的冗余、较高的数据独立和易扩展性、在一定范围内共享。
2.数据字典
数据可分:用户数据和系统数据。
系统数据称为数据字典、系统目录或元数据。
对数据库的描术信息、数据库的存储管理信息、数据库的控制信息、用户管理信息和系统事务管理信息。
3.数据库管理系统。
位于用户与系统之间,定义、操纵、管理、构建和维护数据库的软件。
定义数据库中的数据。
操作:查询、插入、删除、更新。
数据库的建立、运行、维护,保证数据安全性、完整性、多用户并发使用,系统恢复、事务支持。
数据库重组织、性能监视、分析。
4.数据库系统
由用户数据库、操作系统、数据库管理系统、应用开发工具、应用系统、数据库管理员和数据库用户构成。
(1)硬件平台
计算机和网络设备
布置方式:集中方式、客户机/服务器方式、浏览器/服务器方式。
DBMS对硬件资源要求:
大内存、大磁盘、通信能力。
(2)软件平台
①DBMS, ②OS或网络操作系统NOS,③高级语言编译系统,④应用开发工具,⑤数据库应用系统。
(3)人员
数据库管理员、系统分析员、数据库设计人员、应用程序员和最终用户。
1.数据库管理员DBA
①确定数据中信息内容与结构;
②确定数据中存储结构和存取策略(选择索引);
③定义数据的安全性要求和完整性约束;
④监控数据库的使用和运行;
⑤数据库性能改进;
⑥定期对数据库进行重组或重构。
2.系统分析员和数据库设计人员
系统分析员
①应用系统需求分析和规范说明
②系统软件配置与数据库系统概要设计
数据库设计人员
①参加用户需求调查和系统分析
②数据确定、各级模式的设计。
3.应用程序员
4.用户。
数据库管理技术:对数据的分类、组织、编码、存储、检索和维护的技术。
三个阶段:人工管理、文件系统、数据库系统。
|
人工管理 |
文件系统 |
数据库系统 |
|
背 景 |
应用背景 |
科学计算 |
科学计算、数据管理 |
大规模管理 |
硬件背景 |
无直接存取存储设备 |
磁盘、磁鼓 |
大容量磁盘、磁盘列阵 |
|
软件背景 |
没有操作系统 |
有文件系统 |
有数据库管理系统 |
|
特点 |
处理方式 |
批处理 |
联机实时处理、批处理 |
联机实时处理、分布处理、批处理 |
数据的管理者 |
用户(程序员) |
文件系统 |
数据库管理系统 |
|
数据面向的对象 |
某一应用程序 |
某一应用 |
现实世界中的某个部门、企业、组织等 |
|
数据的共享程度 |
无共享、冗余度极大 |
共享性差、冗余度大 |
共享性高、冗余度小 |
|
数据的独立性 |
不独立、完全依赖于程序 |
独立性差 |
具有高度的物理独立性和一定的逻辑独立性 |
|
数据的结构化 |
无结构 |
记录内有结构、整体无结构 |
整体结构化、用数据模型描述 |
|
数据的控制能力 |
应用程序自己控制 |
应用程序自己控制 |
由数据库管理系统控制,提供数据安全性、完整性、并发控制和恢复能力 |
与人工管理和文件系统比较
1.自描述特点
数据库系统不仅包括数据库本身,还包括数据库数据的结构和约束条件(元数据)。
2.数据结构化
数据之间的联系
3.数据共享性高、冗余度小、易扩充
4.由DBMS进行统一数据管理和控制
①安全性;②备份和恢复功能;③定义和确保数据库完整性检查;④提供并发控制功能;⑤数据查询处理与优化;⑥提供多用户界面;
数据库劣势:初期对硬件、软件和培训的高额投资,DBMS为了定义和处理数据而提供的性导致额外开销;为安全性、并发控制、恢复和完整性功能而导致的额外开销。
文件系统应用范围:
应用简单,易于定义并且一般不会发生变化;实用性和专用性要求;不需多个用户访问数据。
1.DBMS管理系统的研究。
2.数据库设计技术和方法的研究
3.数据库理论的研究。
模型——现实世界特征的模拟和抽象。
数据模型——描述数据库数据的结构、定义在结构上的操纵、以及数据约束的一组概念和定义,是数据库系统的核心。
数据模型应满足:
(1)较真实地模拟现实世界;
(2)容易为人们所理解;
(3)便于在计算机上实现。
1.数据结构(静态)。层次、网状、关系。
2.数据操作(动态)。检索和修改(插入、删除、更新)。
3.数据约束。完整性约束、数据安全约束、并发控制约束。
1.概念层模型。形成ER图。
2.逻辑层模型。
3.物理层模型。物理存存储结构,数据存储路径及调整、优化数据库的性能。
目标:提高数据库性能和有效利用存储空间。
用于信息世界的建模,与DBMS无关。
1.信息世界中的基本概念
(1)实休。可区别的事物,如一个供应商、一个学生。
(2)属性。实体的某一特性。
(3)码或键。唯一标识实休的属性的码或键。
(4)域。属性的取值范围。
(5)实体型。相同属性的实体的共同特征或性质。学生(学号,姓名,性别,出生日期)
(6)实体集。同型实休的集合,如全体学生。
2.两个实体之间的联系。
(1)一对一联系。
(2)一对多联系。
(3)多对多联系。
同一个实体集内部也可以存在以上关系,如班干部。
实体型,用矩形表示。
属性,用椭圆形表示。
联系,用棱形表示。
联系本身也是实体,可以有属性。
优点:近人思维,容易理解,与计算机无关,用户易接受。缺点是不能详细说明的数据结构。
有:层次、网状、关系、面向对象、对象-关系数据模型。前三种建立在ER模型上,后两种基于对象的模型。
用二维表格结构表示各类实体及实体间的联系,由多张二维表组成。
二维表中的数据称为关系实例。表头称关系模式。
将面向对象方法与数据库相结合。面向对象模型既是概念模型,又是逻辑模型。
将每个对象的状态(对象属性值的集合)和行为(对象状态上的操作)封装在一起。
对象外部靠消息传递来完成,对数据进行查、增、删。
类继承——单继承,一个类只能有一个超类。
类继承——多重继承,一个类可以有多个超类。
关系模型与面向对象模型的结合。
关系模型优点:事务处理较好适应性强。
面向对象模型优点:功能强,适应面宽,便于用不方便。
整合后优点:
(1)有完整关系模型全部功能,且表示复杂数据结构与抽象数据类型能力。
(2)处理事务应用领域及非事务处理领域应用。
(3)关系表作为基本结构。
(4)风格接近关系模型,易接受。
(5)构建简单,容易实现。
层次和角度不同分。
三级模式结构。
最终用户看:集中式、分布式、客户机/服务器结构、面向WEB应用的三层和n层。
型:结构和属性。静态
值:具体赋值。动态
数据库模式:逻辑结构和特征的描述,型。
实例:模式的具体值。
状态或快照:具体值或实例的当前集合。
空状态,初始状态,
元数据或数据字典:模式结构的描述和约束。
模式演化。
三级模式结构:外模式、模式、内模式。
1.模式(Schema):逻辑结构和特征的描述,中间层。不涉及物理存储和硬件环境,也与高级开发语言无关。
一个数据库一个模式,是基础的数据模型。
例:逻辑结构、数据项、取值范围、数据之间的联系、数据有关的安全性、完整性要求。数据定义语言DDL来操作。
2.外模式:用户模式。
一个数据库可以有多个外模式,一个应用程序只能使用一个外模式。
是保证数据安全的有力措施。
3.内模式:物理模式或存储模式。
一个数据库只有一个内模式。
例:存储方式、索引方式组织、数据压缩、是否加密。
1.外模式/模式映像,简称逻辑独立性
2.模式/外模式映像。
保证数据库独立性:物理独立、逻辑独立性,最终用户程序可以不改变。
关系数据库系统——支持关系数据模型的数据库系统。
应用数学方法来处理数据库中的数据。
由数据结构、关系操作集合、关系完整性约束三大要素组成。
1.关系数据结构
逻辑结构为一张二维表。
2.关系操作集合
选择、投影、连接、除、并、交、差,查询、插入、删除、更新操作两大部分。
特点
(1)集合操作。
(2)高度非过程化。不必建存取路径,不必求助于循环和递归来重复操作。
操作能力表示:代数方式、逻辑方式。
关系语言SQL:数所定义、数据操作、数据控制。
3.关系完整性约束
目标:与现实世界和数据之间正确性、一致性、相容性。
(1)关系:一个关系对应一张二维表。
(2)属性和值域。
属性:列字段
元或度:属性的个数。
值域:属性取值范围。
(3)关系模式。行定义。关系名(属性1,属性2,…,属性n)
(4)元组。二维表中的一行(记录值)
关系:关系模式和元组的集合。
(5)分量。元组中的一个属性值。
(6)码或键。用于区别元组的不同,唯一标识该关系的元组。
(7)超码或超键。关系码中移去某个属性,它仍是关系的码。
每个关系至少有一个默认的超码或超键,即该关系的所有属性的集合。
(8)候选码或候选键。在关系一的个码或键中,不能移去任何一个属性。
(9)主码或主键。指定用来唯一标识该关系的元组。
(10)全码或全键。所有属性的集合是这个关系的主码或主键。
(11)主属性和非主属性。包含在任何一个候选码中的属性称主属性。
(12)外码或外键。某个属性是另外一个关系的主码时,称该属性为这个关系外码或外键。
(13)参照关系与被参照关系。通过外码相关系。
1.关系的形式定义。
定义方法:
(1)集体论。关系是一个度为K的元组的有限集合。
(2)值域的概念来定义。关系是属性值域笛卡儿积的一个子休。
2.关系数据库对关系的限定
(1)每一个属性是不可分解的。
(2)每一个关系仅仅有一种关系模式。
(3)属性必须命名,一个关系模式中,属性名必须不同。
(4)元组顺序无关紧要。
(5)属性顺序无关紧要。
(6)不允许出现候选码工候选键值完全相同的元组。
(1)大写字母表示关系名。Q、R、S、T
(2)小定字母表示关系状态或元组集合。 q、r、s、t
(3)小写字母表示元组。W、u、v
(4)关系名也表示当前元组集合。STUDENT当前关系状态,STUDENT(s#,sname,sex,age,dept)表示关系模式。
(5)下划线的属性表示关系的主码。
(6)用关系名限定属于它的一个属性。R.A,STUDENT . sname
(7)关系中元组表示。
t=<’20060178’,’张明’,‘男’, 21,‘计算机’>
t[s#]=<’20060178’>,
t[sex,age,dept]= <‘男’, 21,‘计算机’>
(8)度为n的关系模式。R(A1,A2,…,An)
(9)关系模式的集合和完整性约束IC的集合表示为S={R1,R2,…,Rm}
(10)数据库状态集合。
分实体完整性约束、参照完整性约束、用户定义完整性约束。
对主码或主键的约束,主属性不能取空。
包含三层意思:
(1)是对关系的约束。
(2)每个关系必须有主码,主码的值唯一,用于标识关系的元组。
(3)主码的属性不能取空值
实体间存在联系
即主码与外码的关系。
(1)外码或者取空值
(2)外码或者等于某个元组的主码。
主要用于对属性取值进行限定,域完整性约束。
域完整性约束:类型、精度、取值范围、是否允许空值、是否有默认值
分类:静态定义和动态定义两种。
1.执行插入时:实体完整性约束——检查参照完整性约束——用户定义完整性约束
2.执行删除检查:参照完整性约束检查,进行外码引用检查。
检查后有如下操作方法:拒绝删除、空值删除、联级删除。
3.执行更新检查。实际分为先执行删除操作,再执行插入操作。
操作对象、操作符、操作结果是操作的三大要素。
(1)基于传统的集合论操作,关系的水平方向。并、交、差、笛卡儿积。
(2)专门的关系操作。一元操作(选择、投影)、二元操作(连接和除)
连接操作又分:θ连接、等值连接、自然连接。
(3)扩充关系操作。广义投影、赋值、外连接、半连接、聚集、外部并等。
关系代数常用到的操作符
操作符 |
含义 |
|
集合操作符 |
∪ |
并 |
- |
差 |
|
∩ |
交 |
|
× |
广义笛卡儿积 |
|
专门的关系操作符 |
σ |
选择 |
π |
投影 |
|
连接 |
||
÷ |
除 |
|
比较操作符 |
> |
大于 |
≥ |
大于等于 |
|
< |
小于 |
|
≤ |
小于等于 |
|
= |
等于 |
|
≠ |
不等于 |
|
逻辑操作符 |
┐ |
非 |
∧ |
与 |
|
∨ |
或 |
t∈R表示t是R的一个元组,t[Ai]表示元组t中相应于属性Ai的一个分量。
并
差
交
笛卡儿积
(1)选择:行分解记作σF(R)。
F表示条件(表达式为XθY, θ表示比较操作符),R表示关系。
例3.5 查询全体学生。
σdept=’信息’(STUDENT)或σ5=’信息’(STUDENT)
(2)投影。列分解,记作πA(R),A表示指定的列,并消除重复元组。
例3.7 查询学生的姓名和所在系
πsname,dept(STUDENT)或π2,5(STUDENT)
1.连接。记作
(1)等值连接。选取笛卡儿积中A、B属性值相等的元组。
(2)自然连接。等值连接的角度,还要取消重复列。
2.除。记作R÷S
扩展关系操作主要有广义投影、赋值、外连接、半连接、聚集和外部并。
1.广义投影。算述表达式上投影。
例3.11 查询关系中学号为20110438的学生年龄增加2岁后的年龄
2.赋值。赋值给新的关系R←S
例3.12 增加新课程
COURSE ←COURSE∪(’C06’,’电子商务’,’陈伟钢’)
例3.13 删除同学信息选课信息
SC←SC-()
3.外连接。不想抛弃自然连接时没有的元组就使用,记作
,右外连接
,左外连接
4.半连接
5.聚集,加G
例:求女同学平均年龄
求选修数据库课程的平均成绩
6. 外部并是为了得到从两个不满足相容性条件的关系得到它们的元组集合而被开发的。
1.综合统一。数据定义语言(DDL)、数据操纵语言(DML)、数据控制语。
2.高度非过程化。只需指出做什么,不必要求怎么做。
3.面向集合的操作方式。一次多记录。
4.灵活的使用方式。自含语言,又是嵌入语言。
5.语言简洁,易学易用,功能强。
SQL语言的动词
SQL功能 |
动词 |
数据查询 |
SELECT |
数据定义 |
CREATE、DROP、ALTER |
数据操纵 |
INSERT、UPDATE、DELETE |
数据控制 |
GRANT、REVOKE |
四类:预定义、构造、用ALTER户定义、大对象数据类型。
SQL数据类型及其说明
分类 |
类型 |
类型名 |
说明 |
预 定 义 数 据 类 型 |
数 值 型 |
INT |
整数类型 |
SMALLINT |
短整数类型 |
||
REAL |
浮点类型 |
||
DOUBLE PRECISION |
双精度浮点数类型 |
||
FLOAT(n) |
浮点类型,精度至少为n位数字 |
||
NUMERIC(p,d) |
定点数类型,共p位数字,小数点后面有d位数字 |
||
字符 串型 |
CHAR(n) |
长度为n的定长字符串类型 |
|
VARCHAE(n) |
最大长度为n的可变长字符串类型 |
||
位串型 |
BIT(n) |
长度为n的二进制位串类型 |
|
BIT VARYING(n) |
最大长度为n的变长二进制位串类型 |
||
时 间 型 |
DATE |
日期类型,形如YYYY-MM-DD |
|
TIME |
时间类型,形如:HH:MM:SS |
||
TIMESTAMP |
时间戳类型(DATE加TIME) |
||
布尔型 |
BOOLEAN |
值可为TRUE、FALSE、UNKNOWN |
|
构造数 据类型 |
由特定保留字和预定义数据类型构造而成,如用REF定义引用类型,用ROW定义行类型,用ARRAY定义聚合数据类型等 |
||
用户定义 数据类型 |
是一个对象类型,由用户按照一定的规则用预定义数据类型组合定义的用户自己专用的数据类型 |
||
大对象 型 |
可存储多达10亿字节的串,LOB又可分BLOB,二进制大对象,用于存储音频,图像。CLOB,字串大对象,用于存储长字串数据 |
SQL支持数据库三级模式结构
元组对应表中的行(Row),属性对应表中的列(Column)
具体说明:
(1)数据库模式——基本表集合。
(2)一个关系——一个基本表
(3)一个表可以若干索引,索引存放在存储文件中
(4)存储文件的逻辑结构构成内模式。
(5)一个SQL表可以是基本,也可以是视图。
(6)一个基本表可以跨一个或多个存储文件,一个存储文件可以放多个基本表,每个存储文件对应一个物理文件。
(7)SQL用户可以是应用程序,也可以是用户。
(8)SQL环境是SQL数据存在和SQL语句执行的语境,环境还包括用户标识和授权。
(9)目录用目录名标识,每个目录可以饮食若干个SQL模式。
(10)SQL模式用模式名标识,模式元素包括:基本表、约束、视图、域、和其他构造。
1.组成
(1)数据定义语言(DDL)
(2)数据操纵语言(DML)
(3)数据控制语言(DCL)
(4)嵌入式和动态SQL规则,用于高级语言。
(5)SQL调用和会话规则。
2.语句类型
(1)SQL定义语句:创建、更改、删除数据库模式及其对象(或元素)。
(2)SQL操纵语句:查询和插入、删除、更新操作SELECT\INSERT\DELETE\UPDATE。
(3)SQL事务控制语句:完成数据库授权、事务管理、以及控制SQL语句集的运行。
GRANT\REVOKE\START TRANSACTION\COMMIT\ROBACK\SAVEPOINT\LOCK\NULOCK\CALL.
(4)SQL连接、会话和诊断语句:建立数据库连接,为SQL会话设置参数,获取诊断等。SET CONNECTION\SET ZONE\SET SESSION AUTHORIZATION\GET DIAGNOSTICS等。
3.SQL的语句基本结构由动词、SQL对象、限定词等组成。
聚簇(Cluster)、授权ID、特权(Privilege)、目录(Catalog)、模式(Schema)、表(Table)、列(Column)、SQL域(Domain)、用户定义类型(User Defined Type)、约束和断言(Constraint and Assertion)、字符集(Character Set)、聚合(Collation)、翻译(Translation)、触发器(Trigger)、模块(Module)、调用例程(SQL-Invoked Routime)
操作对象 |
操作方式 |
||
创建 |
删除 |
修改 |
|
模式 |
CREATE SCHEMA |
DROP SCHEMA |
|
基本表 |
CREATE TABLE |
DROP TABLE |
ALTER TABLE |
视图 |
CREATE VIEW |
DROP VIEW |
|
索引 |
CREATE INDEX |
DROP INDEX |
|
域 |
CREATE DOMAIN |
DROP DOMAIN |
|
过程 |
|
|
|
触发器 |
|
|
|
定义约束 |
|
|
|
定义默认值 |
|
|
|
1.定义模式
create schema <模式名> authorization <用户名>
2.删除模式
drop schema <模式名> [cascade|restrict] --表示连级删除或约束删除
1.创建基本表
create table [模式名.]<表名>(
<列名><数据类型>[列级完整性约束,
....,
<表级完整性约束>,])
[其他参数]
如果涉及多表的完整性约束,必须在表级上定义。
示例:
create table s_sc_c.student(
S# char(8),
sname char(20) not null unique,
sex char(2) not null default '男',
age int,
dept char(20),
primary key(s#))
2.扩充和修改基本表
alter table <表名>
[add <列名> <数据类型> [完整性约束]][add <完整性约束>]
[drop <列名>{cascade|restrict}][drop <完整性约束>]
[modify <列名><数据类型>]
注意:
(1)原来表中是否有数据,新增列一律为允许空值;
(2)被指定为主码的列必须是值非空且唯一。
3.删除基本表
drop table s_sc_c.student [cascade|restrict)
建立一个或多个索引,以提供存取路径,加快查找速度。
1.创建索引
create [unique][cluser] index<索引名>
on <表名>(<列名>[<顺序>[,<列名>[顺序]]...])
唯一索引:指一个索引项只对应唯一的数据。
聚簇索引:指索引项的顺序与表中记录的物理顺序一致的索引。
一个表上只能建一个聚簇索引。
用法:
经常更新的列不宜建聚簇索引。
示例:
create index no_index
on student(S# ASC,sname DESC)
2.删除索引
drop index [on <表名>] <索引名>
域:用户自定义的数据类型,带有域约束的数据类型和默认值一起构成。
create domain <域名> [as] <数据类型> [default<默认值>][check<约束条件>]
删除域
drop domain <域名>
SELECT [ALL|DISTINCT]<目标列>[,<目标列表达式>]…
FROM <基本表名(或视图)>[, <基本表名(或视图)]…
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2>[ASC|DESC]]
即单表查询
1.表中查询若干列(投影操作)
select * from s_sc_c.student
2.查询经计算的值
select sname,2012-age from s_sc_c.student
3.消除取值重复的行
select distinct S# from s_sc_c.sc
4.条件查询(相当于投影操作)
WHERE子句常用的查询条件
查询条件 |
谓词 |
比较 |
=,<,>,≤,≥,!=,!>,!< Not+上述比较符号 |
确定范围 |
BETWEEN AND,NOT BETWEEN AND |
确定集合 |
IN,NOT IN |
字符匹配 |
LIKE,NOT LIKE |
空值 |
IS NULL,IS NOT NULL |
多重条件 |
ADND,OR |
(1)使用BETWEEN查询。
select sname,age from s_sc_c.student
where age between 20 and 22
(2)利用LIKE的查询
select * from s_sc_c.student
where sname like '张%'
LIKE常用参数:
_表示可以匹配任意匹配单个字符。
%表示可任意长度字符串
5.涉及空值NULL的查询
select s#,c# from s_sc_c.sc where grade is null
写法:IS NULL,IS NOT NULL
6.对查询结果排序
select * from s_sc_c.student
order by dept,age desc
7.使用聚集函数
聚合函数有:
COUNT([DISTINCT|ALL]*) 统计元组个数
COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数
SUM([DISTINCT|ALL]<列名>) 计算一列的总合值
AVG([DISTINCT|ALL]<列名>) 平均值
MAX([DISTINCT|ALL]<列名>) 最大值
MIN([DISTINCT|ALL]<列名>) 最小值
DISTINCT为取消列中得复值
select COUNT(*) from s_sc_c.student
8.对查询结果分组
select S# from s_sc_c.sc
group by s# having COUNT(*)>2
多个表中取数据,称为连接查询。
1.等值与非等值连接查询
select student.*,sc.* from student,sc
where student.s#=sc.s# --如果无where则表示笛卡儿积
select sname,age from student,sc
where c#='c01' and student.s#=sc.s#
比较符可用=、>、<、=、>=、<=、!=、BETWEEN
2.自身连接查询
select S1.name,S1.age from student as S1,student as S2
where s1.age>s2.age and s2.sname='郭晓新'
3.复合条件连接
WHERE子句包含由AND连接起来的多个连接条件
由里向外处理
1.带有谓词IN的子查询
多值
select s#,sname,dept from s_sc_c.student s1
where s1.dept in(select dept from s_sc_c.student s2
where s2.name='郭晓新')
2.带比较运算符的子查询
单值
select s#,sname,dept from s_sc_c.student s1
where s1.dept =(select dept from s_sc_c.student s2
where s2.name='郭晓新')
3.带有ANY(SOME)或ALL的子查询
内存多值
select sname,age from s_sc_c.student
where age< ANY(select age from s_sc_c.student
where dept='计算机')
and dept<>'计算机'
4.带[NOT]EXISTS谓词的子查询
EXISTS代表存在量词
由于EXISTS子查询只返回真或假值,一般用目标列都用*表示。
select sname from s_sc_c.student s
where exists (select * from s_sc_c.sc sc
where sc.s#=s.s# and c#='002')
并、交、差
1.并,行合并
select s# from s_sc_c.sc where c#='C01'
union
select s# from s_sc_c.sc where c#='C02'
2.交,公共集部分
select s# from s_sc_c.sc where c#='C01'
intersect
select s# from s_sc_c.sc where c#='C02'
3.差
Except,差集
select s# from s_sc_c.sc where c#='C01'
except
select s# from s_sc_c.sc where c#='C02'
1.SQL中的连接表
自连接,NATURAL
select sname,age
from (student join sc on student.s#=sc.s#)
where c#='C01'
2.SQL中的外连接
LEFT JOIN,保留左边关系所有元组
RIGHT JOIN,保留右边关系所有元组
FULL JOIN,保留左右关系两边所有元组
数据修改语句:插入、删除和更新。
INSERT INTO表名[(字段名[,字段名]…)]
VALUES(常量 [,常量]…)
或子查询
DELETE FROM <表名>
[WHERE<条件表达式>]
可以把更新看作,先删除再插入。
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件表达式>]
数据控制包括:安全性控制、完整性控制、事物控制、并发控制、故障恢复。
GRANT和REVOKE权限控制。
(1)授予角色权限
GRANT <角色> TO {<用户>|PUBLIC}
(2)授予权限
GRANT {<权限>[,<权限>]…}|ALL}
[ON <对象名>]
TO {<用户>|<角色>[,<角色>]…}|PUBLIC}
[WITH GRANT OPTION]
grant select on tab_1 to role_1 with grant option
grant update(grade),select
on table sc to user3
权限列表
对象 |
操作权限 |
COLUMN |
SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES |
VIEW |
SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES |
TABLE |
SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEX,ALL PRIVILEGES |
(1)收回角色的REVOKE命令
REVOKE <角色> FROM <用户>[,<用户>]…
(2)收回特权的REVOKE命令
REVOKE <角色> [,<权限>]…
[ON <对象类型><对象名>]
FROM <用户>[,<用户>]…[CASCADE|RESTRICE]
revoke select on tab_1 from role_1
revoke update(grade)
on table sc from user3
1.视图的概念
视图:提供给用户以多种角度观察数据库中数据的重要机制。
是从一个或多个基本表(或其他视图)中使用SELECT FROM语句导出的表。
本身不存放数。
一切对视图的操作都将转换成基本表。
视图一基本表一样,可以修改(插入、删除、更新)。
2.视图的创建
CREATE VIEW <视图名>[(列名>[,<列名>]…])]
AS <子查询>
[WITH CHECK OPTION]
其中:子查询一般不包括ORDER BY、DISTINCT的SELECT语句。
WITH CHECK OPTION:保证更新、插入、修改的行满足视图定义中的子查询中条件表达式。
create view cs_s1(s#,sname,age)
as
select s#,sname,age from s_sc_c.student where dept='计算机'
视图分类:行列子集视图、带表达式的视图、分组视图、连接视图。
3.视图删除
DROP VIEW <视图名>[CASCADE]
drop view cs_s1
和使用基本一样。
视图物化——视图在第一次查询时物理地建立一个临时表的视图表(实表)。
为防止用户对视图的修改,可加入WITH CHECK OPTION子句,由系统检查视图的可修改性。
可修改性总结:
1.简化结构和复杂操作
2.使用户以多角度、灵活地观察和共享同一数据。
3.视图提高了数据的逻辑独立性。
4.提供安全保护。
从应用程序访问SQL数据库。
(1)将数据命令嵌入到通用程序设计语言中。
EXEC SQL开头标识
(2)使用数据库函数库
(3)设计 一种全新的语言
(1)建立或打开一个与数据库服务器的连接(connection),提供登录账户和口令。
(2)通过查询、修改、或其他数据库语言命令来访问数据库。
(3)终止与关闭与数据库的连接。
1.存储过程的定义
存储过程:为完成特定功能而汇集的一组语句,可供调用。
2.使用存储过程的优点
(1)可多个程序应用,减少重复工作,增强软件的模块。
(2)可减少与客户与服务器之间的数据传输与通信代价。
(3)为数据库用户提供更复杂类型的导出数据,增强视图所提供的建模能力。
(4)处理一些复杂约束。
3.存储过程的分类
(1)系统提供的
(2)用户自定义的
(3)函数与存储过程的不同在于函数必须肯有返回类型(返回值)。
1.条件控制语句
IF <条件> THEN <语句列表>
ELSEIF <条件> THEN <语句列表>
…
ELSEIF <条件> THEN <语句列表>
ELSE <语句列表>
END IF
2.循环控制语句
(1)
WHILE <条件> DO
<语句列表>
END WHILE
(2)
REPEAT
<语句列表>
UNTIL <条件>
END REPEAT
(3)
FOR <循环名> AS <游标名> CURSOR FOR <查询> DO
<语句列表>
END FOR
1.创建存储过程
CREATE PROCEDURE <过程名>([参数列表])
[<局部声明>]
<过程体>
2.创建函数,必须给出返回类型
CREATE FUNCTION <函数名> ([参数列表])
RETURNS <返回类型>
[<局部声明>]
<函数体>
3.执行存储过程和函数
CALL <存储过程或函数名>([参数列表])
4.删除存储过程和函数
DROP PROCEDURE <过程名>
DROP FUNCTION <函数名>
将一笔资金转入另一个账户的存储过程
create database test
use test
create table ACCOUNT(
AccountNum int,
total float)
insert dbo.ACCOUNT values
(1101001,25000.09),
(1101002,0),
(1101003,3000),
(1101004,60000),
(1101005,3000000.01)
go
alter procedure TR(@outaccount int,@amount float,@inaccount int) --声明参数
as
begin
declare @totaldeposit float --声明局部变量
select @totaldeposit=total from dbo.ACCOUNT
where AccountNum=@outaccount
if @totaldeposit is null
begin
print '转出账户无余额!'
return
end
if @totaldeposit<@amount
begin
print '转出账户余额不足!'
return
end
else
begin
--修改转出账户金额
update dbo.ACCOUNT set total=total-@amount
where AccountNum=@outaccount
--修改转入账户金额
update dbo.ACCOUNT set total=total+@amount
where AccountNum=@inaccount
print '转账成功!'
end
end
execute dbo.TR 1101002,1200,1101005
select * from dbo.ACCOUNT
示例:创建描述基于学生人数来衡量系规模的函数
create function dept_sice(@daname varchar(7))
returns varchar(7)
as
begin
declare @no_of_stus int,@size varchar(7)
select @no_of_stus=count(*) from student where dept=@daname
set @size=
case
when @no_of_stus>1000 then 'huge'
when @no_of_stus>500 then 'large'
when @no_of_stus>200 then 'nedium'
else 'nedium'
end
return @size
end
use test
create table student(
sno int,
sname varchar(10),
dept varchar(7))
insert student values
(1,'AAA','计算机'),
(2,'AAA','计算机'),
(3,'AAA','计算机')
…
select dbo.dept_sice('计算机')
触发器的能力:数据监视审计能力,是维护数据库完整性和安全性的简便有效的方法。
是特殊的存储过程,通过事件(插入、删除和更新)来触发执行。
作用:复杂约束,实现数据安全,业务流程和控制流。
CREATE TRIGGER <触发器名>
ON { table | view }
[ WITH
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS { sql_statement}
激活事件:INSERT,UPDATE,DELETE
FOR EACH ROW,行级触发器
FOR EACH STATEMENT,语句级触发器。
一个触发器只能作用于一张表,一张表上可创建多个后触发器。
执行顺序:先执行前触发器,后执行after触发器
后触发器执行顺序为先创建先执行。后建的覆盖新建的,RDBMS不提示。
DROP TRIGGER <触发器名>
…
嵌入式SQL:应用系统使用编程方式来访问和管理数据库中的数据主要方式之一。
分两种:
一是作为独立语言使用
二是嵌入到某种高级语言中。
嵌入有两种处理方式:
一是预编译,
二是修改和扩充主语言使之能处理SQL语句。
例5.18 在表STUDENT和SC中检索某学生(姓名由主语变量givensname给出)的学习成线信息。
…
EXEC SQL INCLUDE SQLCA; /*定义SQL通信区*/
EXEC SQL BEGIN DECLARE SECTION; /*主变量说明开始*/
CHAR givensname(8);
CHAR sno(5),cno(3),sname(8);
INT grade;
EXEC SQL END DECLARE SECTION; /*主变量说明结束*/
Main()
…
EXEC SQL DECLARE C1 CURSOR FOR
SELECT S.s#,sname,c#,grade FROM STUDENT S,SC
WHERE S.s#=SC.s# AND sname=:givensname; /*定义游标*/
EXEC SQL OPEN C1; /*打开游标*/
For(;;)
{
EXEC SQL FETCH C1 INTO :sno,:sname,:cno,:grade;
/*游标推进,存入主变量*/
If(sqlca.sqlcode<>SUCCESS) /*SQLCA中信息反馈*/
Break /*退出循环*/
Printf(“sno:%s,sname:%s,cno:%s,grade:%d”,:sno,:sname,:grade);
/*打印结果集*/
}
EXEC SQL CLOSE C1; /*关闭游标*/
}
…
1.区分SQL与主语句
EXEC SQL来区分。
2.数据库工作单元与程序工作单元之间的通信。
嵌入式SQL可以使用主语句行顺序变量来输入或输出数据(主变量、共享变量)。
SQL在使用主变量时,以:号作为标志。
数据库系统要返回SQL语句执行情况值给应用程序,以便判断处理。SQLCA.SQLCODE
3.协调两种不同的处理方式
SQL操作结果为集合,应用程序为一个元组(记录)。
目前采用游标(cursor)技术协调。
1.程序首部
由说明性语句组成
(1)声明段,声明共享变量。
(2)定义SQL通信区。
SQLCODE返回为0,执行成功。>0没有可用记录,<0出现了错误。
SQLSTATE值为00000表示正常,其他值异常。
(3)其他说明性语句
2.程序体
可执行语句组成
(1)建立与数据库连接
CONNET TO <服务器名> AS <连接名> AUTHORIZATION <用户账户和口令>
(2)转换连接服务器
SET CONNECTION <连接名>
(3)终止连接
DISCONNECT <连接名>
游标可协调SQL与程序处理。
(1)游标定义
EXEC SQL DECLARE <游标名> CURSOR
FOR
(2)打开游标
EXEC SQL OPEN <游标名>
(3)推进游标
EXEC SQL FETCH <游标名> INTO
[<:主变量名>[,<:主变量名>]…]
(4)关闭游标
EXEC SQL CLOSE <游标名>
1.动态SQL的概念
在语句执行过程中临时生成SQL语句
2.动态SQL的作用
提供使用和编程的灵活性
1.动态SQL语句类型
两种
(1)立即执行
EXECUTE IMMEDIATE
可将语句变量设置为
Sql_str=INSERT INTO SC VALUES(’20120101’,’C01’,92)
EXECUTE IMMEDIATE sql_str
(2)先准备后执行
生成执行语句代码——然后执行一次或多次——释放
示例:
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
INT i,col_num,col_type;
CHAR sql_str[100];
EXEC SQL END DECLARE SECTION;
…
strcpy(sql_str,”SELECT * FROM tab_1 WHERE col_1=?”);
EXEC SQL PREPARE sql_stmt FROM:sql_str;
EXEC SQL DECLARE c1 CURSOR FOR sql_stmt;
EXEC SQL ALLOCATE DSCRIPTOR des_1;
…
(3)事务控制语句
BEGINTRANSACTION,事务开始
COMMIT,事务提交
ROLLBACK,事务回滚
规范化理论——关系模式中各属性之间的依赖关系及其对关系模式性能的影响。
目标:减少冗余和信息完整表示。
问题:
(1)数据冗余
(2)更新异常
(3)插入异常
(4)删除异常
消防方法:利用数据间的依赖
设R(A1,A2,…,An)是一个关系模式,X和Y是{A1,A2,…,An}的子集,若关系r是关系模式R的可能取值,则r中不可能有两个元组在X中的属性值相等,而在Y中的属性值不等,则称X函数决定Y,或Y函数依赖于X,记X→Y。
即两个子集,一个子集可能有重值,一个子集没有重值,没有重值的决定重值。
注意:
(1)不能根据关系模式的某一状况判断函数依赖成立。
(2)只能根据语义确定函数依赖关系。如没有重名,name→birthdate
如果X→Y,X的任何一个真子集X’,都存在Y不函数依赖于X’,则称Y对X完全函数依赖。
如果X→Y,但不完全依赖,则称部分依赖。
关系模式可表示成:R,U是一组属性,F是依赖。
设R是一个关系模式,X,Y是U中属性组,若在R的任何一个满足F中函数依赖的关系r上,都有函数依赖X→Y成立,则称F逻辑蕴含X→Y。
也就是传递依赖
唯一确定记录的关键字,当候选码多于一个时,选定其中一个作为主码
好的关系模式应具备的性质,关系模式的规范化。
Armstrong三条推理规则:
自反律:
增广律:
传递律:
得出三个推理规则:
合并规则:
伪传递规则:
分解规则:
满足条件:每个元组的分量必须是不可分的数据项
满足条件:
(1)关系模式满足1NF。
(2)非主码属性完全函数依赖于码。简而言之,第二范式就是主属性只依赖于主关键字
满足条件:
(1)关系模式满足2NF
(2)非主属性都不传递依赖于码。简而言之,属性不依赖于其它非主属性
一个满足BCNF的关系模式有:
(1)所有非主属性对每一个码都是完全函数依赖;
(2)所有的主属性对每一个不包含它的码,也是完全函数依赖;
(3)没有任何属性完全函数依赖于非码的任何一组属性。
由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。但是若R∈3NF,则R未必属于BCNF。
例如:关系模式STC(S,T,C)中,S表示学生,T表示教师,C表示课程。每一个教师只教一门课。每门课有若干个教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下函数依赖:
T->C;(S,C)->T;(S,T)->C;
(由T->C;根据增广律可推出(S,T)->(S,C),又因(S,C)->T和T->C,由传递律可得(S,T)->C)
(S,C),(S,T)都是候选码。
STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STC不是BCNF关系,因为T是决定因素而T不包含码。
学习函数的概念前,先引入的概念是映射,一对一映射的关系就被称为函数。简单的例子f(x, y, z)= x2+4y+z
对于任何一确定的(x,y,z),都有一个确定的f(x,y,z)与之对应。这种概念很容易推广到关系数据库模式上,R(U),U={X,Y,Z, K},对于任何一个元组,只要(X,Y,Z)确定了,就能确定整个元组,也就是存在K = f(X,Y,Z)的关系,只不过这里的f不能用公式表达,而只能是语义上的含义。
再到后来,我们接触了类似y2=x的方程,也就是
f(x,y) = +-sqrt(x)
显然,此时对于一个确定的x值,f(x)可能有两个值与之对应,从严格的“函数”定义出发,这不能算是函数。但是为了统一概念,被称作“多值函数”。需要注意的是这里虽然x不能完全确定f(x,y)的值,但是能确定f(x,y)的取值范围(所有可能的值的组)。
关系模式中的多值依赖也从概念上与此非常类似,给定元组中的一些属性,可确定另外的属性可能的取值,也就是说,给定的属性值能确定几个元组,而不是唯一的元组。
还是上面的多值函数,可见f(x,y)的值仅与x有关 ,而与y无关。这在关系模式上就叫做平凡多值依赖。平凡多值依赖是4NF中可以存在的,而非平凡且非函数多值依赖不能在4NF中存在。
多值依赖的定义:
设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。
可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。
如下表:
课程C 教师T 参考书B
数学 邓军 数学分析
数学 邓军 高等代数
数学 邓军 微分方程
表中,U = C+T+B,(C,T)确定一组B,但是这组B其实与T无关,仅由C确定,所以(C,T)->->B。又因为T不是空集,所以(C,T)->->B为非平凡多值依赖。
要想消除多只依赖,可以分解为:(C,T), (C,B)
对于R中的每个非平凡多值依赖X->->Y(Y不属于X),X都含有候选码,则R属于4NF。
分析:对于每一个非平凡多值依赖X->->Y,X若含有候选码,也就是X->Y,所以4NF所允许的非平凡多值依赖是函数依赖。
一事一地的设计原则
标准:
(1)无损连接性
(2)要求分解保持函数依赖。
1.分解具有无损连接性
通过自然连接运算,是否会产生一些原来r中没有的组,从这个意义上讲丢失信息。
2.分解保持函数依赖
(1)分解有无损连接怀和分解保持函数依赖是两个相互独立的标准。
(2)若要求分解具有无损连接性,那么模式分解一定可以达到BCNF。
(3)若分解保持函数的依赖,那么模式分解可以达到3NF,但不一定能达到BCNF
(4)若要求分解具有既具有无损连接,又操持函数的依赖,则模式分解可以达到3NF,但不一定能达到4NF。
数据库设计6阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
设计要求:
(1)结构特性设计。满足应用需求,尽可能减少冗余,实现数据共享。
(2)行为特性设计。确定数据库应用的行为和动作。
与传统的软件工作的区别在于:软件工作强调行为特性设计,数据库更强调数据结构特性设计,并与行为特性的设计结合起来。
任务:反映企业信息需求的数据库概念结构,即概念模型。
特点:
(1)丰富的语义表达能力。
(2)易于理解和交流
(3)易于变动
(4)易于各种数据模型转换。
设计策略:
(1)自顶向下
(2)自底向上
(3)由里向外
(4)混合策略
E-R设计步骤:
(1)设计局部E-R模型
(2)设计全局E-R模型。解决属性冲突、结构冲突、命名冲突。
(3)全局E-R模型的优化。
从概念模型导出DBMS可处理的数据逻辑结构(数据库的模式和外模式),对功能、性能、完整性和一致性约束以及数据库可扩充性等方面满足客户提出的要求。
E-R模型向关系模式转换的原则是:
1.一个实体类型转换成一个关系模式
2.实体联联转换
(1)1:1联系,可转换成独立的关系模式,也可以和任意端实体合并。
(2)1:n联系,可以转换成一个独立的关系模式,也可以与N端所对应的关系模式合并。
(3)m:n联系,转换为一个关系模式。
(4)三个或三个以上多元联系实体转换为一个关系模式。
利用DBMS提供的方法技术,设计高效、可实现的物理数据数据结构。
内容包括:
(1)存储记录的格式设计。数据压缩和代码化,记录“水平、垂直分割”。减少访问的物理代价提高数据库性能。
(2)存储方法设计
顺序存放,平均查询资料为关系记录个数的1/2。
散列存放,查询次数由散列算法决定。
聚簇存放,经常用的放在一起,减少物理I/O。
(3)存方法设计
建立索引提高查询效率。对数据量大,需作频繁查询的表建立索引。索引建立在经常作查询条件的属性或属性组上,或经常做连接的属性或属性组上。
可识别存在函数依赖关系的实体。
检测E-R模型设计。
保持高的规范化程度可以避免数据冗余,但降低规范化程序追求高查询性能。
在操作系统支持下,对数据库进行管理和控制
(1)数据定义功能。用DDL进行数据库的结构进行描述(包括外模式、模式、内模式),数据完整性定义,安全保密的定义,索引定义,视图的定义。
(2)数据操纵。用DML语言或查询数据,检索、插入、更新、删除操作。
(3)数据在存储和管理功能。
(4)事务管理功能。
(5)其他功能。与其他软件通信、数据转换、异构等。
(1)存储管理器。数据存储和访问,索引的建立和管理、内存中的缓冲区管理等。
(2)查询处理器。数据查询和数据修改。DDL编译、数据安全性定义和安全性控制、完整性定义、查询编译、查询优化、查询执行。
(3)事务管理器。事务管理、并发控制、日志管理和故障恢复,使之具有ACID特性。
分类:
(1)高速缓冲存储器。最快最贵,由硬件系统管理
(2)主存储器。CPU直接处理的数据存储介质。内存、几个G,电源或系统出崩溃,内容丢失。
(3)第二级存储器,比主存慢,但大。如磁盘、U盘。
(4)第三级存储器,如磁带、光盘,用于归档。
磁盘存储器介绍:
圆盘两面有磁性物质上——划分磁道——上划分扇区
例:每个磁盘5—10个盘片,10—20个盘面,每个面50000—100000个磁道,每个磁首数百个扇区,每个扇区512—4096个字节。
柱面。
通过反转磁性物质磁化的方向,将信息磁化存储到盘面上。
磁盘控制器。
磁盘访问时间。
磁盘读入内存。
变长记录文件
定长记录文件
分槽页结构。
(1)块头。记录数目,块中空闲空间的末尾处,包含记录位置和大小的条目组成的数组。
减少磁盘访问次数的一种方法是在内存保留尽可能多的磁盘块。
数据字典:数据库的描述信息,保证系统正常运行。
内容包括:
(1)关系的基本信息
(2)用户信息
(3)索引的描述
(4)统计信息
对数据快带定位的附加数据结构称为索引
查找码,搜索码。
基本索引类型:顺序索引、散列索引。
1.顺序索引
和书的索引一样,码——记录的顺序一致。
B树是一种多路查找技术。
2.散列索引
利用散列函数来解释记录的存储地址。
3.顺序索引与散列索引对查询的支持
(1)点查询:顺序索引和散列索引能有效支持。
(2)范围查询:顺序索引能有效支持范围查询,散列索引不能有效地支持范围查询。
主要模块是查询编译器和查询执行引擎。
在磁盘上的存取数据的代价是最主要的代价。CPU速度的提升比磁盘速度的提升要快得多。
SQL查询的基本步骤
SQL查询→分析查询→选择逻辑查询计划→选择物理查询计划→执行计划
语法分析 逻辑查询计划树 物理查询计划树
将语句翻译成代数式:
Select sno,entrance-grade from student where entrance-grade<500
查询优化器——查询计划,查询执行引擎——执行查询并输出结果。
查询执行的最基本动作是关系代数运算的执行。
方法:全表扫描、索引扫描
1.逻辑查询计划选择
(1)合取选择运运算可以分解为单个选择运算的顺序
(2)选择运算满足交换率
(3)一系列的投影运算,只有最后一个是必须的,其余可以省略
(4)选择操作可以笛卡儿积相结合
(5)自然连接运算满足交换律
(6)自然连接运算满足结合律
(7)选择运算对自然连接运算具有分配律
(8)投影运算对自然连接运算具有分配律
(9)集合与并满足交换律
(10)集合的并与交满足结合律
(11)选择运算对并、交、差运算具有分配律
(12)投影运算对并运算具有分配律
启发式规则进行优化:
(1)尽可能深的将选择推入表达式树中。
(2)尽可能深的将投影推到树中,可以加入新的投影
(3)得复消除时可以消云,或移到树中更方全的位置
(4)某些选择可以与下面的笛卡儿积相结合以便把运算对转换成连接。
连接次序对效率影响也很大
2.物理查询计划的选择
事务:构成单一逻辑工作单元的操作集合。
事物特性:
(1)原子性(A),要么全做,要么不做。即不可分割
(2)一致性(C),事物隔离执行,保证数数据库的一致性。
(3)隔离性(I),串行地执行事务,即要排队执行。
(4)持久性(D),数据的改变要永久的。
1.故障类型和系统对策
(1)事务故障。
原因:逻辑错误(如溢出),系统错误(如死死锁)
解决办法:UNDO
(2)系统故障
系统停止运行,主存储器内容丢失。
解决办法:REDO
(3)磁盘故障
危害最大,永久性破坏数据
解决办法:备份恢复
2.基于日志的恢复
记录更新活动的结构称为日志。
日志结构:
Start ——事务开始
修改前后值
Commit ——事务提交
Abort ——事物终止
有Commit记录,则REDO
如果没有Commit记录,则UNDO
1.事物并发控制出现的问题
好处:处理器和磁盘空闲时间较少,利用率提高,缩短事务完成时间。
坏处:(1)丢失更新,(2)对未提交更新的依赖。(3)不一致的分析。
2.并发事务调度
由DBMS完成。
3.可串行化
是多个事务并发执行的正确准则
4.可恢复性
5.基于封锁的并发控制
(1)共享锁。只读
(2)排它锁。即可读,又可写。
共享锁与共享锁相容,与排他锁不容。
两段封锁协议:一事务要访问必须加锁,必须等其他事务结束排他锁。
死锁:两个或更多的事务处理待待状态,每个事务都等其他事务释放锁才可继续执行。
造成原因,事务之间对表的相互交叉使用。
解决办法:检测等待图,事物回滚。
集中式系统——客户/服务器体系结构——WEB应用体系结构
分散化和处理的自治性。特点:
(1)每个节点都是一个独立的数据库系统节点
(2)节点通过网络协同工作,用户感觉如同使用自己节点上的数据。
(1)不同透明层次的分布式数据管理
分布透明性或网络透明性:用户从网络操作细节中解脱出来,分位置透明性和命名透明性。
复制透明性:数据副本存储多网络,用户不知副本的存在。
分片透明性:水平或垂直分割数据,用户不必知道分片和分段的存在。
(2)增加了可靠性和可用性。
可靠性:连续运行没有故障的可能,可用性:连续可用的可能性。
(3)提高了性能
(4)更容易扩充
缺点:系统复杂。
1.数据分片
(1)水平分片
(2)垂直分片
(3)导出分片
(4)混合分片
分片的原则:
(1)完备性原则。数据必须属于任何一个片段。
(2)可重构原则。
(3)不相交原则。数据分片之间不重叠。
2.数据复制和分配
复制会增强数据可用性,可改善检索性能。
但会急剧下降更新操作效率。
分面式数据库中查询代价是网络传输数据的代价。
代价最高的操作方式是连接和并操作。
通常用半连接操作,减少查询数据传输。
与集中式相比,问题:
(1)处理数据项的多个副本
(2)分布式提交
(3)分布式死锁
(3)其他。单个站点故障、通信链路故障。
1.基于识别数据项副本的分布式并发控制
识别副本:为数据项指定的一个特定的副本。
(1)主站技术。单位个主站点指派为数据项的协调者站点。存加锁和解锁请求,释放锁之前更新数据项的所有副本。
(2)主副本技术。
各站点间锁协调,只负责该站点上的数据项锁任务。
2.基于投票方法的分布式并发控制
每个副本维护他自己的锁,如果请求加锁的事物被大多数副本授于锁,那么它将持有锁,并告之所有副本已经被授予了锁,如果在稳定周期没有接到投票,那么放弃该锁。
站点X向站点Y发消息,期待Y响应,没收到消息:
(1)通信故障
(2)Y站点失效
(3)Y站点已经运行并且发出了响应,但响应没有传输到站点X
数据库服务器接收客户机发出的数据请求,并将结果返回客户机。
查询服务器+事务服务器=SQL服务器
与DBMS的连接方法:
(1)开放数据库互联ODBC标准。
(2)面向Java程序语言标准,JDBC。
客户机——应服服务器——数据库服务器
表示层——业务逻辑层——数据库服务层
1.以WEB服务器为中心
客户机 HTTP协议 WEB 服务器 数据库访问中间件 数据库
—————— ——————————
浏览器 服务器 扩展程序 服务器
2.以应用服务为中心
四部分:客户机浏览器,WEB服务器,应用服务器,数据库服务器。
(1)基于构件方式
(2)基于脚本方式
3.以数据库服务器为中心
数据库服务器包含了HTTP服务器。
1.数据安全性的类型和一般措施
安全机制分两类:
(1)自主安全机制。用户授权方式。
(2)强制安全机制。将数据分安全级别,再将角色分安全级别,制定对应访问措施。
措施有:访问控制(设置密码)、推理控制(禁止访问汇总数据)、流控制(权限再授流动)和加密(数据密钥加密)。
2.数据库的安全性和数据库管理员
数据库管理员(DBA)权限:
(1)创建账户
(2)权限授予
(3)权限收回
(4)安全级别指定(用户账户)
3.访问保护、用户账户和数据审计。
1.自主权限的类型
(1)账户级。CREATE SCHEMA,CREATE TABLE,CERATE VIEW,ALTER,DROP,MODIFY,SELECT。
(2)关系表级。选择、修改、参照。
2.权限的授予和收回
(1)权限授予。GRANT
(2)权限收回。REVOKE
(3)GRANG OPTION传播权限
典型安全级别:绝密(TS)、机密(S)、秘密(C)、无分类(U)
分别将主体(用户、账户和程序)和客体(关系、元、组、列、视图和操作)指派到一个安全级别。
(1)除非主体≥客体,主体不能读取客体。主体不能读安全性比它高的客体。
(2)主体≤客体,主体不能写客体。禁止主体写安全性级别比它低的客体,目的用于安全性流动。
特点:
(1)可以精确的安全性分类
(2)防止安全性(权限)流动。
把角色指派级用户。
CREATE ROLE创建角色
GRANT和REVIKE角色授予和收回权限。
禁止对个数据的检索,禁止检索属性值的查询,只允许使用统计性聚集函数(COUNT、SUM、MIN、MAX、AVERAGE)。
加入噪声技术。
不安全环境中维护数据安全性的一种方法。
1.数据加密标准和高级加密标准
2.公钥加密。
使用两个密钥:公钥和私钥。
发送者使用公钥进行加密消息,接收者使用私钥进行解密
3.数字签名
签名依赖于消息和该签名者的一个唯一秘密数。
D——A
A为最高等级。
传统关系型数据库系统有以下共同特征:
(1)结构统一。大量结构相似的数据项,相同字节。
(2)面向记录。
(3)数据项小。
(4)原子字段。字段短、定长、内部无结构。
不能满足需求,因此提出面向对象数据库。
特征:让设计者定义更复杂对象的结构,还能让设计者定义可以用于这些对象的操作。
面向对象由两个部分组成:状态(值)和行为(操作)。
一些概念
(1)对象标识:是唯一的、由系统生成对象标识符,对外部用户来说不可见,且永远不变性的机制。
(2)对象结构:对象具有任意复杂度的对象结构,通过类型构造器,由别的对象构造得到。
(3)封装:一种信息隐藏技术。
(4)类型层次和继承:
(5)复杂对象
(6)操作符重载。
指定主动规则的一些附加功能,因某些事件而被自动触发。
事件——条件——动作模型。
不激活规则:不由触发事件触发的规则。
动作执行考虑:立即考虑、延迟考虑、分离考虑。
1.环境特征
高通信等待时间、不连续的无线连接性、有限的电池寿命、客户机位置变化
解决办法:广播数据
2.移动数据库的管理
允许移动单元处理其自身的事物。
安全:对移动终端进行认证,对无线通信进行加密,对下载数据副本加密存储。
查询和存储不同类型的多媒体信息。图像、视频、音频、文档。
识别多模体数据是困难的。
对数据分类:操作型处理和分析型处理。
分析型用于管理人员的决策分析。
1.数据仓库的定义
面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管事中的决策。
数据集市:更小、更集中的数据仓库。
数据仓库的OLAP都基于多维数据模型
(1)度量属性。决策都关心的有实际意义的数量,如商品销售量、库存量。
(2)维属性。人们观察数据的特定角度。
(3)维的层次。人们观察数据的特定角度还可以存在细节程度的多个描述方面
(4)多维数据。能够模式化为维属性的试题属性的数据。
数据立方体(超立方体)。
数据仓库系统由:数据仓库、仓库管理和分析工具三部分组成。
信息需求——数据抽取——数据清理——数据转换。
元数据是核心数据。
分析工具集分两类:
(1)查询工具
(2)挖掘工具,
1.OLAP的基本功能
(1)切片和切块
(2)钻取(向上或向上)
(3)旋转
2.广义OLAP功能
(1)基本代理操作
示警、时间报告、异常报告。
(2)计算能力
(3)模型能力
是知识发现是数据挖挖掘的核心工作。
1.知识发现(KDD)过程
数据准备——数据挖掘及结果——解释和评估
发现新的信息类型:关联规则、序列模式、分类树等
挖掘质量的好坏:技术、数据质量和数量。
2.数据挖掘的目标
预测、识别、分类、优化
定义1:形如A→B的蕴涵式。
定义2:规则的支持度和可信度。
支持度s(A→B)=P(A∪B)=,D表示事务个数
可信度c(A→B)=P(A|B)=,A表示包含项集A的事务个数
分类:是学习一种模型的过程,有监督的学习,通过一系列的度量、观察来建立数据中的类别。
聚类:把目标数据分组,使其尽量相似。
例1
学生(学号,姓名,性别,
专业号,年龄)
(学号,姓名)是超键,而
不是候选键,因为在此中姓
名是一个多余的属性。
学号是候选键,同时也是主
键。
例2
请指出下面两个关系模式主
键及外键。
学生(学号,姓名,性别,
专业号,年龄)
专业(专业号,专业名)
学号是学生模式的主键。
专业号是专业模式的主键。
专业号是学生关系的外键。
外键的应用:用于学生、专
业模式的自然连接,连接条
件可用专业号。
主属性:候选码中的所有属
性称为主属性
例3:
请指出关系模式:成绩(学
号,姓名,课程号,成绩)
的主属性和非主属性,注学
生无同名。
候选键:(学号,课程号),
(姓名,课程号)。
主属性:学号,姓名,课程
号。非主属性:成绩。
如何区分超键,候选键和主
键?
找出共同点:
从功能上来说作用是一样的,用于标识关系模式中唯一元组。
超键中可能有无关的属性,而主键和候选键中属性都是必要的属性。
主键和候选键的区别在主键是被数据库设计者选中的,是在朝的,而候选键是在野的。
例:美国大选,A、B、C三个候选人,如果C当选,那么他是总统,而不再称其候选人。
函数依赖:U{SNO,SNAME,AGE,DEPT}
R(U)为Student(SNO,SNAME,AGE,DEPT)
SNO |
SNAME |
AGE |
DEPT |
N00001 |
张三 |
22 |
计算机 |
N00002 |
李四 |
20 |
计算机 |
N00003 |
王五 |
21 |
中文 |
N00004 |
赵六 |
21 |
英语 |
X={SNO}
Y={AGE}
Z={DEPT}
若r1为SNO和AGE之间的联系,则有r1元组,
SNO(x) |
AGE(y) |
N00001 |
22 |
N00002 |
20 |
N00003 |
21 |
N00004 |
21 |
X中没有重复元素,面y中有重复元组,因此x→y成立。
若r2为AGE和AGE之间的联系,则有r1元组,
无损联接。
无损,可以通过投影、选择操作进行原关系模式的不原。
例1:
有关系模式:成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号→姓名,课程号→课程名,(学号,课程号)→分数。
若将其分解为:
成绩(学号,课程号,分数);
学生(学号,姓名);
课程(课程号,课程名)。这样分解,是无损分解吗?
由于有:学号→姓名,所以:
成绩(学号,课程号,分数,姓名)。
由于有:课程号→课程名,所以
成绩(学号,课程号,分数,姓名,课程名)
例2:设R=ABCDE,R1=AD,R2=BC,R3=BE,R4=CDE,R5=AE。
如果函数依赖是:A→C,B→C,C→D,DE→C,CE→A,判断R分解成
{R1,R2,R3,R4,R5},是否无损连接。
解:初始表如下:
|
A |
B |
C |
D |
E |
AD |
a1 |
b12 |
b13 |
a4 |
b15 |
BC |
b21 |
a2 |
a3 |
b24 |
b25 |
BE |
b31 |
a2 |
b33 |
b34 |
a5 |
CDE |
b41 |
b42 |
a3 |
a4 |
a5 |
AE |
a1 |
b52 |
b53 |
b54 |
a5 |
AD代表R1……
标题头,ABCDE分别代表未分解关系模式的属性。
如果R1关系模式中包含了属性A,那么对应的空格处填写
a,其中下标1代表列数。
其余不包含的字段一律用b填充,下标由行号和列号组合而成,例b12,关系模式R1中没有B属性,因此填充b,它的位置属于第1行,第2列,因此填写b12
根据A→C,对上表进行处理,由于两行有a,将b13、b53,改成同一符号b13,即统一更改下标为13,更改的原则是下标改为最小的数。
|
A |
B |
C |
D |
E |
AD |
a1 |
b12 |
b13 |
a4 |
b15 |
BC |
b21 |
a2 |
a3 |
b24 |
b25 |
BE |
b31 |
a2 |
b33 |
b34 |
a5 |
CDE |
b41 |
b42 |
a3 |
a4 |
a5 |
AE |
a1 |
b52 |
b13 |
b54 |
a5 |
依据B→C,B列中有两行B是相等的,然而将C列不等,可以用C列的a3填充b33,
|
A |
B |
C |
D |
E |
AD |
a1 |
b12 |
b13 |
a4 |
b15 |
BC |
b21 |
a2 |
a3 |
b24 |
b25 |
BE |
b31 |
a2 |
a3 |
b34 |
a5 |
CDE |
b41 |
b42 |
a3 |
a4 |
a5 |
AE |
a1 |
b52 |
b13 |
b54 |
a5 |
又由于C→D,从表中找到相同的C,根据D的值进行填充
|
A |
B |
C |
D |
E |
AD |
a1 |
b12 |
b13 |
a4 |
b15 |
BC |
b21 |
a2 |
a3 |
a4 |
b25 |
BE |
b31 |
a2 |
a3 |
a4 |
a5 |
CDE |
b41 |
b42 |
a3 |
a4 |
a5 |
AE |
a1 |
b52 |
b13 |
a4 |
a5 |
又由于DE→C,从列中找到相同的DE列,根据C列,值填充C值。无变化
|
A |
B |
C |
D |
E |
AD |
a1 |
b12 |
b13 |
a4 |
b15 |
BC |
b21 |
a2 |
a3 |
a4 |
b25 |
BE |
b31 |
a2 |
a3 |
a4 |
a5 |
CDE |
b41 |
b42 |
a3 |
a4 |
a5 |
AE |
a1 |
b52 |
a3 |
a4 |
a5 |
又根据CE→A,修改如下
|
A |
B |
C |
D |
E |
AD |
a1 |
b12 |
b13 |
a4 |
b15 |
BC |
b21 |
a2 |
a3 |
a4 |
b25 |
BE |
a1 |
a2 |
a3 |
a4 |
a5 |
CDE |
a1 |
b42 |
a3 |
a4 |
a5 |
AE |
a1 |
b52 |
a3 |
a4 |
a5 |
由于表D列可全部调整为a4,因此分解是无损分解。
表格中填充的规则:
如果有一个函数依赖x确定y,要在表中寻找x列相同的行,把相同行全部找出来,确定这些行以后。
第二种方法R1∩R2→(R1-R2)或R1∩R2→(R2- R1)
则为无损连接。
例R=ABC,F={A→B},则分解为{R1(AB),R2(AC)}、{R1(AB)、R3(BC)}是不是无损连接。
1. R1∩R2:AB∩AC=A,AB-AC=B,满足A→B,因此是无损连接。
2. R1∩R3:AB∩BC=B,AB-BC=A, BC-AB=C,F中不存在B→A和B→C,因此不是无损连接。
可以使用表格进行验证:
1.
|
A |
B |
C |
AB |
a1 |
a2 |
b13 |
AC |
a1 |
b22 |
a3 |
由于A→B
|
A |
B |
C |
AB |
a1 |
a2 |
b13 |
AC |
a1 |
a2 |
a3 |
因此是无损连接。
2.
|
A |
B |
C |
AB |
a1 |
a2 |
b13 |
BC |
b21 |
a2 |
a3 |
由A→B,仍是原表
|
A |
B |
C |
AB |
a1 |
a2 |
b13 |
BC |
b21 |
a2 |
a3 |
因此不具无损连接。
BCNF
在3NF的基础上,X中不包含码。
例CSZ(CITY,ST,ZIP)
F={(CITY,ST)→ZIP,ZIP→CITY}
ZIP→CITY决定了CITY不是码。
关于候选关键字的求解理论与算法
前奏:对于给定的关系R(A1,A2,……,An)和其上的函数依赖集F,可将其属性分为如下四类:
L类:仅出现在F的函数依赖左侧的属性
R类:仅出现在F的函数依赖右侧的属性
N类:在F的函数依赖左右两侧均未出现的属性
LR类:在F的函数依赖左右两侧均出现的属性
快速求解候选关键字的一个充分条件(无独立回路时)
【定理一】:对于给定的关系模式R(U,F),若X(X属于U)是L类属性,
则X必为R的任一候选码的成员(组成部分)。
【例-1】 设有关系模式R(A,B,C,D),其函数依赖集F={D→B,B→D,AD→B,AC→D},求R的所有候选关键字。
【解】:显然A、C为L属性,据定理一知,AC必须为R的候选码的成员。
又 ∵(AC)+F =ABCD= U
∴AC是R的唯一候选码。
【推论一】:已知R(U,F),若X(X属于U)是L属性,且X+F包含了R的全部属性U,则X必为R的唯一候选码。
【定理二】:给定R(U,F),若X(X属于U)是R类属性,则X不在任何候选码中。
【定理三】:给定R(U,F),若X是R的N类属性,则X必包含在R的任一候选码中。
【例-2】已知R(U,F),其中
U={A,B,C,D,E,P}
F={A→D,E→D,D→B,BC→D,DC→A}
求R的所有候选码。
【解】:显见:
L类属性:C,E——故CE必在R的候选码中
N类属性:P——故P也必在R的候选码中
又∵(CEP)+F =ABCDEP=U
∴CEP是R的唯一候选码。
【推论二】:已知R(U,F),若X是R的N类和L类属性组成的属性集,且X+F包含了R的全部属性U,则X是R的唯一候选码。
2左边为单属性的函数依赖集的候选关键字成员的图论判定方法
【定义一】:一个函数依赖图G是一个有序二元组(U,F),记作G=(U,F),简称为依赖图。其中:
(1)U=(A1,A2,……,An)是一个非空有限集,Ai(i=1,2, ……n)是G
的结点,它们表示对应关系模式R(A1,A2,……,An)的属性,U为属性全集。
(1)F是G的边集,其元素是G的一条有向边,每条边(Ai,Aj)表示一
个函数依赖Ai→Aj,则F是R的单属性最小依赖集。参加【例-3】。
【定义二】:在一个函数依赖图G中,有下列术语:
(1)引入/出线:若Ai到Aj是连接的,则边(Ai,Aj)是Ai的引出线,同
时也是Aj的引入线。
(2)原始点:只有引出线而无引入线的点称之,它表示L类属性。
(3)终结点:只有引入线而无引出线的点称之,它表示R类属性。
(4)途中点:既有引入线又有引出线的点称之,它表示RL类属性。
(5)孤立点:既无引入线,又无引出线的点称之,它表示N类属性。
(6)关键点:原始点和孤立点统称为关键点(表示L类属性和N类属性)。
(7)关键属性:关键点对应的属性称之。
(8)独立回路:不能被该回路之外的其它结点到达的回路称之。
【定理四】: 一个关系模式R(U,F)的函数依赖图G中若存在关键结点,则关键结点所对应的属性必在R的任何候选码中,而所有终结点必不在R的任何候选码中。(node:①关键结点——L类与N类属性; ②终结点——R类属性;③途中点——RL类属性)。
【定理五】: 属性集X是R的唯一候选码的充要条件是X能到达G中任一结点的关键属性集。
【推论三】:在单属性情况下,R具有唯一候选码的充要条件是G中不存在独立回路。