考试时间:2021.7.7 题型:选择,填空,判断,简答题,综合设计题:
数据库是长期存储在计算机内、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度,较高的数据独立性和易扩展性,并为各种用户共享。具有永久存储、有组织和可共享等基本特点。(P4)
是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其应用开发工具)、应用系统、数据库管理员和用户构成。
数据模型组成三要素:数据结构、数据操作、数据的约束条件。
关系模式的数据结构是一张二维表,它由行和列组成。
包括实体完整性、参照完整性、用户自定义完整性。
关系数据模型中的数据操作是集合操作,操作对象和操作结果都是关系。只关心“干什么”,不关心“怎么干”
结构简单、用户易懂易用,数据独立性强,缺点是查询效率低,要进行优化。
数据库系统的模式结构:数据库系统是由外模式、模式、内模式三级构成
模式:也称逻辑模式,是数据库中全体数据逻辑结构(数据项的名字、类型、取值范围等)和特征(数据之间的联系以及数据有关的安全性、完整性要求)的描述,是所有用户的公共数据视图。
外模式:也称子模式或用户模式,他是数据库用户(包括应用程序员和最终用户)看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。通常是模式的子集。一个数据库可有多个外模式。
内模式:内模式也称存储模式,它是数据物理结构和存储结构的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。
数据库的二级映像:
外模式/模式映像:外模式(视图)与逻辑模式对应联系, 实现数据的逻辑独立性。
数据的逻辑独立性:当模式改变时,由数据库管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性。
模式/内模式映像:模式与内模式之间的一对一映射, 实现数据的物理独立性。
数据的物理独立性:当数据库的存储结构改变了,由数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性。
这两种映像当外部或者内部发生改变的时候,可以仅通过映射的改变,来保证外/内模式不改变,从而保证应用程序不改变。外模式→数据的逻辑独立性,内模式→数据的物理独立性
1、关系数据库系统:支持关系模型的数据库系统。
2、关系模型的组成:关系数据结构、关系操作集合、完整性约束条件>三部分。
3、关系数据结构
特点:简单的数据结构表达丰富的语义。
4、关系操作
采用集合操作:操作对象与操作结果为集合,
常用的操作
5、完整性约束
允许定义三类完整性:实体完整性、参照完整性、用户自定义完整性。
关系系统自动支持的完整性:实体完整性、参照完整性。
一张扁平的二维表,描述现实世界的实体以及实体间的联系
侯选码:若关系中某一属性组的值能唯一标识一个元组,则称该属性组为侯选码
主码:若一个关系中有多个侯选码,则选其中一个作为主码。
主属性:主码的诸属性
非主(码)属性:不包含在任何侯选码中的属性
关系的三种类型:基本表(实际存在表)、查询(临时)表(查询结果)、视图表(虚表:由基本表与其他试图表导出)
型与值: 关系(表)是数据库的值,关系模式是数据库的型。型是相对稳定的,值是相对变动的。
含义:在一个给定的现实世界的领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。
关系数据库的型和值:型即关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。关系模式的值也称为关系数据库,是这些关系模式在某一时刻对应的关系的集合。
5个基本操作:选择、投影、并、差、笛卡尔积,其他操作可以用基本操作表示
交运算操作表达:R ∩S = R –(R-S),连接操作表达:
要点:主属性不能取空值,且取值唯一。
现实世界的语义要求:一个基本关系通常对应现实世界的一个实体集,现实世界的实体是可以区分的,即它们具有某种唯一标识,在关系模型中以主码作为唯一标识。
关系与关系之间存在着引用关系:因为现实世界的实体之间存在某种联系,而关系模型中实体及实体间的联系都是用关系来描述的。
要点:
反映某一具体应用所涉及的数据必须满足的语义要求。
通常有三类:非空约束(not null)、唯一约束(unique)、检查约束(check)
何为关系代数:是抽象的查询语言,它用关系运算来表达查询。主要研究关系(表)运算,运算对象是关系,运算结果也是关系。
关系运算分两类:
1)传统的集合运算:并、交、差、广义笛卡尔积。运算只涉及行,将关系看成是行 (元组)的集合。
2)专门的关系运算:选择、投影、连接、除。运算既涉及行也涉及列。
专门关系运算(运算结果着重掌握语义)
SQL:结构化查询语言的简称, 是关系数据库的标准语言。SQL 是一种通用的、功能极强的关系数据库语言,是对关系数据存取的标准接口, 也是不同数据库系统之间互操作的基础。集数据查询、数据操作、数据定义、数据控制功能于一体。
SQL 功能 | 动词 |
---|---|
数据定义 | CREATE,DROP, ALTER |
数据查询 | SELECT |
数据操纵 | INSERT,UPDATE,DELETE |
数据控制 | GRANT,REVOTE |
各个DBMS 产品在实现标准SQL 语言时各有差别,一般都作了某些扩充
数据定义的基本对象为表、索引、视图(导出表)
操作对象 | 操作方式 | ||
---|---|---|---|
创建 | 删除 | 修改 | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
索引 | CREATE INDEX | DROP INDEX | |
视图 | CREATE VIEW | DROP VIEW |
基本表独立存在,不同的RDBMS 产品,表的物理存储会有不同的方式。
索引依附于基本表。其作用是为了加快数椐的访问速度。两类:聚族索引与非聚簇索引
视图为导出表(基于基本表的虚表),只存储视图定义,不存放视图对应的数据, 数据存放在导出视图的某本表中。(对视图操作最终通过视图的定义变为对基本表操作)
CREATE TABLE <表名>
(
<列名1> <数椐类型〉[列级完整性约束条件],
〈列名2〉<数据类型>[列级完整性约束条件]…],
<表级完整性约束条件>,
);
格式说明:create table为关键字,表名由用户自定义,属性由逗号分割,结束符为;
完整性规则
(1)实体完整性不可少(NOT NULL UNIQUE)
(2)列级约束与表级约束的区别:
(3)自定义
student(no, name, sex, age, dept) // 外码
dept department(dept, dept_name, location) // 主码 dept,
create table student
(no char(6) primary key,
name char(6),
sex char(l),
age integer check(age<=30), //自定义约束
dept char(8) references department(dept), // 列级约束 //
constraint f_k foreign key (dept) references department(dept),// 表级约束
);
create table department
(
dept char(8) primary key,
dept_name char(20),
location char(20),
);
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ] //增加新列
[ ADD <表级完整性约束><列名>] //增加列约束
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ] //删除列
[ DROP CONSTRAINT<完整性约束名><列名> [ RESTRICT | CASCADE ] ] //删除列约束
[ALTER COLUMN <列名><数据类型> ] ; //修改列定义
RESTRICT:检查约束;CASCADE:级连
Drop table <表名 >;
语句格式
SELECT [ALL|DISTINCT] 目标列表达式1,目标列表达式2, … //指定要显示的属性列,DISTINCT,消除相同行,默认ALL
FROM 表名或视图名1,表名或视图名2,… //指定查询对象(基本表或视图)
WHERE <条件表达式> //子句不能用于聚集函数
GROUP BY <列名1> //对查询结果按指定列(目标列)的值分组,该属性列值相等的元组为一个组
HAVING <条件表达式> //只有满足指定条件的组才予以输出,在分组的基础上聚集函数计算
ORDER BY <列名2>[ ASC|DESC ]; // 对查询结果表按指定列值的升序或降序排序
注意:
WHERE子句作用于基表或视图,从中选择满足条件的元组
HAVING短语作用于组,先按目标列分组,配合函数从中选择满足条件的组
Select <目标列表达式> from <表名>;
Select * from <表名>; //也可以指定列的顺序
Select sname, 1999-sage from student;
select distinct sno from sc; //唯一,缺省为 all(不消除重复元组)
条件:where <条件表达式>
① 比较大小
select grade from sc where grade<60;
②确定范围 between… and 和 not between …….and
③确定集合:in<值表>、not in <值表>
④字符匹配 LIKE
%任意长度字符串(可以0个字符)
. WHERE Sname LIKE ‘刘%’;
_任意单个字符
转义符ESCAPE ’<换码字符> ’
*select cno,cname from course where cname like ‘%-%’ escape ’\’;
⑤涉及空值is nul, is not null
*select * from couree where ccredit is null; //或 ccredit is not null;
⑥多重条件
用and或or连接多个查询条件,考虑优先级and 〉or
in与or的关系
select sname from student where sdept = '信息系’and sage<21;
ORDER BY <列值> 升序:ASC; 降序:DESC;缺省值为升序
统计元组个数 COUNT(*)
统计一列中值的个数 COUNT ([DISTINCT|ALL] <列名>)
计算一列值的总和(此列必须为数值型)SUM ([DISTINCT|ALL] <列名>)
计算一列值的平均值(此列必须为数值型)AVG ([DISTINCT|ALL] <列名>)
求一列中的最大值和最小值 MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
指定DISTINCT短语,取消指定列重复值,ALL不取消重复值,默认ALL
聚集函数不能和where条件语句一起用,得先分组,再用HAVING
GROUP BY子句分组: 细化聚集函数的作用对象
如果未对查询结果分组,聚集函数将作用于整个查询结果
对查询结果分组后,聚集函数将分别作用于每个组
按指定的一列或多列值分组,值相等的为一组(组标签)
例:
select studentsno, sname, ssex, sage, sdept, cno,grade
from student,sc
where student.sno=sc.sno;
表名前缀的作用:避免混淆。属性名在不同表中如为唯一,则可以省略表名前缀。
cno只出现在sc表中,所以可不加前缀。Sno在两个表中都有,必须加前缀。
含义:where子句中有多个査询条件
指将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询。
需要特别指出:子查询中不能使用排序(ORDER BY)子句,排序子句永远只能对最终查询结果排序
运算符及语义
> ANY 大于子查询结果中的最小值
> ALL 大于子查询结果中的最大值
< ANY 小于子查询结果中的最大值
< ALL 小于子查询结果中的最小值
SELECT “列名1” FROM “表格名” WHERE “列名2” IN (‘值一’, ‘值二’, …)
如:查询选修了逻辑电路 课程的电气工程系 的学生姓名 。
SELECT SNAME FROM S
WHERE SNO IN
(SELECT SNO FROM SC
WHRER CNO IN(SELECT CNO FROM C
WHRER CNAME=’逻辑电路’))
AND DEPT=’电气工程’;
等价于:
包括插入、修改、删除三条语句
1)插入元组:将新元组插入指定表中
insert into <表名> [(<属性列1>[,<属性列2 >]…)]VALUES (<常量1> [,<常量2>] … )
2)插入子查询:
INSERT INTO <表名> [(<属性列1> [,<属性列2>… )] 子查询;
注意:子查询SELECT子句目标列必须与INTO子句匹配
语句格式:
UPDATE <表名> SET <列名1>=<表达式1>,<列名2 >=< 表达式2>… [WHERE< 条件>];
功能:
带子查询的修改语句
例:将计算机系全体学生成绩罝0
update sc set grade=0 where sno in (select sno from student where student.sdept=’计算机’);
语句格式
DELETE FROM <表名> [WHERE <条件>];
功能:删除指定表中满足WHERE子句条件的元组
WHERE子句
注意:对表结构的更新(数据定义)与表中数据的增、删、改(数据操纵),命令不一样
create view <视图名>[(<列名>[,<列名>]…)] as <子査询>[with check option ];
说明:
1)子査询通常不允许含有order by子句和distinct 短语。
2)with check option保证更新(插入、修改、删除)时满足视图定义中的谓词条件(子查询中的条件表达式 )
3)省略组成视图的各个属性列名时,视图属性列由子查询中的SELECT子句目标列中的诸字段组成。
** 视图是一个虚表,不存储数据**,对它的修改最终要转换为对基本表的修改。
1)从一个或多个基本表(或视图)导出的表。
2)在数据库(数据字典)中只存放视图的定义,而不存放视图所对应的数据,这些数据仍然放在原来的基本表中。
3)定义视图时,并不执行其中的SELECT语句,只有在使用视图时,才执行。
执行过程
1)进行有效性检查:检查涉及的表、视图等是否存在于数据序中,
2)转换成对基本表的查询:从数据字典中取出查询涉及到视图的定义,将定义中的子查询和用户对视图的查询结合起来。
用户就可以像对基本表进行查询一样对视图查询
1)建立在基本表上的单表视图
2)建立在基本表上的多表视图(普通多表、带表达式、分组)
例:建立信电系选修了 1号课程的学生视图,视图属性包括sno,sname,grade
create view is_studentl(sno, sname, sage)
as
select student.sno,sname,grade from student,sc
where sdept=’计算机’ and student.sno=sc.sno and sc.cno=l;
dropview<视图名>CASCADE;
使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除
用户角度:查询视图与查询基本表相同
注意要点
一般来说DBMS对行列子集视图的查询均能直接进行正确转换,其它视图不一定能保证,对这类视图进行查询时应尽量避免视图中的特殊属性出现在查询中。
目前各个关系数据库系统产品一般都只允许更新行列子集视图,多表导出视图不可更新。
//行列子集视图的概念(重要)
从单个基本表中导出,只是去掉基本表的某些行和某些列,但保留了码的虚表。
从视图的定义中可以看出
同一数据针对不同用户可以定义不同视图
为何说只提供一定程度的逻辑独立性,由于对视图的更新是有条件的,因此基本表中的修改数据的语句可能仍会因基本表结构的改变而改变。
不同部门只能看到本部门的数椐
课本第三章习题第三题答案:
(1) select * from S where A=10;
(2) select A,B from S;
(3) select A,B,S.C,S.D,E,F from S ,T where S.C=T.C and S.D=T.D;
(4) select * from S ,T where S.C=T.C;
(5) select * from S ,T where S.A (6) select S.C,S.D,T.* from S ,T ; 求解题: 设有学生表S(SNO, SN) (SNO为学生号,SN为姓名)和学生选修课程表SC (SNO, CNO,CN,G) (CNO为课程号,CN为课程名,G为成缋),试用SQL语言完成以下各题: (1)建立一个视图V-SSC (SNO,SN,CNO,CN,G),并按CNO升序排序; 解:CREATE VIEW V-SSC (SNO,SN,CNO,CN,G) AS SELECT S.SNO, SN,CNO, CN,G FROM S, SC WHERE S.SNO=SC.SNO ORDER BY CNO (2)从视图V-SSC上查询平均成绩在90分以上的SN、CN和G。 解:SELECT SN, CN, G FROM V-SSC GROUP BY SNO HAVING AVG (G) >90 数据库的安全性 :防止因用户非法使用数据库造成数据泄密、更改 或破坏 。 数据库系统的安全保护措施是否有效是数据库系统的主要性能指标之一 。 是系统提供的最外层安全保护措施。只让合法用户进入计算机系统。 方法:系统提供一定的方式让用户标识自己的名字或身份,系统内部记录着所有用户的标识。每次用户要求进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核对,通过鉴定后才提供机器使用权。为了进一步核实用户,在输入用户标识后, 系统常常要求用户输入口令。口令通常以形式显示。 常见:静态口令,动态口令,生物特征,智能卡 用户对不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限, 用户还可将其拥有的存取权限转授给其他用户。非常灵活,可能存在数据的无意泄露。 授权:定义用户的存取权限,既是这个用户可以在哪些数据对象上进行哪些类型的操作。(存取权限的两要素为:数据对象 和操作类型 。) 授权方法: 1)授予:GRANT语句 GRANT <权限1>[,<权限2>]… ON <对象类型> <对象名>[,<对象类型> <对象名>]… TO <用户>[,<用户>]… [WITH GRANT OPTION]; 说明:权限是指SELECT,UPDATE,INSERT,DELETE,ALL PRIVILIGES(全部权限) 对象类型:表或视图等;对象名:表名或视图名 用户:系统中已存在的合法用户,PUBLIC指所有用户 WITH GRANT OPTION:有,此用户可以把自有权限再授予其他用户;没有,不能传播 2)回收:REVOKE语句 REVOKE <权限>[,<权限>]… ON <对象类型> <对象名>[,<对象类型><对象名>]… FROM <用户>[,<用户>]…[CASCADE | RESTRICT]; CASCADE表示级联收回。RESTRICT,有约束,有子授权拒绝 3)角色:被命名的一组与数据库操作相关的权限,是权限的集合。 创建角色:CREATE ROLE <角色名> 给角色授权: GRANT <权限>[,<权限>]…ON <对象类型>对象名 TO <角色>[,<角色>]… 角色授予其他的角色或用户: GRANT <角色1>[,<角色2>]…TO <角色3>[,<用户1>]… 每一个数据对象(客体)被(强制地)标以一定的密级,每一个用户(主体)也被(强制地)授予某一个级别的许可证,只有具有某一许可证级别的用户才能存取某一个密级的数据对象。比较严格。 强制存取控制规则: (1)仅当主体的许可证级别大于或等于 客体的密级时,该主体才能读取相应的客体 (2)仅当主体的许可证级别小于或等于 客体的密级时,该主体才能写相应的客体 数据库保护 又叫做数据库控制,分为安全性控制,完整性控制,并发性控制和数据恢复。 日志文件用来记录对数据库中数据进行的每一次更新操作。 数据库的完整性是指数据的正确性 和相容性 。数据库是否完整性关系到数据库系统能否真实反映现实世界。 **数据库安全性与数据库完整性间的联系与区别:**安全性是防止用户非法使用数据库,包括恶意破坏数据和越权存取数据。完整性则是防止合法用户使用数据库时向数据库中加入不合语义的数据。 1、采用完整性控制机制实现数据的完整性,应该具有三方面的功能: 1)定义功能:提供定义完整性约束条件机制,有实体完整性、参照完整性及用户定义约束完整性 2)检査功能:检査用户发出的请求是否违背了完整性约束条件。 3)违约处理:如果发现用户操作请求使数据库违背了完整性约束条件时,采取一定的动作来保证数据的完整性。 完整性约束命名子句 CONSTRAINT 自取名 CHECK (属性需要满足的条件) 要能够掌握主码的定义(PRIMARY KEY), 外码的参照性定义: CONSTRAINT 约束名 FOREIGN KEY (本表外码属性名)REFERENCES 外表名(外表主码名); 自定义检查语句定义:CHECK (<条件表达式>) 案例:假设有下面两个关系模式:部门(部门号,名称,经理名,电话),其中部门号为主码;职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码,职工年龄不得超过60岁,部门号为外码,参照的部门关系中的部门号属性。 请用SQL语言定义这两个关系模式,要求实现3个完整性约束条件。 CREATE TABLE 部门 (部门号NUMBER(2)PRIMARY KEY 名称VARCHAR(10) 经理名VARCHAR(10) 电话CHAR(12) ); CREATE TABLE 职工 (职工号NUMBER(4)PRIMARY KEY 姓名VARCHAR(10) 年龄NUMBER(2)CHECK(年龄<=60) 职务CHAR(12) ); 工资 NUMBER(7,2) 部门号NUMBER(2) CONSTRAINT FK_部门 FOREIGN KEY (部门号)REFERENCES 部门(部门号); 断言: CREATE ASSERTION <断言名> 任何对断言中所涉及的关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行 触发器 触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 触发器保存在数据库服务器中 任何用户对表的增、删、改操作均由服务器自动激活相应的触发器 不断解决关系中插入异常、删除异常、数椐冗余度大、修改复杂问题。 指将一个低一级范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式的集合的过程。(一个x级的范式,通过模式分解,变成x+1级的范式) 函数依赖是关系模式内属性间最常见的一种依赖关系(通过A能够找到确切的B) 在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但Y不是X的子集,则称X→Y是非平凡函数依赖。 例子:{a,b}→{c} 同时{a}→{c}或者{b}→{c} 则{c}部分依赖于{a,b} 在关系模式R(U)中,如果X→Y,Y→Z,且Y不是X的子集,X不函数依赖于Y, 则称Z传递函数依赖于X。 Std(Sno,Sdept,Mname)有 Sno→Sdept,Sdept→Mname,Mname 传递函数依赖于 Sno 设K为关系模式R(U,F)中属性或属性组。若U完全依赖于K,则K称为R的一 个侯选码。若关系模式中有多个侯选码,则选定一个作为主码。 1NF:关系模式R的所有属性都是不可分割的基本数椐项,则R∈1NF(非主属性函数依赖于码) 2NF: 定义:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF 3NF: 定义 :设关系模式R∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z不是Y子集), 使得X→Y,Y→Z成立,Y ↛X不成立,则称R ∈ 3NF。 BCNF:若一个关系模式的每一个决定因素都包含码,则该关系模式属于BCNF。 主属性对主码完全函数依赖,不能存在部分依赖和传递依赖。(既不允许有关键字决定关键字的情况) 在函数依赖范畴内,BCNF是最高范式 ,消除了插入和删除异常。 关系模式规范化的基本步骤 1NF 一个关系模式R的所有属性都是不可分的基本数据项 ↓ 消除非主属性对码的部分函数依赖 2NF 每个非主属性都完全函数依赖于主码 ↓ 消除非主属性对码的传递函数依赖 3NF 每个非主属性都不传递依赖于主码。 ↓ 消除主属性对码的部分和传递函数依赖 BCNF 每个主属性都不传递依赖和不部分函数依赖于主码。 Armstrong公理系统 推理规则: 设F为属性集U上的一组函数依赖,X、Y Í U, XF+={ A|X→A能由F根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F的闭包。 说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合。 求解闭包步骤及方法: ①令X(0)=X,i=0,(属性集中的属性必是闭包组成部分) ②求B,这里B ={ A |($ V)( $ W)(V→WÎF ∧V Í X*(i*)∧AÎ W)}。(根据依赖集F,找到第一步中属性集中的逻辑蕴涵,找到被确定属性。) ③ X(i+1)=B ∪X(i) 。 ④判断X(i+1)= X(i) 。 ⑤若X(i+1)与X(i)相等 或X(i)=U ,则X(i)就是XF+闭包 ,算法终止。 ⑥若否,则i=i+1,返回第②步。 案例1、已知关系模式R,其中 U={A, B, C, D, E}; F={AB→C, B→D, C→E, EC→B, AC→B}。 求(AB)F+ 。 解 :根据算法,设X(0)=AB。 计算X(1):逐一的扫描F集合中各个函数依赖,找左部为A、B或AB的函数依赖。得到两个:AB→C,B→D。于是X(1)= X(0) ∪ CD = AB∪CD=ABCD。 因为X(1)≠ X(0),且X(1) ≠U,所以再找出左部为ABCD子集的那些函数依赖,又得到C→E,AC→B,于是X(2)=X(1)∪BE=ABCD∪BE =ABCDE。 因为X(2)= U(全部属性集合) ,所以(AB)F+ =ABCDE。 案例2: 设有关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE) F+ 解: (1) 设X(0)= {AE} (2)在F中寻找尚未使用过的左边是AE的子集的函数依赖,结果是: A→D, E→C;所以 X(1)=X(0) ∪DC={A,C,D,E}, 显然 X(1)≠X(0)且X(1) ≠U,继续找X(1) 子集的函数依赖 (3) 在F中寻找尚未使用过的左边是ACDE的子集的函数依赖, 结果是: CD→I;所以 X(2)=X(1) ∪I=ACDEI。虽然X(2)≠X(1),但F中寻找尚未使用过函数依赖的左边已经没有X(2)的子集,再计算的话会得出X(3)=X(2),所以不必再计算下去,即(AE)F+={A,C,D,E,I}。 候选码的定义:若关系中的某一属性(组)的值能唯一地标识一个元组,则称该属性组为候选码。候选码可能有多个。 对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类: L类 仅出现在函数依赖左部的属性。一定存在于某候选码当中 。 R 类 仅出现在函数依赖右部的属性。不属于候选码 。 N 类 在函数依赖左右两边均未出现的属性。一定存在于任何候选码当中 。 LR类 在函数依赖左右两边均出现的属性。逐个(或组合) 与L、N的属性组合,求属性闭包,直至属性集的闭包等于U,若等于U,则为候选码。 具体的步骤:(算法描述) (1)令X 代表L、N 类,Y 代表LR 类。 (2)求X F+。若X F+包含了R 的全部属性,则即为R 的唯一候选码 ;否则,转(3)。 (3)取Y(LR 类) 中每一属性(如A)逐个 与X集合,求(XA)F+ (所有的LR类属性都要求闭包 ),若它包含了R 的全部属性 ,则是候选码(可能有多个候选码) ;如果还找不到,则在Y 中依次取2 个、3 个、…与x集合,求它们的属性闭包,若其闭包包含R 的全部属性,则是候选码 。 定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L或N类属性,则X必为R的任一候选码的成员。 案例1:设有关系模式R(U,F),U=(A,B,C,D),F={D→B,B →D,AD →B,AC →D},求R的所有候选码。 解:考察F发现,A,C两属性是L类属性,所以AC必是R的候选码成员,又因为(AC)F+=ABCD=U,所以AC是R的唯一候选码 。 推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类和N类组成的属性集,且X F+包含了R的全部属性;则X是R的唯一候选码 。 注意:如果题目要求找出所有候选码的话,除了唯一候选码的情况外,其他的LR 类的属性要一个一个与X 类属性并集后求闭包,如果还找不到的话,就组合与X 类属性并集后求闭包。 案例2:设有R,U=(A,B,C,D,E,G),F={AB–>C,CD–>E,E–>A.A–>G},求候选码。 解:因G只在右边出现,所以G一定不属于候选码;而B,D只在左边出现,所以B,D一定属于候选码;BD的闭包还是BD,则对BD进行组合,除了G以外,BD可以跟A,C,E进行组合 先看ABD: ABD本身自包ABD,而AB–>C,CD–>E,A–>G,所以ABD的闭包为ABD+CEG=U 再看BDC CD–>E,E–>A,A–>G,BDC本身自包,所以BDC的闭包为BDC+EAG=U 最后看BDE E–>A,A–>G,AB–>C,BDE本身自包,所以BDE的闭包为BDE+AGC=U 因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本题的候选码有3个分别是ABC、BCD和BDE 案例3:R,U=(A,B,C),F={AB–>C,C–>B},求候选码。 解:因为A只出现在左边,所以A一定是候选键。A的闭包还是A,则对A进行组合,可以和B,C进行组合。 首先看AB,AB本身自包AB,而AB–>C,所以AB的闭包是ABC=U。 再看AC,AC本身自包AC,而C–>B,所以AC的闭包是ABC=U。 因为AB,AC的闭包都是ABC,也就是U,所以本题候选键是AB,AC。 判断下列模式分别属于哪个范式(最高范式)并说明理由。 解答:1NF。由题目可知,关系的侯选码为(A,C)和(A, B)。B —► C表明存在对码的部分依赖, 所以这只能是1NF。 解答:2NF。由题目可知,关系的码为S#。模式中存在对码的传递依赖。 1、数据库设计可以分为哪几个阶段? 各阶段的主要工作包括哪些? 需求分析:调查了解用户的需求;用数据流图和数据字典来分析表达用户需求(结构化分析方法),以数据流图和数据字典作为这个阶段的成果; 概念结构设计:(用结构化的分析方法)抽象数据并设计局部视图,建立分E-R图;集成局部视图,合成总E-R图,消除分E-R图中三类冲突;本阶段是整个数据库设计的关键。 (属性冲突:属性值的类型、取值范围或取值集合不同。 命名冲突:不同数据对象中,属性同名异义;异名同义。 结构冲突:同一对象不同抽象;同一实体不同属性个数和属性排列次序;); 逻辑结构设计:将概念结构模型(E-R图)转化为关系模型,(将实体型、实体属性、实体型之间的联系转化为关系模式);对数据模型进行优化(规范化理论,确定数据依赖);设计用户模式; 数据库物理设计:确定数据库的物理结构,包括:确定存储结构、索引聚簇存取方法的选择、设计数据库的存储路径、确定数据库的存放位置、确定系统的配置;评价物理结构,从多种方案中选择一种最优的方案; 数据的存储结构是指数据的逻辑结构在计算机中的表示。 数据库实施阶段:定义数据库结构;数据装载;编制和调试应用程序;数据库试运行,进行功能测试、性能测试; 数据库运行与维护:经常性的维护工作由DBA完成:数据库的转储和恢复;数据库的安全性和完整性,根据实际需要授予用户不同的权限和修改完整性约束条件;数据库性能监督、分析和改进;数据库的重组织和重构造。 需求分析和概念结构设计独立于任何数据库管理系统,逻辑结构设计和数据库物理设计与选用的数据库管理系统密切相关。 E-R模型 定义:实体、属性、实体和实体之间的联系 实体→矩形,属性→椭圆,联系→菱形 逻辑结构设计:E-R图向关系模型的转换 (1)一个实体型转换为一个关系模式。 关系(表)的属性就是实体的属性,关系的码就是实体的码 (2)一个联系 转换为一个关系模式。 与联系相连的各个实体的码及联系的属性转换为关系的属性,关系的码根据联系类型来确定。 1:1联系:每个实体 的码均是该关系的码 1:n联系:n端实体的码是该关系的码 m:n联系:m端实体的码与n端实体的码的组合 构成关系的码 多元联系:各实体码的组合 构成关系的码 关系模型的优化:根据规范化理论 并不是规范化程度越高的关系就越优,范化程度越高表越多,连接运算代价是相当高,查询效率低,根据实际需求而定。 数据字典内容: 数据项,数据结构,数据流,数据存储,处理过程 主语言:将SQL语句嵌入程序设计语言中,被嵌入的高级程序设计语言,称主语言。 用预编译方法,先用预处理程序(数据库厂商提供)对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式,然后再用宿主语言的编译程序转换为目标语言程序。 为了区分SQL语句与主语言语句,所有SQL语句必须加前缀EXEC SQL,并以“END-EXEC”作为语句结束标志。 语句格式: EXEC SQL 语句结束标志:END-EXEC 向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,在高级语言管理区开辟一个区域 ,由数据库负责填写主程序所需数据,供主程序调用,安全性较高。数据库区域不能开放给高级语言。 嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据,在SQL语句中使用的主语言程序变量简称为主变量(Host Variable),在主语言程序中是普通变量。 主变量根据作用不同,分输入主变量 (由应用程序对其赋值,SQL语句引用)和 输出主变量 (由SQL语句对其赋值或设置状态信息,返回给应用程序)两种类型。 一个主变量可以附带一个指示变量,指明主变量的值或条件是否为空值。 SQL语句中的主变量名前要加冒号(:)作为标志,指示变量前也必须加冒号标志且必须紧跟在所指主变量之后。 语法例:EXEC SQL Select sno,cno,grade into :sno,:cno,:grade From sc where sno=:givensno SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录; 主语言是面向记录的,一组主变量一次只能存放一条记录; 仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求; 嵌入式SQL引入了游标 的概念,用来协调这两种不同的处理方式。 游标 :是数据库管理 系统为用户提供的一个数据缓冲区 ,存放SQL语句的执行结果(大小不确定),每个游标区都有一个名字 用户可以用SQL语句通过移动游标名代表的指针逐一从游标中获取数据,并赋给主变量,交由主语言进一步处理。 游标与通信区区别:通信区:控制信息,大小固定,主程序提供 游标:计算结果(数据),大小不确定,数据库管理系统提供 对由 SELECT—FROM—WHERE—GROUP—ORDER 组成的 SQL 语句,其在被 DBMS 处理时,各子句的执序次序为 FROM—WHERE—GROUP—SELECT—ORDER 不同执行方案,效率相差很大。 关系系统的查询优化既是 RDBMS 实现的关键技术又是关系系统的优点所在。它减轻了用户选择存取路径的负担。用户只要提出“干什么”,不必指出“怎么干”。查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化’做得更好。 对由 SELECT—FROM—WHERE—GROUP—ORDER 组成的 SQL 语句,其在被 DBMS 处 理时,各子句的执序次序为FROM—WHERE—GROUP—SELECT—ORDER 代数优化策略:通过对关系代数表达式的等价变换 来提高查询效率(调整操作的次序和组合 )。 典型的启发式规则: 1.选择运算应尽可能先做。(下移,推向叶端)这是最重要、最基本的一条。 2.对同一个关系操作,把投影运算和选择运算同时进行,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系 3.把投影同其前或后的双目运算结合起来。 4.把某些选择同在它前面执行的笛卡尔积结合起来成为一个连续运算。等值连接比笛卡尔积省时间的多。 5.找出公共子表达式 选择高效合理的操作算法或存取路径 ,求得优化的查询计划 事务概念:用户定义的一个数据库操作序列,要么都执行,要么都不执行,不可分割 事务的ACID四大特性: 原子性 :不可分割,要么都做,要么都不做; 一致性 :和原子性是不可分割的,如果AB要顺序执行,必须都执行; 隔离性 :并发执行的各个事务之间不会互相干扰; 持续性 :数据的改变是永久性的,一旦发生了改变,数据库的数据是永久性改变 数据库运行过程中发生的故障(主要有三类:事务故障、系统故障和介质故障),轻则造成运行事务非正常中断,影响数据库中数椐的正确性,重则破坏数据库,使数据库中数据 部分或全部丢失。 数据库管理系统中恢复子系统是为了保证各种故障发生后,数据库中的数据都能从错误状态恢复到某种逻辑一致性的状态。不同故障的恢复方法也不一样。 何谓事务故障:事务运行过程中由于种种原因(如输入数据错误、运行溢出、违反了某些完整性限制、某些应用程序错误以及并发事务发生死锁等)使事务未运行至正常 终止点夭折 。夭折事务可能已把对数据库的部分修改写回磁盘。 事务故障通过事务撤消(UNDO)恢复数据的正确性:恢复程序要在不影响其他事务运行的情况下,强行回滚 该事务,即清除该事务对数据库的所有修改,使得这个事务像根本没有启动过一样。 发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事物。 具体做法:第四章数据库安全性
4.1安全性
4.4.1安全性控制方法
1、用户标识和鉴定
2、存取控制
2.1自主存取控制(DAC)
2.2 强制存取控制
笫五章 数据库完整性
一、完整性控制
第六章 关系数据理论
6.1相关基本概念
规范化理论:
规范化过程:
1、函数依赖
2、平凡函数依赖与非平凡函数依赖定义(4.2)
3、 完全函数依赖与部分函数依赖
4、 传递函数依赖
5、 码
6. 2 范式概念
6.4 数据依赖的公理系统
6.5 属性集闭包的概念和求解:
6.6 候选码的求解理论和算法
第七章 数据库设计
第八章 数据库编程
8.1 嵌入式SQL
8.1.1 处理过程:
8.1.2 嵌入式SQL语句与主语言之间的通信
1)通信区(SQLCA)
2)主变量
3)游标
第九章 查询处理与查询优化
9.1 查询优化
9.2 代数优化
9.4 物理优化
第十章数据库恢复
10.1
1、 恢复的作用
2、 故障类型及恢复
1)事务故障
2)系统故障
3)介质故障