预防医学涉外法律说明文书圣经矿山机械范本电子设计多普达气象学家交通运输

数据库原理与设计方法  文件类型:PPT/Microsoft Powerpoint   文件大小:字节
数据库原理与设计方法
东南大学自动控制系
邵家玉
EMAIL:qj@seu.edu.cn
sjy@njmai.com
邵家玉@中国
课件下载:http://automation.seu.edu.cn/
参考书:
1.王能斌.数据库系统.电子工业出版社.1995年.
2.王能斌编.数据库系统原理.电子工业出版社.2000年.
3.王珊 陈红.数据库系统原理教程.
4.[美]J·D·厄尔曼.数据库系统原理.
第一章______ Introduction
1.1___ Concepts
1.1.1__ Data,DataBase,DataBase System,DataBase Management System
1.______ Data
(李明,男,1972,江苏,计算机系,1990)
数据,信息,知识三者之间的关系:
数据的语义即为信息,信息在计算机中的存储(表示形式)即为数据.从信息中提升,推理,推导出的新的信息即为知识.
例如:40(数据)—40℃(信息)—发烧(知识)
2.______ Database——DB
3.______ Database Management System——DBMS
4.______ database system——DBS
数据库管理员(database administrator,简称DBA).
5.______ Data Model
数据模型是用来描述数据的一组概念和定义.一般来说,数据的描述包括两个方面:
(1)数据的静态特性
它包括数据的基本结构,数据间的联系和数据中的约束.
(2)数据的动态特性
它指定义在数据上的操作.
如文件系统.
数据模型要面向现实世界,面向用户.
数据模型要面向实现,面向计算机.
1)_____ conceptual data model
如ER模型,面向对象数据模型等.
2)_____ logical data model
如关系数据模型,层次模型,网状模型等.
3)_____ physical data model
概念数据模型只用于数据库的设计,逻辑数据模型和物理数据模型用于DBMS的实现.
6.______ Data Schema
type: 型是该数据所属数据类型的说明.
value: 值是型的一个实例(instance或occurrence).
对某一类数据的结构,联系和约束的描述是型的描述,型的描述称为数据模式(Data Schema).在同一数据模式下,可以有很多的值,即实例.
例如,学生记录可以定义为图1-3(a)的形式,这是数据模式.而图1-3(b)是其一个实例.
数据模型是描述数据的手段.而数据模式是用给定数据模型对具体数据的描述.
美国国家标准协会(ANSI)的ANSI/X3/SPARC报告把数据模式分为三级(见图1-4).
1)_____ conceptual schema/logical schema
2)_____ external schema
3)_____ internal schema
7.______ Database Instance
数据模式是相对稳定的,而实例是相对变动的.数据模式反映一个单位的各种事物的结构,属性,联系和约束,实质上是用数据模型对一个单位的模拟.而实例反映数据库的某一时刻的状态,也就是这一单位在此时的状态.
1.1.2__ 数据库技术的产生与发展
1.______ 人工管理阶段
人工管理数据具有如下特点:
1)_____ 数据不保存.
2)_____ 数据需要由应用程序自己管理,没有相应的软件系统负责数据的管理工作.
3)_____ 数据不共享.
4)_____ 数据不具有独立性.
人工管理阶段应用程序与数据之间的对应关系可用图l-3表示.
2.______ 文件系统阶段
用文件系统管理数据具有如下特点:
1)_____ 数据可以长期保存.
2)_____ 由专门的软件即文件系统进行数据管理.
3)_____ 数据共享性差.
4)____ 数据独立性低.
文件系统阶段应用程序与数据之间的关系如图1-4所示.
3.______ 数据库系统阶段
用数据库系统来管理数据具有如下特点:
1)_____ 数据结构化
学生人事记录
学号
姓名
性别
系别
年龄
政治面貌
家庭出身
籍贯
家庭成员
奖惩情况
图1-5
2)_____ 数据的共享性好,冗余度低
3)_____ 数据独立性高
4)_____ 数据由DBMS统一管理和控制
l______ 数据的安全性(security)
l______ 数据的完整性(integrity)
l___ 并发(concurrency)控制
l______ 数据库恢复(recovery)
量大
持久
共享
1.1.3__ 数据库技术的研究领域
1.______ 数据库管理系统软件的研制
2.______ 数据库设计
3.______ 数据库理论
1.2___ 数据库工程与应用
1.2.1__ 数据库设计的目标与特点
图 1-10
1.2.2__ 数据库设计方法
新奥尔良方法:需求分析(分析用户要求),概念设计(信息分析和定义),逻辑设计(设计实现)和物理设计(物理数据库设计).
S.B.Yao:需求分析,模式构成,模式汇总,模式重构,模式分析和物理数据库设计.
I.R.Palmer则主张把数据库设计当成一步接一步的过程,并采用一些辅助手段实现每一过程.
此外,基于E—R模型的数据库设计方法,基于3NF(第三范式)的设计方法,基于抽象语法规范的设计方法等.
规范设计法在具体使用中又可以分为两类:手工设计和计算机辅助数据库设计.
ORACLE Designer 2000
1.2.3__ 数据库设计步骤
1.______ 需求分析
2.______ 概念结构设计
3.______ 逻辑结构设计
图1-11
4.______ 数据库物理设计
5.______ 数据库实施
6.______ 数据库运行和维护
在数据库设计过程中必须注意以下问题.
1.______ 数据库设计过程中要注意充分调动用户的积极性.
2.______ 应用环境的改变,新技术的出现等都会导致应用需求的变化,因此设计人员在设计数据库时必须充分考虑到系统的可扩充性,使设计易于变动.
3.______ 系统的可扩充性最终都是有一定限度的.
1.2.4__Database Application
各种用户的数据视图
DBA主要职责包括:
1.______ 设计与定义数据库系统
2.______ 帮助最终用户使用数据库系统
3.______ 监督与控制数据库系统的使用和运行
4._____ 改进和重组数据库系统,调优数据库系统的性能
5.______ 转储与恢复数据库
6.______ 重构数据库
第二章______ Data Model
数据模型应满足三方面要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机上实现.
两类:概念模型也称信息模型,数据模型包括网状模型,层次模型,关系模型.
2.1___ 数据模型的要素
2.1.1__ 数据结构
2.1.2__ 数据操作
2.1.3__ 数据的约束条件
2.2___ 概念模型——E-R Data Model
2.2.1__ Concepts
E-R数据模型(Entity-Relationship Data Model)
EER数据模型(Extended Entity-Relationship Data Model)
1.实体(entity),实体集(entity set)
entity set与entity是型(type)与值(value)的关系(类似于前述data schema与database instance)
2.属性(attribute)
值集(value set) 实体键(entity key)实体主键(entity primary key)
3.__联系(relationship)
基数比约束(cardinality ratio constraint)
参与约束(participation constraint):部分参与,全参与
结构约束(structural constraint)
两个实体之间的联系可以分为三类:
l______ 一对一联系(1:1)
l______ 一对多联系(1:m)
l______ 多对多联系(m:n)
所有(ownership)关系——弱实体(weak entity)
2.2.2__ E-R diagram
用E-R数据模型对某一单位进行模拟,可以得到ER数据模式,ER数据模式可以ER图来直观地表示.
entity:_
weak entity:
relationship:
attribute:
示例:
教职工
研究生
班级
职工编号
姓名
出生年月
职称
是否博导
是否硕导
学号
姓名
出生年月
学位类型
是否在职
课程
课程号
名称
开课学期
学时
上课地点
学分
班级号
信箱
教职工
班级
研究生
课程
班主任
C_G
导师
任课
可担任
选课
M
N
1
N
N
N
M
M
N
M
M
N


时间


时间
类型
性质
成绩
类型
类型
专业
方向
说明:
1.学位类型:硕士/博士
2.导师类型:主要指导老师,协助指导
3.研究生可能换导师,换专业,方向
4.选课性质:学位课/非学位课
5.任课类型:主讲/辅讲
6.可担任描述有哪些老师可以上哪些课
7.任课是指目前该课程的任课老师
8.开课学期:春/秋季
9.上课地点:目前该课程的上课教室
问题:
1.课性质属性为什么不属于课程实体,而属于选课联系
2.专业,方向可不可以属于研究生
2.2.3__ EER data model
1.特殊化(specialization)和普遍化(generalization)
全特殊化(total specialization)/部分特殊化(partial specialization)
不相交特殊化(disjoint specialization)/重叠特殊化(overlapping specialization)
2._聚集(aggregation)
3._范畴(category)
2.3___ Hierarchy Data Model
2.3.1__ 层次数据模型的数据结构
1.层次模型的基本结构
图 TS数据模式
图 TS数据模式的一个值
2.多对多联系在层次模型中的表示
2.3.2__ 层次数据模型的操纵与完整性约束
2.3.3__ 层次数据模型的存储结构
2.3.4__ 层次数据模型的优缺点
层次数据模型的优点主要有:
l_层次数据模型本身比较简单,只需很少几条命令就能操纵数据库,比较容易使用.
l_对于实体间联系是固定的,且预先定义好的应用系统,采用层次模型来实现,其性能优于关系模型,不次于网状模型.
l_层次数据模型提供了良好的完整性支持.
层次数据模型的缺点主要有:
l_现实世界中很多联系是非层次性的,如多对多联系,一个结点具有多个双亲等,层次模型表示这类联系的方法很笨拙,只能通过引入冗余数据(易产生不一致性)或创建非自然的数据组织(引入虚拟结点)来解决.
l__对插入和删除操作的限制比较多.
l__查询子女结点必须通过双亲结点.
l__由于结构严密,层次命令趋于程序化.
2.4___ 网状数据模型
2.4.1__ 网状数据模型的数据结构
2.4.2__ 网状数据模型的操纵与完整性约束
2.4.3__ 网状数据模型的存储结构
2.4.4__ 网状数据模型的优缺点
网状数据模型的优点主要有:
l_能够更为直接地描述现实世界,如一个结点可以有多个双亲,允许结点之间为多对多的联系等.
l__具有良好的性能,存取效率较高.
网状数据模型的缺点主要有:
l__其DDL语言极其复杂.
l_数据独立性较差.由于实体问的联系本质上是通过存取路径指示的,因此应用程序在访问数据时要指定存取路径.
2.5___ Relation Data Model
2.5.1__ Concepts
1. Attribute and Domain
Domain: 第一范式1NF(first nomal form) atomic data
非第一范式(Non-First Nomal Form)NF2
空值:NULL
2.______ relation and tuple
设有一命名为R的关系,它有属性A1,A2,…,An,其对应的城分别为Dl,D2,…,Dn则关系R可表示为:
R=(D1/Al,D2/A2,…,Dn/An)
或 R=(A1,A2,…,An)
或 R=(A1A2…An)
R.A1表示关系R的属性A1.
degree(arity):n
R的值:r r(R)
r={t1,t2,…,tm}
t=, vi∈Di,1≤i≤n
笛卡尔乘积×
A B A×B
D
E
_
F
G
_
D
E
F
G
1
2
5
6
1
2
5
6
3
4
7
8
1
2
7
8
_
×
9
0
=
1
2
9
0
_
_
3
4
5
6
3
4
7
8
3
4
9
0
关系模式:
SUDENT(姓名,学号,性别,出生年份.籍贯,系别,入学年份)
投影:R[X] t[X] STUDENT[姓名,性别]
3.______ key
定义:如果关系的某一属性或属性组的值唯一地决定其他所有属性的值,也就是唯一地决定一个元组,而其任何真子集无此性质,则这个属性或属性组称为该关系的候选键(candidate key),或简称为键.
superkey primary key alternate key all key (SUPPLY(供应商,零件名,工程名))
prime attribute non-prime attribute
foreign key
COURSE(课程名,课程号,学分,开课时间,先修课程号)
GRADE(学号,课程号,成绩)
2.5.2__ Constraint
R=(D1/Al,D2/A2,…,Dn/An)
1.______ Domain integrity constraint
2.______ Entity integrity constraint
3.______ Referential integrity constraint
4.______ General integrity constraint
2.5.3__ Operation
relational algebra operations
1.______ Select operation
σ()
2.______ Project operation
∏()
∏性别,籍贯,出生年份(STUDENT)
若包含则:
∏(∏(R))=∏(R)
∏姓名(σ性别='女'(STUDENT))
3.______ Set operation
A∩B≡A-(A-B)
union compatibility
∏课程号(COURSE)-∏先修课程号(COURSE)
σ系别='计算机系'(STUDENT)∪σ系别='电子系'(STUDENT)
R×S={|t∈R AND g∈S}
4______ Join operation
R S=σ(R×S)
连接条件:ANDAND……AND
θ连接:AiθBj
等连接(equijoin) 自然连接(natural join)
例:
GRADE GRADE.课程号=COURSE.课程号(∏课程名,课程号,学分(COURSE))
关系代数操作集{σ,∏,∪,-,×}是完备的操作集.
{σ,∏,∪,-, }
relationally complete
5.______ Outer join operation
6.______ Outer union operation
2.5.4__ Relational Calculus
1.______ Tuple Relational Calculus
2.______ Domain Relational Calculus
第三章___Database Language SQL
结构化查询语言(structured query language,简称SQL)
3.1_ Introduction
SQL语言是1974年由Boyce和Chamberlin提出的.
1975年至1979年IBM System R实现了这种语言.
1986年10月 美国国家标准局(简称ANSI) SQL-86
1987年国际标准化组织(简称ISO)也通过了这一标准.
ANSI 1989年第二次公布SQL标准(SQL-89)
1992年 SQL-92标准
目前ANSI正在酝酿新的SQL标准:SQL3.
现在SQL已被重新解释成为:Standard Query Language
SQL按其功能可分为四大部分:
1._数据定义语言(Data Definition Language,简称DDL)
2.__查询语言(Query Language,简称QL)
3.__数据操纵语言(Data Manipulation Language,简称DML)
4._数据控制语言(Data Control Language,简称DCL)
3.1.1__SQL的特点
1.__综合统一
2.__高度非过程化
3.__面向集合的操作方式
4.__以同一种语法结构提供两种使用方式
5.__语言简洁,易学易用
表3-1 SQL语言的动词
3.1.2___ SQL语言的基本概念
3.2_ 数据定义
表3-2 SQL的数据定义语句
3.2.1__ 定义,删除与修改基表
1._ 定义基表
CREATE TABLE ([列级完整件约束条件][,[列级完整性约束条件]……]
[]);
列级完整性约束条件格式:
[NOT NULL [UNIQUE]] [DEFAULT 字值|USER|NULL]
表级完整性约束条件有三个任选项.用于定义主键的PRIMARY KEY子句,用于定义外键的FOREIGN KEY子句和用于定义列值限制条件的CHECK子句.格式:
[,PRIMARY KEY (…)]
[,FOREIGN KEY [外键名] (…)REFERENCES [ON DELETE RESTRICT |CASCADE|SET NULL]]
[,CHECK (条件)……]
IBM DB2 SQL主要支持以下数据类型:
SMALLINT 半字长二进制整数.
INTEGER或INT 全字长二进制整数.
DECIMAL(p[,q])或DEC(p[,q]) 压缩十进制数,共p位,其中小数点后有q位.0≤q≤p≤15,q=0时可以省略.
FLOAT 双字长浮点数.
CHARTER(n)或CHAR(n) 长度为n的定长字符串.
VARCHAR(n) 最大长度为n的变长字符串.
GRAPHIC(n) 长度为n的定长图形字符串.
VARGRAPHIC(n) 最大长度为n的变长图形字符串.
DATE 日期型,格式为YYYY—MM—DD.
TIME 时间型,格式为HH.MM.SS.
TIMESTAMP 日期加时间.
例1 建立Student(学生),Course(课程),SC(选课)表.
1."学生"表student由学号(Sno),姓名(Sname),性别(Ssex),年龄〔Sage〕,所在系(Sdept)5个属性组成,可记为
Student(Sno,Sname,Ssex,Sage,Sdept)
其中sno为主键.
2. "课程"表course由课程号(Cno),课程名(Cname),先修课号(Cpno),学分(Ccredit)4个属性组成,可记为:
Course(Cno,Cname,Cpno,Ccredit)
其中Cno为主键.
3."学生选课"表SC由学号(Sno),课程号(Cno),成绩(Grade)3个属性组成,其中(Sno,Cno)为主键.
CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname VARCHAR(20) NOT NULL,
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15),
PRIMARY KEY(Sno));
CREATE TABLE Course
(Cno CHAR(1) NOT NULL,
Cname VARCHAR(20),
Cpno CHAR(1)
Ccredit DEC(2,1),
PRIMARY KEY(Cno),
FOREIGN KEY (Cpno) REFERENCES Course ON DELETE RESTRICT);
CREATE TABLE SC
(Sno CHAR(5) NOT NULL,
Cno CHAR(1) NOT NULL,
Grade DEC(4,1) DEFAULT NULL,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student ON DELETE CASCADE,
FOREIGN KEY (Cno) REFERENCES Course ON DELETE RESTRICT);
2.__ 修改基表
ALTER TABLE
[ADD[完整性约束]]
[DROP]
[MODIFY];
例2 向student表增加"入学时间"列,其数据类型为日期型.
ALTER TABLE Student ADD Scome DATE;
例3 将年龄的数据类型改为半字长整数.
ALTER TABLE Student MODIFY Sage SMALLINT;
例4 删除(撤消)Student表主键定义.
ALTER TABLE Student DROP PRIMARY KEY;
3.__ 删除基表
DROP TABLE ;
例5删除Student表.
DROP TABLE Student;
3.2.2__ 建立与删除索引
1._ 建立索引
CREATE [UNIQUE] [CLUSTER] INDEX ON ( [次序] [, [次序]]…);
排列次序,包括ASC(升序)和DESC(降序)两种,缺省值为ASC.
CREATE CLUSTER INDEX Stusname ON Student(Sname);
例6 为学生—课程数据库中的Student,Course,SC 3个表建立索引.其中Student表按学号升序建立唯一索引,course表按课程号升序建立唯一索引,SC表按学号升序和课程号降序建唯一索引.
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
2.___ 删除索引
DROP INDEX;
例7 删除Student表的Stusname索引.
DROP INDEX Stusname;
3.3_ 查询
SELECT [ALL| DISTINCT] [,]…
FROM [,]…
[WHERE]
[GROUP BY[HAVING]]
[ORDER BY[ASC | DESC]];
3.3.1__ 单表查询
1.___ 选择表中的若干列
1)____ 查询指定列
例1 查询全体学生的学号与姓名.
SELECT Sno,Sname
FROM Student;
例2 查询全体学生的姓名,学号,所在系.
SELECT Sname,Sno,Sdept
FROM Student;
2)____ 查询全部列
例3 查询全体学生的详细记录
SELECT *
FROM Student;
3)____ 查询经过计算的值
例4 查询全体学生的姓名及其出生年份.
SELECT Sname,2004-Sage
FROM Student;
例5 查询全体学生的姓名,出生年份和所在系,要求用小写字母表示所在系名
SELECT Sname,'Year of Birth:',2004-Sage,ISLOWER(Sdept)
FROM Student;
_
SELECT Sname NAME,'Year of Birth:' BIRTH,2004-Sagc BIRTHDAY, ISLOWER(Sdept) DEPARTMENT
FROM Student;
结果为:
NAME BIRTH BIRTHDAY DEPARTMENT
李勇 Year of Birth: 1976 cs
刘晨 Year of Birth: 1977 if
王名 Year of Birth: 1978 ma
张立 Year of Birth: 1978 if
2._ 选择表中的若干元组
1)_ 消除取值重复的行
例6 查询所有选修过课的学生的学号.
SELECT Sno
FROM SC;
假设SC表中有下列数据:
Sno Cno Grade
95001 1 92
95001 2 85
95001 3 88
95002 2 90
95002 3 80
执行上面的SELECT语句后,结果为:
Sno
95001
95001
95001
95002
95002
SELECT DISTINCT Sno
FROM SC;
执行结果为:
Sno
95001
95002
_
SELECT Sno
FROM SC;

SELECT ALL Sno
FROM SC;
完全等价.
2)__ 查询满足条件的元组
表3-5 常用的查询条件
①比较大小
= 等于
> 大于
= 大于等于
不大于
!< 不小于
逻辑运算符NOT可与比较运算符同用,对条件求非.
例7 查计算机系全体学生的名单.
SELECT Sname
FROM Student
WHERE Sdept='CS';
例8 查所有年龄在20岁以下的学生姓名及其年龄.
SELECT Sname,Sage
FROM student
WHERE Sage=20;
例9 查考试成绩有不及格的学生的学号.
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;
②确定范围
谓词BETWEEN...AND...和NOT BETWEEN...AND...可以用来查找属性值在(或不在)指定范围内的元组,其中BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值).
例10 查询年龄在20至23岁之间的学生的姓名,系别和年龄.
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
与BETWEEN...AND...相对的谓词是NOT BETWEEN...AND....
例11 查询年龄不在20至23岁之间的学生姓名,系别和年龄.
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
③确定集合
谓词IN可以用来查找属性值属于指定集合的元组.
例12 查信息系(IS),数学系(MA)和计算机科学系(CS)的学生的姓名和性别.
SELECT Sname.Ssex
FROM Student
WHERE Sdept IN('IS','MA','CS');
与IN相对的谓词是NOT IN,用于查找属性值不属于指定集合的元组.
例13 查既不是信息系,数学系,也不是计算机科学系的学生的姓名和性别.
SELECT Sname.Ssex
FROM Student
WHERE Sdept NOT IN('IS','MA','CS');
④字符匹配
谓词LIKE可以用来进行字符串的匹配.其一般语法格式如下:
[NOT] LIKE ''
其含义是查找指定的属性列值与相匹配的元组,可以是一个完整的字符串,也可以含有通配符%和_.其中:
%(百分号) 代表任意长度(长度可以为0)的字符串.
例如a%b表示以a开头,以b结尾的任意长度的字符串,acb,adefb,ab等都满足该匹配串.
_(下划线) 代表任意单个宁符.例如a_b表示以a开头,以b结尾,长度为3的字符串,acb,adb等都满足该匹配串.
例14 查询学号为95001的学生的详细情况
SELECT *
FROM Student
WHERE Sno LIKE '9500l';
该语句实际上与下面的语句完全等价:
SELECT *
FROM Student
WHERE Sno='9500l';
例15 查所有姓刘的学生的姓名,学号和性别.
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '刘%';
例16 查姓"欧阳"且全名为3个汉字的学生的姓名.
SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳__';
例17 查名字中第二字为"阳"字的学生的姓名和学号.
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '__阳%';
例18查所有不姓刘的学生姓名.
SELECT Snamc,Sno,Ssex
FROM Student
WHERE Sname NOT LIKE '刘%';
⑤涉及空值的查询
谓词IS NULL和IS NOT NULL可用来查询空值和非空值.
例19 某些学生选修某门课程后没有参加考试,所以有选课记录,但没有考试成绩,下面来查一下缺少成绩的学生的学号和相应的课程号.
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL;
例20 查所有有成绩的记录的学生学号和课程号.
SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL;
⑥多重条件查询
例21 查CS系年龄在20岁以下的学生姓名
SELECT Sname
FROM Student
WHERE Sdept='CS'AND Sage3;
3.3.2__ 连接查询
1._ 等值与非等值连接查询
[.][.]
其中比较运算符主要有:=,>,=,<=,!=.
此外,连接谓词还可以使用下面形式:
[.]BETWEEN[90;
结果表为;
Student.Sno Sname
95002 刘晨
例36 查询每个学生选修的课程名及其成绩.
SELECT Student.Sno,Sname,Cname, Grade
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno and SC.Cno=COURSE.Cno;
3.3.3__ 嵌套查询
SELECT Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno='2');
1.__带有IN谓词的子查询
例37 查询与"刘晨"在同一个系学习的学生.
查询与"刘晨"在同一个系学习的学生,可以首先确定"刘晨"所在系名,然后再查找所有在该系学习的学生.所以可以分步来完成此查询:
①确定"刘晨"所在系名
SELECT Sdept
FROM Student
WHERE Sname='刘晨';
结果为:IS
②查找所有在IS系学习的学生.
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept='IS';
分步写查询毕竟比较麻烦,上述查询实际上可以用子查询来实现,即将第一步查询嵌入到第二步查询中,用以构造第二步查询的条件.SQL语句如下:
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨');
本例中的查询也可以用前面学过的表的自身连接查询来完成:
SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE S1.Sdept=S2.Sdept AND S2.Sname='刘晨';
本例中父查询和子查询均引用了Student表.也可以像表的自身连接查询那样用别名将父查询中的Student表与子查询中的Student表区分开:
SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1
WHERE S1.Sdept IN
(SELECT S2.Sdept
FROM Student S2
WHERE S2.Sname='刘晨');
例38 查询选修了课程名为信息系统的学生学号和姓名.
完成此查询的基本思路是:
①首先在Course关系中找出'信息系统'课程的课程号Cno.
②然后在SC关系中找出Cno等于第一步给出的Cno集合中某个元素的Sno.
③最后在Student关系中选出Sno等于第二步中求出Sno集合中某个元素的元组.取出Sno和Sname送入结果表列.
将上述想法写成SQL语句就是:
SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM Course
WHERE Cname='信息系统'));
DBMS按照由内向外的原则求解此SQL语句,首先处理最内层查询块,即课程名'信息系统'的课程号:
SELECT Cno
FROM Course
WHERE Cname='信息系统'
查询结果为3.从而可以把上面的SQL语句简化为:
SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN ('3'));
对此SQL语句再处理内层查询,
SELECT Sno
FROM SC
WHERE Cno IN ('3')
结果为95001和95002.从而可以把上面的SQL语句进一步简化为:
SELECT Sno,Sname
FROM Student
WHERE Sno IN('95001','95002');
这样就可以求得最终结果.
本查询同样可以用连接查询实现:
SELECT Student.Sno,Sname
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND
SC.Cno=Course.Cno AND
Course.Cname='信息系统';
2.__ 带有比较运算符的子查询
带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接.当用户能确切知道内层查询返回的是单值时,可以用>,=,ANY 大于子查询结果中的某个值
=ANY 大于等于子查询结果中的某个值
ALL 大于子查询结果中的所有值
=ALL 大于等于子查询结果中的所有值
<=ALL 小于等于子查询结果中的所有值
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!=ALL或ALL 不等于子查询结果中的任何一个值
例39 查询其他系中比IS系某一学生年龄小的学生名单.
SELECT S1.Sname,S1.Sage
FROM Student S1
WHERE S1.Sage<ANY
(SELECT S2.Sage
FROM Student S2
WHERE S2.Sdept='IS')
AND S1.Sdept'IS'
ORDER BY S1.Sage DESC;
注意,S1.Sdept'IS'条件是父查询块中的条件,不是子查询块中的条件.
用集函数实现:
SELECT S1.Sname,S1.Sage
FROM Student S1
WHERE S1.Sage<
(SELECT MAX(S2.Sage)
FROM Student
WHERE S2.Sdept='IS')
AND S1.Sdept'IS'
ORDER BY Sage DESC;
例40 查询其他系中比IS系所有学生年龄都小的学生名单.
SELECT S1.Sname,S1.Sage
FROM Student S1
WHERE S1.Sage<ALL
(SELECT S2.Sage
FROM Student S2
WHERE S2.Sdept='IS')
AND S1.Sdept'IS"
ORDER BY S1.Sage DESC;
本查询同样也可以用集函数实现.即首先用子查询找出'IS'系的最小年龄(18),然后在父查询中查所有非'IS'系且年龄小于18岁的学生姓名及其年龄.SQL语句如下:
SELECT S1.Sname,S1.Sage
FROM Student S1
WHERE S1.Sage<
(SELECT MIN(S2.Sage)
FROM Student S2
WHERE S2.Sdept='IS')
AND S1.Sdept'IS'
ORDER BY S1.Sage DESC;
事实上,用集函数实现子查询通常比直接用ANY或ALL查询效率要高.
4.__ 带有EXISTS谓词的子查询
EXISTS代表存在量词.带有EXISTS谓词的子查询不退回任何实际数据,它只产生逻辑真值"TRUE"或逻辑假值"FALSE".
例41 查询所有选修了1号课程的学生姓名.
SELECT Sname
FROM Student
WHERE EXISTS
(SELECT *
FROM SC
WHERE SC.Sno=Student. Sno AND Cno='1');
例41 查询所有未修1号课程的学生姓名.
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.Sno=Student. Sno AND Cno='1');
带有IN谓词的例37可以用如下带EXISTS谓词的子查询替换:
查询与"刘晨"在同一个系学习的学生.
SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1
WHERE EXISTS
(SELECT *
FROM Student S2
WHERE S1.Sdept=S2.Sdept AND S2.Sname='刘晨');
例42 查询选修了全部课程的学生姓名.
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.Sno=Student.Sno
AND SC.Cno=Course.Cno));
例43 查询至少选修了学生95002选修的全部课程的学生号码.
本题的查询要求可以做如下解释,查询这样的学生,凡是95002选修的课,他都选修了.换句话说,若有一个学号为x的学生,对所有的课程y,只要学号为95002的学生选修了课程y,则x也选修了y;那么就将他的学号选出来.
即不存在这样的课程y,学生95002选修了y,而学生x没有选.用SQL语言可表示如下:
SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISTS
(SELECT *
FROM SC SCY
WHERE SCY.Sno='95002' AND
NOT EXISTS
(SELECT *
FROM SC SCZ
WHERE SCZ.Sno=SCX.Sno AND
SCZ.Cno=SCY.Cno));
3.3.4__ 集合查询
集合操作主要包括并操作UNION,交操作INTERSECT和差操作MINUS.
例44 查询计算机科学系的学生及年龄不大于19岁的学生.
SELECT *
FROM Student
WHERE Sdept='CS'
UNION
SELECT *
FROM Student
WHERE Sage<=19;
本查询实际上是求计算机科学系的所有学生与年龄不大于19岁的学生的并集.
例45 查询选修了课程1或者选修了课程2的学生.
本例实际上是查选修课程1的学生集合与选修课程2的学生集合的并集.
SELECT Sno
FROM SC
WHERE Cno='1'
UNION
SELECT Sno
FROM SC
WHERE Cno='2';
注:标准SQL只有并,没有交和差,但实际上,交或差都可以用其它方法实现,具体实现根据不同的查询而不同(用语义替换).
例46 查询计算机科学系的学生与年龄不大于19岁的学生的交集.
本查询换种说法就是,查询计算机科学系中年龄不大于19岁的学生.
例47 查询选修课程l的学生集合与选修课程2的学生集合的交集
本例实际上是查询既选修了课程1又选修了课程2的学生.
例48 查询计算机科学系的学生与年龄不大于19岁的学生的差集.
本查询换种说法就是,查询计算机科学系中年龄大于19岁的学生.
例49 查询选修课程1的学生集合与选修课程2的学生集合的差集
本例实际上是查询选修了课程1但没有选修课程2的学生.
3.3.5__ 小结
问题:有关系模式part(Item_no,Name,P_no)表示一个产品零部件情况及产品的组成(P_no表示上一级的零件),如何用SQL实现查询:查询某个产品(给定Item_no)的所有零部件 .
3.4_ 数据更新
3.4.1__ 插入数据
1.__ 插入单个元组
INSERT INTO [([,…)]
VALUES ([,…])
例1 将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入Student表中.
INSERT INTO Student
VALUES('95020','陈冬','男','IS',18);
例2 插入一条选课记录('95020','1')
INSERT INTO SC(Sno,Cno)
VALUES("95020','1');
2.__ 插入子查询结果
INSERT INTO[([,…]]
子查询;
_
例3 对每一个系,求学生的平均年龄,并把结果存入数据库.
对于这道题,首先要在数据库中建立一个有两个属性列的新表,其中一列存放系名,一列存放相应系的学生平均年龄.
CREATE TABLE Deptage
(Sdept CHAR(15),Avgage SMALLINT);
然后对数据库的student表按系分组求平均年龄,再把系名和平均年龄存入到新表中.
INSERT INTO Deptage(Sdept,Avgage)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
3.4.2__ 修改数据
UPDATE
SET=[,=…]
[WHERE ];
1.___修改某一个元组的值
例4 将学生95001的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno='95001';
2.__ 修改多个元组的值
例5 将所有学生的年龄增加1岁.
UPDATE Student
SET Sage=Sage+1;
3.___ 带子查询的修改语句
例6 将计算机科学系全体学生的成绩置零.
UPDATE SC
SET Grade=0
WHERE 'CS'=
(SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno);

UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');
4.__ 修改操作与数据库的一致性
第一条UPDATE语句修改Student表:
UPDATE Student
SET Sno='96089'
WHERE Sno='95007';
第二条UPDATE语句修改SC表:
UPDATE SC
SET Sno='96089'
WHERE Sno='95007';
问题:SC表中要修改的Sno是引用Student的外键,第一条UPDATE执行后,显然已破坏该参照完整性.这样的过程能正常执行吗
3.4.3__ 删除数据
DELETE FROM
[WHERE];
1.___ 删除某一个元组的值
例7 删除学号为95019的学生记录.
DELETE
FROM Student
WHERE Sno='95019';
1.______ 删除多个元组的值
例8 删除所有的学生选课记录.
DELETE FROM SC;
2.______ 带子查询的删除语句
例9 删除计算机科学系所有学生的选课记录.
DELETE FROM SC
WHERE 'CS'=
(SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno);
3.5_ 视图
3.5.1__ 定义视图
1._建立视图
CREATE VIEW[([,]…)]
AS
如果CREATE VIEW语句仅指定了视图名,省略了组成视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成.但在下列三种情况下必须明确指定组成视图的所有列名:
l__其中某个目标列不是单纯的属性名,而是集函数或列表达式.
l__ 多表连接时选出了几个同名列作为视图的字段.
l__ 需要在视图中为某个列启用新的更合适的名字.
例1 建立信息系学生的视图
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
本例中省略了视图IS_Student的列名,隐含了该视图由子查询中SELECT子句中的3个目标列名组成.DBMS执行此语句就相当于建立虚表:
IS_Student (Sno,Sname,Sage)
2.______ 删除视图
DROP VIEW;
例2 删除视图IS_Student.
DROP VIEW IS_Student;
3.5.2__ 查询视图
对视图的查询转换为对基表的查询的过程称为视图的消解(view resolution).
例3 在信息系学生的视图中找出年龄小于20岁的学生.
SELECT Sno,Sage
FROM IS_Student
WHERE Sage<20;
DBMS执行此查询时,将其与IS_Student视图定义中的子查询
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
结合起来,转换成对基表student的查询:
SELECT Sno,Sage
FROM Student
WHERE Sdept='IS' AND Sage<20;
3.5.3__ 更新视图
更新视图包括插入(INSERT),删除(DELETE)和修改(UPDATE)三类操作.
例如,如定义的视图S_G是由'学号'和'平均成绩'两个属性列组成的,其中平均成绩一项是由SC表中多个元组分组后计算平均值得来的.如果想把视图S_G中学号为95001的学生的平均成绩改成90分,SQL语句如下:
UPDATE S_G
SET Grade=90
WHERE Sno='95001';
但这个对视图的更新是无法转换成对基表SC的更新的,因为系统无法修改各科成绩,以便平均成绩成为90.所以S_G视图是不可更新的.
l 由一个基表定义的视图,只有含有基表的主键或候补键,并且视图中没有用表达式或函数定义的属性,才允许更新;
l_ 由多表连接所定义的视图不允许更新;
l_ 定义中用到GROUP BY子句或集函数的视图不允许更新.
3.5.4__ 视图的用途
1._ 视图能够简化用户的操作
2._ 视图使用户能以多种角度看待同一数据
3. _视图对重构数据库提供了一定程度的逻辑独立性
例如,将学生关系
Student(Sno,Sname,Ssex,Sage,Sdept)分为
SX(Sno,Sname,Ssex) 和
SY(Sno,Sage,Sdept)
两个关系,这时原表Student为SX表和SY表自然连接的结果.如果建立一个视图Student:
CREATE VIEW Student (Sno, Sname, Ssex, Sage, Sdept)
AS
SELECT SX.Sno,Sname,Ssex,Sage,Sdept
FROM SX,SY
WHERE SX.Sno=SY.Sno;
4.__ 视图能够对机密数据提供安全保护
3.6_ 嵌入式SQL介绍
嵌入式SQL(embedded SQL)
嵌入式SQL必须解决下列四个问题:
(1)宿主语言编译器不可能识别和接受SQL语言,如何将嵌有SQL的宿主语言编译成可执行码,这是首先要解决的问题;
(2)宿主语言和DBMS之间如何传递数据和信息;
(3)数据库的查询结果一般是元组的集合,而宿主语言使用变量(单值),这些元组须逐个地赋值给程序中的变量,供宿主语言处理,其间存在一个转换问题;
(4)两者的数据类型有时不完全对应或等价,须解决必要的数据类型转换问题.要进行何种数据类型转换,与宿主语言和DBMS有关.
如ORACLE的PRO接口:PRO*C,PRO*PASCAL等.
第四章__ 数据库系统结构
4.1_ 数据库系统的模式结构
type
value
4.1.1__ 数据库系统的三级模式结构
1._ 模式
2._ 外模式
3.__内模式
图4-1 数据库系统的模式结构
4.1.2__ 数据库的二级映象功能与数据独立性
两层映象:外模式/模式映象和模式/内模式映象
4.1.3__ Conclusion
4.2_ 数据库系统的体系结构
从最终用户角度来看,数据库系统分为单用户结构,主从式结构,分布式结构和客户/服务器结构等.
4.2.1_单用户数据库系统
图4-2 单用户数据库系统
4.2.2__ 主从式结构的数据库系统
图4-3 主从式数据库系统
特点:数据集中,处理集中.
4.2.3__分布式结构的数据库系统
特点:数据分布,处理分布.
图4-4 分布式数据库系统
4.2.4__Client/Server结构的数据库系统
特点:数据集中,处理分布 .
特点:数据分布,处理分布 .
4.2.5__ 联邦分布式数据库系统
每个结点所看到的数据模式仅仅限于该结点所用到的数据.它—般由两部分组成:一是本结点的数据模式,二是供本结点共享的其他的点上有关的数据模式.
结点间的数据共享由双边协商确定.
特点:数据分布,处理分布.
目前大型主流DBMS(如ORACLE,SQL Server等)商品化产品均为支持分布的Client/Server结构.
4.3_ Database Management System
4.3.1__ DBMS的功能和组成
1.______ 数据定义
2.______ 数据操纵
3.______ 数据库运行管理
4.______ 数据组织,存储和管理
5.______ 数据库的建立和维护
6.______ 数据通信接口
为了提供上述6方面的功能,DBMS通常由以下4部分组成.
1.______ 数据定义语言及其翻译处理程序
2.______ 数据操纵语言及其编译(或解释)程序
3.______ 数据库运行控制程序
4.______ 实用程序
4.3.2__ 数据库管理系统的工作过程
应用程序(或用户)从数据库中读取一个数据通常需要以下步骤:
1.______ 应用程序A向DBMS发出从数据库中读数据记录的命令;
2.______ DBMS对该命令进行语法检查,语义检查,并调用应用程序A对应的外模式,检查A的存取权限,决定是否执行该命令.如果拒绝执行,则向用户返回错误信息;
3.______ 在决定执行该命令后,DBMS调用模式,依据外模式/模式映象的定义,确定应读入模式中的哪些记录;
4.______ DBMS调用内模式,依据模式/内模式映象的定义,决定应从哪个文件,用什么存取方式,读入哪个或哪些物理记录;
5.______ DBMS向操作系统发出执行读取所需物理记录的命令;
6.______ 操作系统执行读数据的有关操作;
7.______ 操作系统将数据从数据库的存储区送至系统缓冲区;
8.______ DBMS依据外模式/模式映象的定义,导出应用程序A所要读取的记录格式;
1.______ DBMS将数据记录从系统缓冲区传送到应用程序A的用户工作区;
2.______ DBMS向应用程序A返回命令执行情况的状态信息.
图4-8表示了一个关系DBMS处理上述过程的层次结构.
图4-8 关系DBMS的层次结构
4.3.3__ TRANSACTION
1. Atomic Nothing Or All
2. Consistency
3. Isolation
4. Durability
例1 将款项S从A帐号拨给B帐号.
BEGIN TRAN /*事务开始*/
Read A /*读A帐号*/
A=A-S /*从A帐号中减去款项S*/
If A10000;
代数优化的大致过程:
1. 以SELECT子句对应投影操作,以FROM子句对应笛卡儿乘积,以WHERE子句对应选择操作,生成原始查询树.
2. 应用变换原则(2),(6),(7),(9),尽可能将选择条件移向树叶方向.
3. 应用连接,笛卡儿乘积的结合律,按照小关系先做的原则,重新安排连接(笛卡儿乘积)的次序.
4. 如果笛卡儿乘积后还须按连接条件进行选择操作,可将两者组合成连接操作.
5. 对每个叶结点添加必要的投影操作,以消除对查询无用的属性.
6.3___ 依赖于存取路径的规则优化
6.3.1__ 选择操作的实现和优化
1. 相关因素
l__ 选择条件
l__ 可用的存取路径
l__ 选取的元组数在整个关系中所占的比例有关
2. 实现方法
(1)__ 对于小关系,不必考虑其他存取路径,直接用顺序扫描.例如对于六个物理块大小的关系,如果顺序搜索,则平均的I/O次数为3,不值得采用其他存取路径.
(2)___如果无索引或散列等存取路径可用,或估计中选的元组数在关系中占有较大的比例(例如大于20%)且有关属性上无族集索引,则用顺序扫描.
(3)__对于主键的等值条件,最多只有一个元组可以满足此条件,应优先采用主键上的索引或散列.
(4)__ 对于非主键的等值条件,要估计中选的元组数在关系中所占的比例.如果比例较小(例如小于20%),可以用无序索引,否则只能用簇集索引或顺序扫描.
(5)__ 对于范围条件,一般先通过索引找到范围的边界,再通过索引的顺序集沿相应方向按索,例如对于条件Sage>20,可先找到Sage=20的顺序集结点,再沿顺序集向右搜索.若中选的元组数在关系中所占比例较大,且无有关属性的簇集索引,则宜采用顺序扫描.例如对于条件Sage>15,因为大学生绝大部分是大于15岁的.
(6)____ 对于用AND连接的合取选择条件.若有相应的多属性索引,则优先采用多属性索引.否则,可检查诸合取条件中有无多个可用二次索引的,若有,则用预查找法处理.即通过二次索引找出满足各合取条件的tid集合,再求这些tid集合的交集.然后取出交集中tid所对应的元组.并在取这些元组的同时,用合取条件中的其余条件检查.凡能满足所有其余条件的元组,即为所选择的元组.如果上述途径都不可行,但合取条件中有个别条件具有规则(3),(4),(5)中所述的存取路径,则可用此存取路径选择满足此条件的元组,再将这些元组用合取条件中的其他条件筛选.若在诸合取的条件中,没有一个具有合适的存取路径.那只有用顺序扫描.
(7)___对于用OR连接的析取选择条件,尚无好的优化方法,只能按其中各个条件分别选出一个元组集,再求这些元组集的并.众所周知,并是开销大的操作,而且在OR连接的诸条件中,只要有一个条件无合适的存取路径,就不得不采用顺序扫描来处理这种查询.因此,在查询语句中,应尽量避免采用析取选择条件.
(8)__有些选择操作只要访问索引就可得到结果,例如查询索引属性的最大值,最小值,平均值等.在此情况下,应优先利用索引,避免访问数据.
6.3.2__ 连接操作的实现和优化
1.______ 嵌套循环(nested loop)法
R R.A=S.B S
外关系(outer relation)
内关系(inner relation)
2.__ 利用索引或散列寻找匹配元组法
3.__ 排序归并(sort-merge)法
下面是选用连接方法的启发式规则.
(1)__ 如果两个关系都已按连接属性排序,则优先用排序归并法.如果两个关系中已有一个关系按连接属性排序,另一个关系很小,也可考虑对此未排序的关系按连接属性排序,再用排序归并法连接.
(2)__ 如果两个关系中有一个关系在连接属性上有索引(特别是簇集索引)或散列,则可令另一关系为外关系,顺序扫描,并利用内关系上的索引或散列寻找其匹配元组,以代替多遍扫描.
(3)__ 如果应用上述两规则的条件都不具备,且两个关系都比较小,可以应用嵌套循环法.
(4)__ 如果(1),(2),(3)规则都不适用,可用散列连接法.
6.3.3__ 投影操作的实现
6.3.4__ 集合操作的实现
6.3.5__ 组合操作
第七章___事务管理
恢复
事务管理
并发控制
7.1___ 恢复引论
fault
error
failure
loss
1.__单纯以后备复本为基础的恢复技术
2.___以后备复本和运行记录(log或journal)为基础的恢复技术
运行记录包括:
(1)_ 前象(Before Image BI)——undo
(2)_ 后象(After Image AI)——redo
(3)_ 事务状态
commit
rollback/abort
backward recovery —— undo
forward recovery —— redo
3.__ 基于多复本的恢复技术
independent failure mode
多服务器DBS:
1. 双机热备份
2. 双机CLUSTER
3._磁盘阵列RAID0~5
4._等
7.2________ 运行记录的结构
1.__ Active Transaction List (ATL)
2.__ Committed Transaction List (CTL)
3.__ 前象文件
4.__ 后象文件
措施:
1.__ 不保留已提交事务的前象
2._ 有选择地保留后象
3.__ 合并后象
7.3__ 更新事务的执行与恢复
更新事务在执行时应遵守下列两条规则:
1. 提交规则(commit rule)
2. 先记后写规则(log ahead rule)
方案:
1._ 后象在事务提交前完全写入数据库
其步骤如下:
(1)____ TID→ATL
(2)____ BI→log /*先记后写规则*/
(3)____ AI→DB /*在提交前,后象完全写入DB,
满足提交规则*/
(4)____ TID→CTL
(5)____ 从ATL中删除TID
2._ 后象在事务提交后才写入数据库
其步骤如下:
(1)____ TID→ATL
(2)____ AI→log /*提交规则*/
(3)____ TID→CTL
(4)____ AI→DB
(5)____ 从ATL中删除TID
3. 后象在事务提交前后写入数据库
其步骤如下:
(1)_ TID→ATL
(2)_ AI,BI→log /*提交规则及先记后写规则*/
(3)_ AI→DB(部分写入)
(4)_ TID→CTL
(5)_ AI→DB(继续完成)
(6)_ 从ATL中删除TID
7.4__易地更新恢复技术
设有数据库DB为:
DB={F1,……Fj,……Fn}
(1)__ 取M到内存,并读取M[j];
(2)__ 按M[j]找到PTj,并取PTj到内存中(为Ti所用的PTj的内存版本表示为PTji,见图7-8);
(3)_ 按PTji[k]取Fj的第k页Pjk至内存,并在内存中更新其内容,设更新后的Pjk为P'jk;
(4)_写入P'jk至数据库的一个新地方,设其在磁盘上的地址为ADD(P'jk);
(5)_在内存中,以ADD(P'jk)加取代PTji[k],因而在内存中形成PTj的新版本PTji;
(6)___写入PTji至数据库的一个新地方,设其在磁盘上的地址为ADD(PTji);
(7)____ 再取M至内存;
(8)____ 以ADD(PTji)取代M[j];
(9)____ 在原地址写回M,事务提交.
易地更新恢复技术的限制和缺点
7.5____ 消息的处理
消息管理(message manager MM)
7.6___ 失效的类型及恢复的对策
1.__ 事务失效
措施:
l___ MM丢弃该事务的消息队列;
l___ 如果需要,进行undo操作;
l__ 从ATL删除该事务的TID,释放该事务所占的资源.
2.__ 系统失效
措施:
l____ 重新启动操作系统和DBMS;
l__恢复数据库至一致状态(对末提交的事务进行undo操作,对已提交的事务进行redo操作).
检查点(check point CP)
取CP的过程如下:
l___ 暂停事务的执行
l_ _写入上一个CP以后所提交的事务留在内存中的后象
l___ 在运行记录的提交事务表中记下检查点
l__ 恢复事务的执行.
3.___ 介质失效
措施:
l___ 修复系统,必要时更换磁盘;
l_ 如果系统(操作系统和DBMS)崩溃,重新启动系统;
l___ 加载最近后备复本;
l__ 用运行记录中的后象,重做取最近后备复本以后提交的所有事务.
7.7___并发控制引论
7.7.1__ 数据库系统中的并发
串行访问
交叉并发
并发访问
同时并发
7.7.2__ 并发的目的
1. 改善系统的资源利用率
2. 改善短事务的响应时间
7.7.3__ 并发引起的问题
1. 丢失更新(lost update)
写—写冲突(write-write conflict)
2. 读脏数据(dirty read)
读—写冲突(read-write conflict)
3. 读值不可复现(unrepeatable read)
读—写冲突(read-write conflict)
7.7.4__ 并发控制的正确性准则
操作顺序安排的原则是:既要交叉执行,以充分利用系统的资源;又要避免访问冲突.
S=…R1(x)…W2(x)…R1(x)…
目标等价(view equivalence)
冲突等价(conflit equivalence)
_冲突的操作:Ri(x)和Wj(x)以及Wi(x)和Wj(x) i≠j
不冲突的操作:Ri(x)和Rj(x)以及Ri(x)和Wj(y) i≠j
可串行化(serializable)
S=R2(x)W3(x)R1(y)W2(y)
S→R2(x)R1(y)W3(x)W2(y)→R1(y)R2(x)W2(y)W3(x)=S'
_
Conclusion: 在一般DBMS中都是以可串行化作为并发控制的正确性准则(冲突可串行化).
7.8________ 加锁协议
7.8.1__ X锁
X锁:既用于写操作,也用于读操作.
连锁卷回(cascading rollback)
7.8.2__ 两段封锁协议
定义7.8-1 在一个事务中,如果加锁动作都在所有释放锁动作之前,则称此事务为两段事务(two-phase transaction).上述的加锁限制称为两段封锁协议(two-phase locking protocol,简称2PL协议).
定义7.8-2 一个事务如果遵守先加锁,后操作的原则,则此事务称为合式(well formed)事务.
定理7.8-1 如果所有事务都是合式,两段事务,则它们的任何调度都是可串行化的.
严格的2PL协议(strict 2PL protocol)
7.8.3__(S,X)锁
S锁(Sharing locks)用于读访问
X锁(eXclusive locks)用于写访问
活锁(live lock): first come first serve __
7.8.4_(S,U,X)锁
活锁(live lock): first come first serve __
7.9____死锁的检测,处理和防止
死锁(dead lock):对付死锁无非两种办法:一是检测死锁,发现死锁后处理死锁;二是防止死锁.
7.9.1__ 死锁的检测和处理
______ 1.____ 超时法
______ 2.___ 等待图法(wait-for graph)
G=(W,U)
其中,W是结点的集合,w={Ti|Ti是数据库系统中当前运行的事务,i=1,2,…,n}
U是边的集合,U={(Ti,Tj)|Ti等待Tj,i≠j}
DBMS对死锁一般作如下处理:
l_______ 在循环等待的事务中,选一个事务作为牺牲者(victim),给其他事务"让路";
l_______ 卷回牺牲的事务,释放其获得的锁及其他资源;
l_______ 将释放的锁让给等待它的事务.
被牺牲事务的选择原则:
l_______ 选择最迟交付的事务作为牺牲者
l_______ 选择获得锁最少的事务作为牺牲者
l_______ 选择卷回代价最小的事务作为牺牲者
7.9.2__ 死锁的防止
时间标记(time stamp简称时标ts):随时间增长的正整数.
系统启动时,ts=0,每当一个新事务开始运行时,ts+1,并把此时的ts赋予该事务,作为该事务的时标.
设有两个事务TA和TB,如ts(TA)ts(TB)
则TA等待
否则,卷回TA,井以原来的ts(TA)重新启动.
请回答以下问题:
(1)此策略能否避免死锁
(2)此策略有何主要问题
(3)如何改进此策略,消除其存在的问题
(4)请将改进后的策略与标准的wait-die和wound-wait策略比较.
第八章______ 数据库的安全和完整性约束
数据库的破坏一般来自下列四个方面:
(1)系统故障;
(2)并发所引起的数据不一致;
(3)人为的破坏,例如数据被不该知道的人访问,甚至被篡改或破坏;
(4)输入或更新数据库的数据有误,更新事务未遵守保持数据库一致性的原则.
8.1________ 数据库的安全
安全的操作系统是数据库安全的前提.
8.1.1__ 视图定义和查询修改
8.1.2__ 访问控制
数据库用户按其访问权力的大小,一般可分为以下三类.
1.__ 一般数据库用户
在SQL中,这种用户称为"具有CONNECT特权的用户".这种用户可以与数据库联系,并具有下列特权:
(1)按照授权可以查询或更新数据库中的数据;
(2)可以创建视图或定义数据的别名.
2.__具有支配部分数据库资源特权的数据库用户
在SQL中,这种用户称为"具有RESOURCE特权的用户",除具有一般数据库用户所拥有的所有特权外,还有下列特权:
(1)可以创建表,索引和簇集;
(2)可以授予或收回其他数据库用户对其所创建的数据对象的访问权;
(3)有权对其所创建的数据对象跟踪审查(audit)(有关跟踪审查的内容将在稍后介绍).
3.__具有DBA特权的数据库用户
DBA拥有支配整个数据库资源的特权,这种用户除具有上述两种用户所拥有的一切特权外,还有下列特权:
(1)有权访问数据库中的任何数据;
(2)不但可以授予或收回数据库用户对数据对象的访问权,还可以批准或收回数据库用户;
(3)可以为PUBLIC定义别名,PUBLIC是所有数据库用户的总称;
(4)有权对数据库进行调整,重组或重构;
(5)有权控制整个数据库的跟踪审查.
_
1._____ identification and authentication
2._____ authorization
GRANT 〈特权类型〉 [{,〈特权类型〉}]TO〈用户标识符〉[IDENTIFIED BY 〈口令〉];
〈特权类型〉::=CONNECT | RESOURCE | DBA
例8-1 GRANT DBA TO WANG IDENTIFIED BY B02M29@J;
例8-2 GRANT CONNECT TO CHANG IDENTIFIED BY xyzabc;
GRANT RESOURCE TO CHANG;
_
REVOKE〈特权类型〉 [{,〈特权类型〉}]FROM〈用户标识符〉;
GRANT 〈特权〉 ON 〈表名〉 TO 〈受权者〉[{,〈受权者〉}][WITH GRANT OPTION];
〈特权〉::=ALL PRIVILEGES | 〈操作〉[{,〈操作〉}]
〈操作〉::=SELECT | INSERT | DELETE | UPDATE [(〈准许修改的属性表〉)]
〈准许修改的属性表〉::=〈属性名〉[{,〈属性名〉}]
〈受权者〉::=PUBLIC | 〈用户标识符〉
_
REVOKE 〈特权〉ON〈表名〉FROM〈受权者〉[{,〈受权者〉}];
设有用户Ul,U2,U3和U4,U1有一张表S,下面是一连串授权过程:
U1授权给U2:
U1:GRANT SELECT ON TABLE S TO U2 WITH GRANT OPTION;
U2授权给U3:
U2:GRANT SELECT ON TABLE U1.S TO U3 WITH GRANT OPTION;
U3授权给U4:
U3:GRANT SELECT ON TABLE U1.S TO U4 WITH GRANT OPTION;
U1收回授给U2的特权;
U1:REVOKE SELECT ON TABLE S FROM U2;
此语句的作用不仅收回U1授予U2的特权(即SELECT ON TABLE S),而且还收回U2授予U3,U3授予U4的这种特权.
_
GRANT SELECT,UPDATE(GRADE,ADDRESS) ON TABLE S1 TO XU,MA;
8.1.3__ 数据加密
8.1.4__ 跟踪审查
AUDIT SELECT,INSERT,DELETE,UPDATE ON emp WHENEVER SUCCESSFUL;
即对emp表的每次成功的选择,增,删,改操作都作跟踪审查记录.
NOAUDIT ALL ON emp;
8.2__统计数据库的安全_
8.3__完整性约束
8.3.1__完整性约束的类型
固有约束
静态约束 隐含约束
显式约束
动态约束
8.3.2__ 完整性约束的说明
1___ 用过程说明约束
2___ 用断言说明约束
ASSERT余额约束 ON 储蓄账:余额≥0;
3__ 用触发子表示约束
whenever thcn ;
_
DEFINE TRIGGER 余额约束ON储蓄账:
余额n/2
l__ 读:对n个复本中的n-k+1个复本上加S锁
l___保持所有锁到全局事务结束(EOT)
4. 主结点法
9.7.2__ 全局死锁的检测
第十章_____ 数据依赖和关系模式的规范化
10.1 关系模式设计中的一些语义问题
Functional Dependency (FD): X→Y
R(S#,C#,G.,TN,D)
F={{S#,C#}→G, C#→TN, TN→D}
计算机系要通知教师准备给学生补考,可以"查询计算机系所开课程的不及格学生的学号,不及格课程号以及任课教师的姓名":
SELECT S#,C#,TN
FROM R
WHERE D='CS'AND G='F';
问题:
1. 数据冗余太大
2. 更新异常(update anomalies):
l____ modification anomaly
l____ insertion anomaly
l____ deletion anomaly
solution:
分解——关系模式规范化:
SCG(S#,C#,G)
CTN(C#,TN)
TND(TN,D)
_
SELECT S#,C#,TN
FROM SCG,CTN,TND
WHERE SCG.C#=CTN.C# AND CTN.TN=TND.TN AND D='CS' AND G='F';
10.2 函数依赖
R U={A1,A2,…,An} F r
Define 10.2-1 functional dependency
R(A1,A2,…,An) X U, Y U t1,t2 r 若t1[X]=t2[X], 则t1[Y]=t2[Y], X→Y
Trivial functional dependency: 若Y X,则X→Y
X →Y
若X→Y,Y→X则X Y
Define 10.2-2 full (partial) functional dependency
R(A1,A2,…,An) X U, Y U 且X≠Y,如X→Y,且 X' X,使得X'→Y,则称X Y,否则,
X Y.
{S#, C#} TN {S#, C#} G
Define 10.2-3 transitive functional dependency
R(A1,A2,…,An) X U, Y U, Z U,且X≠Y≠Z,若X→Y,Y → X,Y→Z,则称X Z.
Define 10.2-4 逻辑蕴涵
F是R的FD的集合,X→Y是R的一个FD,若一关系模式满足F,则必然满足X→Y,称F逻辑蕴涵X→Y:F╞ X→Y
Define 10.2-5 closure
函数依赖集合F所逻辑蕴涵的函数依赖的全体称为F的闭包,记为F+,即F+={X→Y|F╞ X→Y }
Armstrong's axioms:
A1: reflexivity
若Y X U,则X→Y.
A2: augmentation
若X→Y,且Z U,则XZ→YZ.
A3: transitivity
若X→Y,Y→Z,则X→Z.
合并规则:{X→Y,X→Z}╞ X→YZ
引理10.2-1 Armstrong公理是正确的(sound),即如果F成立,则由F根据Armstrong公理所推导的函数依赖总是成立的.
引理10.2-2 下列三条推理规则是正确的:
(1)__ the union rule:{X→Y,X→Z}╞ X→YZ
(2)__ the pseudo transitivity rule:
{X→Y,WY→Z}╞ XW→Z
(3)__ the decomposition rule:
如果X→Y且Z Y,则X→Z成立.
结论:由分解规则,若X→{ A1,A2,…,Ak},则X→Ai(i=1…k);由合并规则,若X→Ai(i=1…k),则X→{A1,A2,…,Ak},故X→{ A1,A2,…,Ak} X→Ai(i=1…k)
Define 10.2-6 closureX+
设X U,则属性集X关于FD集F的闭包X+={A|A∈U,且X→A可由Armstrong's axioms导出}
引理10.2-3 X→Y可由Armstrong's axioms导出 Y X+.
定理10.2-1 Armstrong's axioms是正确的,完备的(complete).
X+={A|A∈U,且X→A∈F+}或X+={A|A∈U,且F╞ X→A}
F+={X→Y|X→Y可由Armstrong's axioms从F导出}
算法10.2-1 求X+
Input: X U,F
Output: X+
方法:按下列方法依次求X(0),X(1),……X(i),……
(1)__ 初始化:X(0)=X,i=0;
(2)__ 求B={A|( V)( W)(V→W∈F∧V X(i)∧A∈W)}
(3)__ X(i+1)=B∪X(i)
(4)__ X(i+1)=X(i)
(5)__ 不等,i=i+1,返回(2).
(6)__ 相等,X+=X(i)
例10-1 设F={AB→C,D→EG,C→A,BE→C,BC→D,CG→BD,ACD→B,CE→AG},计算(BD)+.
解:X(0)=BD
找左部为BD的子集的函数依赖,只有D→EG
X(1)=BD∪EG=BDEG
找左部为BDEG的子集的函数依赖,有D→EG,BE→C
X(2)= X(1)∪EGC=BCDEG
找左部为BCDEG的子集的函数依赖,有D→EG,C→A,BE→C,BC→D,CG→BD,CE→AG
X(3)= X(2)∪ABCDEG=ABCDEG
(BD)+=U
算法10.2-1改进:
1. 若X(i)=U,则迭代结束,X+=U
2. 在每次迭代中,用过的FD可不必再选出来,因其对结果已不再增加属性.
Define 10.2-7 FD set F,G,若F+=G+,则称FG等价.
引理10.2-4 F+=G+ F G+,G F+
引理10.2-5 任一函数依赖集F总可以为一右部恒为单属性的函数依赖集所覆盖.
Define 10.2-8 函数依赖集F如果满足下列条件,则称为极小函数依赖集或最小覆盖.
(1)F中每个函数依赖的右部为单属性.
(2)F中不存在这样的函数依赖X→A,使得F -(X→A)与F等价.
(3)在F中也不存在这样的X→A,使得F-(X→A)∪(Z→A)与F等价,式中Z X.
定理10.2-2 任一函数依赖集F都与一最小函数依赖集F'等价.F'称为F的最小覆盖.
10.3 多值依赖
X→→Y
X→→U-X-Y
Define 10.3-1 设X,Y是关系模式R的属性集,如果对于R的任何值r,都有如下性质,则称R满足X→→Y.
如果r中存在两个元组s,t,使得
s[X]=t[X]
则r中必然存在两个元组u,v,使得
u[X]=v[X]=s[X]=t[X]
u[Y]=t[Y]且u[U-X-Y]=s[U-X-Y]
v[Y]=s[Y]且v[U-X-Y]=t[U-X-Y]
10.4 连接依赖
例10-2 设有一关系SPJ(S#,P#,J#),S#表示供应商号,P#表示零件号,J#表示工程号.SPJ表示供应关系,即某供应商供应某零件给某工程.如果此关系的语义满足下列条件:
SPJ=SPJ[S#,P#] SPJ[P#,J#]
SPJ[J#,S#]
10.5 关系模式的分解及其问题
Define 10.5-1 设有一关系模式R(U),若用一关系模式的集合{R1(U1),R2(U2),…Rk(Uk)}来取代,
其中,U= ,则称此关系模式的集合为R的
一个分解,以ρ={Rl,R2,…,Rk}表示.
Define 10.5-2 F在属性集Ui( U)上的投影定义为
关系模式的分解主要有两种准则:
(1)__ 只满足无损分解要求.
(2)__ 既满足无损分解要求,又满足保持依赖要求.
关系R(ABCD),F={A→B,C→D},则分解ρ={R1(AB),R2(CD)}
算法 10.5-1 检验一个分解是否无损分解.
Input: 关系模式R(A1,A2,…,An);
R上有FD集F;
R上的分解ρ={Rl,R2,…,Rk}.
Output: ρ是否无损分解.
方法:建立n列,k行的矩阵M,其中每列对应于R的一个属性,每行对应于ρ中的一个关系模式.
则,ρ不是无损分解.
例10-4 R(ABCDE),ρ={R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE)}是R的一个分解.在R上有下列FD:A→C,B→C,C→D,DE→C,CE→A.试判断ρ是否为无损分解.
例10-5 在例10-3中:
10.6 关系模式的规范化
1NF(Normal Form)
2NF
3NF
BCNF
4NF
5NF
R(S#,C#,G.,TN,D)
F={{S#,C#}→G, C#→TN, TN→D}
R分解为R1(S#,C#,G)和R2(C#,TN,D)
R2可分解为R3(C#,TN)和R4(TN,D)
算法10.6-1 NF2 1NF
横向或纵向展开.
_
算法10.6-2 1NF 2NF
即消除非主属性对键的PFD.
设R(K1,K2,A,B),K1+K2为键,AB为非主属性.F={K1→A,K1K2→B}
则将R分解为R1(K1,A)和R2(K1,K2,B)
_
算法10.6-3 2NF 3NF
即消除非主属性对键的TFD.
设R(K,A,B,C),K为键,ABC为非主属性.F={K→A,K→B,B→C}
则将R分解为R1(B,C)和R2(K,A,B)
可以直接从1NF 3NF
例10-6 R(ABCD)F={AB→C,B→D,BC→A}
键:AB和BC,则ABC为主属性,D为非主属性,D部分FD于键,分解为:
R1(BD)和R2(ABC)
_
例10-7 R(CTHRSG),C-课程,T-教师,H-时间,R-教室,S-学生,G-成绩.F={C→T,HR→C,HT→R,CS→G,HS→R}
键:HS,HS为主属性,CTRG为非主属性.
HS→R(已知),HS→H(平凡FD)HS→HR(合并规则),HR→C(已知),HS→C(传递律)
C→T(已知),HS→T(传递律)
HS→R(已知)
HS→S(平凡FD)HS→C(已求出)HS→CS(合并规则)CS→G(已知),HS→G(传递律)
处理HS→G(TFD)得R1(CSG)原R变为R(CTHRS)
处理HS→T(TFD)得R2(CT)原R变为R(CHRS)
处理HS→C(TFD)得R3(HRC)原R变为R4(HRS)
即R分解为:
R1(CSG):学生的各门课程的成绩
R2(CT):每门课程的教师
R3(HRC):每门课的上课时间和在每个时间的上课教室
R4(HRS):学生在每个时间的上课教室.
第十一章___ 数据库设计
11.1___ Introduction
数据库设计的基本任务是:根据—个单位的信息需求,处理需求和数据库的支撑环境(包括DBMS,操作系统和硬件),设计出数据模式(包括外模式,逻辑(概念)模式和内模式)以及典型的应用程序.
信息需求——静态要求
处理需求——动态要求
数据库设计方法:
1._Data-oriented approach
2._Process-oriented approach
数据库设计特征:
1. Iterative
2. Tentative
3. Multistage
数据库设计步骤:
1. 需求分析
2. 概念设计
3. 逻辑设计
4. 物理设计
11.2___ 需求分析
11.2.1_ 需求分析的任务
需求分析的任务是通过详细调查现实世界要处理的对象(组织,部门,企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能.新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库.
11.2.2_ 需求分析的方法
调查与初步分析用户的需求通常需要四步:
①首先调查组织机构情况.包括了解该组织的部门组成情况,各部门的职责等,为分析信息流程作准备.
②然后调查各部门的业务活动情况.包括了解各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么.这是调查的重点.
③在熟悉了业务活动的基础上,协助用户明确对新系统的各种要求,包括信息要求,处理要求,完全性与完整性要求,这是调查的又一个重点.
④最后对前面调查的结果进行初步分析,确定新系统的边界,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成.由计算机完成的功能就是新系统应该实现的功能.
常用的调查方法有以下几种:
①跟班作业.通过亲身参加业务工作来了解业务活动的情况.这种方法可以比较准确地理解用户的需求,但比较耗费时间.
②开调查会.通过与用户座谈来了解业务活动情况及用户需求以相互启发.
③请专人介绍.
④询问.对某些调查中的问题,可以找专人询问.
⑤设计调查表请用户填写.如果调查表设计得合理,这种方法很有效,也易于为用户接受.
⑥查阅记录.即查阅与原系统有关的数据记录.
图11-2 需求分析的策略
图11-3 系统高层抽象图
图11-4 需求分析的过程
实例:假设要开发一个学校管理系统.经过可行性分析和初步需求调查,抽象出该系统最高层数据流图,如图所示.该系统由教师管理子系统,学生管理子系统,后勤管理子系统组成.每个子系统分别配备一个开发小组.
其中学生管理子系统开发小组通过做进一步的需求调查,明确了该子系统的主要功能是进行学籍管理和课程管理,包括学生报到,入学,毕业的管理,学生上课情况的管理.通过详细的信息流程分析和数据收集后,他们生成了该子系统的数据流图,如图所示.
图11-5 学校管理系统最高层数据流图
图11-6 学籍管理的数据流图
图11-7 课程管理和数据流图
11.2.3_ 数据字典
数据字典通常包括数据项,数据结构,数据流,数据存储和处理过程5个部分.
1.数据项
数据项是不可再分的数据单位.对数据项的描述通常包括以下内容
数据项描述={数据项名,数据项含义说明.别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系}
2.数据结构
数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}
3.数据流
数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
4.数据存储
数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流组成:{数据结构},数据量,存取方式}
5.处理过程
处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
以上述学生学籍管理子系统为例,简要说明如何定义数据字典.
该子系统涉及很多数据项,其中"学号"数据项可以描述如下:
数据项:学号
含义说明:唯一标识每个学生
别名:学生编号
类型:字符型
长度: 8
取值范围;00000000至99999999
取值含义:前2位标别该学生所在年级,后6位按顺序编号
与其他数据项的逻辑关系:……
"学生"是该系统中的一个核心数据结构,它可以描述如下:
数据结构:学生
含义说明:是学籍管理子系统的主体数据结构,定义了一个学生的有关信息
组成:学号,姓名,性别,年龄,所在系,年级
_
数据流"体检结果"可描述如下:
数据流:体检结果
说明:学生参加体格检查的最终结果
数据流来源:体检
数据流去向:批准
组成:……
平均流量:……
高峰期流量:……
_
数据存储"学生登记表"可描述如下:
数据存储:学生登记表
说明:记录学生的基本情况
流入数据流:……
流出数据流:……
组成:
数据量:每年3000张
存取方式:随机存取
_
处理过程"分配宿舍"可描述如下:
处理过程:分配宿舍
说明;为所有新生分配学生宿舍
输入:学生,宿舍
输出:宿舍安排
处理:在新生报到后,为所有新生分配学生宿舍.要求同一间宿舍只能安排同一性别的学生,同一个学生只能安排在一个宿舍中.每个学生的居住面积不小于3平方米.安排新生宿舍其处理时间应不超过15分钟.
11.3___ 数据库的概念设计
11.3.1_ 数据库概念设计的基本方法
1. Centralized schema design approach
2. View integration approach
11.3.2_ 视图设计
1.___自顶向下
2.___自底向上
3.___由内向外
11.3.3_ 视图集成
1._ 确认视图中的对应和冲突
(1)_____ 命名冲突
(2)_____ 概念冲突
(3)_____ 域冲突
(4)_____ 约束冲突
2. 对视图进行某些修改,解决部分冲突
3._ 合并视图,形成全局模式
11.4___ 数据库的逻辑设计
11.4.1_ E-R图到关系模式的转换
1_ 命名和属性域的处理
2_ 非原子属性的处理
3__ 弱实体的处理
4___ 联系的转换
(1)_____ 1:1联系
若E1全参与:
R1(k,a,h,s)
R2(h,b)
若E1,E2均部分参与:
R1(k,a)
R2(h,b)
R3(k,h,s)
(2)_ 1:N联系
若E2全参与:
R1(k,a)
R2(h,b,k,s)
若E2部分参与:
R1(k,a)
R2(h,b)
R3(h,k,s)
(3)_ M:N联系
R1(k,a)
R2(h,b)
R3(k,h,s)
(4)_多元联系
R1(k,a)
R2(h,b)
R3(j,c)
R4(k,h,j,s)
5__普遍化/特殊化层次的转换
6__范畴的转换
11.4.2_ 逻辑模式的规范化,调整和实现
1)____ 规范化,
2)____ 适应DBMS限制条件的修改,
3)____ 满足性能,存储空问等要求的调整,
4)____ 用DBMS所提供的DDL实现逻辑模式
1. 改善数据库性能的调整
(1)__ 减少连接运算
(2)__ 减小关系的大小和数据量
(3)__ 尽可能使用snapshot
2. 节省存储空间的调整
(1)__ 节省每个属性所占的空间
(2)__ 采用dummy attribute减少重复数据所占存储空间
11.4.3_ 外模式的设计
11.5___ 数据库的物理设计
11.5.1_ 簇集设计
11.5.2_ 索引的选择
凡是满足下列条件之一的属性或表,不宜建立索引:
①不出现或很少出现在查询条件中的属性.
②属性值很少的属性.例如属性"性别"只有两个值,若在其上建立索引,每个属性值对应一半的元组;用索引检索,还不如顺序扫描.
③属性值分布严重不均的属性.例如学生的年龄往往集中在几个属性值上,若在年龄属性上建立索引,则在检索某个年龄的学生时,会涉及到相当多的学生,用索引查询,还不如顺序扫描.
④经常更新的属性或表.因为更新时索引需要维护.
⑤过长的属性,例如超过30个字节.因为在过长的属性上建立索引,索引所占的存储空间较大,而且索引级数也随之增加,有诸多不利之处.如果实在需要在其上建立索引,必须采取索引键压缩措施.
⑥太小的表,例如小于六个物理块的表.因为采用顺序扫描最多也不过六次I/O,不值得采用索引.
凡符合下列条件之一,可考虑在有关属性上建立索引,下面所指的查询都是常用的或重要的查询:
①主键和外键上一般都建有索引
l__ 有利于主键唯一性检查
l___有助于引用完整性约束检查
l__ 可以加速以主键和外键为连接属性的连接操作
②对于以读为主或只读的表,只要需要,且存储空间允许,可以多建索引.
③对于等值查询(即查询条件以等号为比较符),如果满足条件的元组是少量的,例如小于5%,可以考虑在有关属性上建立索引.
④对于范围查询(即查询条件以,≤,≥等为比较符),最好在有关的属性上建立簇集索引.如果已在其它属性上建立族集索引,且满足条件的元组数一般低于20%,可以考虑在有关属性上建立非簇集索引.
⑤有些查询可以从索引直接得到结果,不必访问数据块.对于这种查询,在有关属性上建立索引是有利的.
11.5.3_ 分区设计
11.6___ 分布式数据库的设计
11.6.1_ 数据的分割设计
11.6.2_ 数据的分布设计

·上一篇:SWI-211使用UML进行面向对象的分析与设计
·下一篇:"艺术与设计学院"
赞助商链接
下载链接
最新文档
相关下载
最热搜索
<%=Doc.Fun.GetTemplate(Components.Template.TemplateType.Foot)%>