您好,欢迎来到图艺博知识网。
搜索
您的当前位置:首页数据库系统概论知识点整理

数据库系统概论知识点整理

来源:图艺博知识网
第一章:绪论

数据库(DB):长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有娇小的冗余度、交稿的数据性和易扩展性,并可为各种用户共享。

数据库管理系统(DBMS):位于用户和操作系统间的数据管理系统的一层数据管理软件。用途:科学地组织和存储数据,高效地获取和维护数据。包括数据定义功能,数据组织、存储和管理,数据操纵功能,数据库的事物管理和运行管理,数据库的建立和维护功能,其他功能。

数据库系统(DBS):在计算机系统中引入数据库后的系统,一般由数据库。数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。目的:存储信息并支持用户检索和更新所需的信息。

数据库系统的特点:数据结构化;数据的共享性高,冗余度低,易扩充;数据性高;数据由DBMS统一管理和控制。

概念模型 实体,客观存在并可相互区别的事物称为实体。 属性,实体所具有的某一特性称为属性。 码,唯一标识实体的属性集称为码。 域,是一组具有相同数据类型的值的集合。

实体型,具有相同属性的实体必然具有的共同的特征和性质。 实体集,同一类型实体的集合称为实体集。 联系

两个实体型之间的联系 一对一联系;一对多联系;多对多联系 关系模型 关系,元组,属性,码,域,分量,关系模型

关系数据模型的操纵与完整性约束 关系数据模型的操作主要包括查询,插入,删除和更新数据。这些操作必须满足关系完整性约束条件。关系的完整性约束条件包括

三大类:实体完整性,参照完整性和用户定义的完整性。

数据库系统三级模式结构外模式,模式,内模式

模式:(逻辑模式)数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。一个数据库只有一个模式。

模式的地位:是数据库系统模式结构的中间层,与数据的物理存储细节和硬件环境无关,与具体的应用程序、开发工具及高级程序设计语言无关。

模式定义的内容:数据的逻辑结构(数据项的名字、类型、取值范围等),数据之间的联系,数据有关的安全性、完整性要求

外模式:(子模式/用户模式)数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据库和逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的系统的逻辑表示。一个数据库可以有多个外模式。

外模式的地位:介于模式与应用之间

模式与外模式的关系:一对多。外模式通常是模式的子集。一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求。对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同。

外模式与应用的关系:一对多。同一外模式也可以为某一用户的多个应用系统所使用

但一个应用程序只能使用一个外模式

内模式:存储模式或内视图)是数据物理结构和存储方式的描述,是数据在数据库内部实际存储的表示方式:

记录的存储方式(顺序,B树,hash方法存储),索引的组织方式,数据是否压缩存储,数据是否加密。数据存储记录结构的规定,一个数据库只有一个内模式

三级模式的优点:

(1)保证数据的性(内模式与模式分开物理;外模式与模式分开逻

辑)

(2)简化用户窗口 (3)有利于数据共享 (4)利于数据的安全保密

(5)数据存储由DBMS管理(用户不用考虑存取路径等细节) 二级映像功能:

(1) 外模式/模式映像(应用可扩充性)

定义外模式(局部逻辑结构)与模式(全局逻辑结构)之间的对应关系,映象定义通常包含在各自外模式的描述中,每一个外模式,数据库系统都有一个外模式/模式映象。

用途:保证数据的逻辑性

当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变 应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑性,简称数据的逻辑性。

(2) 模式/内模式映像(空间利用率,存取效率)

模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关。数据库中模式/内模式映象是唯一的。该映象定义通常包含在模式描述中。

用途:保证数据的物理性

当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变。应用程序不受影响。保证了数据与程序的物理性,简称数据的物理性。

优点:

(1)保证了数据库外模式的稳定性。

(2)从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改。

(3)数据与程序之间的性,使得数据的定义和描述可以从应用程序中分离出去。

什么叫数据与程序的物理性?什么叫数据与程序的逻辑性? 为什么数据库系统具有数据与程序的性?

1、数据与程序的逻辑性:当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变。从而应用程序不必修改,保证了数据与程序的逻辑性,简称数据的逻辑性。

2、数据与程序的物理性:当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变。应用程序不受影响。保证了数据与程序的物理性,简称数据的物理性。

数据库管理系统在三级模式之间错提供的二层影响保证了数据系统中的数据具有较高的逻辑性和物理性。

数据库系统的组成 硬件平台及数据库,软件,人员 第二章:关系数据库 关系的完整性约束

实体完整性和参照完整性:关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持。

用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

外码,主码,候选码的概念

候选码:若关系中的某一属性组的职能唯一地标识一个元组,则称该属性组为候选码。

主码:若一个关系有多个候选码,则选定期中一个为主码。

外部码:设F是基本关系R的一个或一组属性。但不是关系R的码,如果F与基

本关系S的主码K想对应,则称F是基本关系R的外部码,简称外码。

关系的3类完整性约束概念

实体完整性:若属性(指一个或一组属性)A是基本关系R的主属性, A不能取空值。

参照完整性:若属性(或属性组)F是基本关系R的外码,它是基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。

用户定义的完整性:针对某一具体关系数据库的约束条件。反映某一具体应用所设计的数据必须满足的语义要求。

关系操作的特点,关系代数中的各种运算

关系操作的特点是集合操作方式,即操作的对象和结果是集合。

关系代数1、并(R∪S)仍为n目关系,由属于R或属于S的元组组成。R∪S = { t|t ∨

2、差(R – S)仍为n目关系,由属于R而不属于S的所有元组组成。R -∧

3、交(R∩S)仍为n目关系,由既属于R又属于S的元组组成。R∩∧

R∩S = R –(R-S)

4、笛卡尔积R: n目关系,k1个元组;S: m目关系,k2个元组;R×S。 9、选择:选择又称为(Restriction)σ:对元组按照条件进行筛选。在关系R中选择满足给定条件的诸元组σF(R) = {t|tR∧F(t)= '真'}。

10、投影:投影运算符π的含义:从R中选择出若干属性列组成新的关系πA(R) = { t[A

A:R中的属性列投影操作主要是从列的角度进行运算。但投影之后不仅

取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。

11、连接:连接也称为θ连接:两张表中的元组有条件的串接。从两个关系的笛

卡尔积中选取属性间满足一定条件的元组∧∧tr[A]θts[B] }

外连接:如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接。

左外连接:如果只把左边关系R中要舍弃的元组保留就叫做左外连接(LEFT OUTER JOIN或LEFT JOIN)。

右外连接:如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN或RIGHT JOIN)。

12、除÷ :给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组;R中的Y与S 中的Y可以有不同的属性名,但必须出自相同的域集;R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影

第三章:关系数据库标准语言SQL

注意:SQL(Oracle除外)一般不提供修改视图定义和索引定义的操作,需要先删除再重建

定义基本表:CREATE TABLE <表名> (<列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] … [,<表级完整性约束条件> ] ); 列级完整性约束--涉及到该表的一个属性

  

NOT NULL :非空值约束

UNIQUE:唯一性(单值约束)约束 PRIMARY KEY:主码约束

      

DEFAULT <默认值>:默认(缺省)约束 Check < (逻辑表达式) >:核查约束,定义校验条件 NOT NULL :非空值约束

UNIQUE:唯一性(单值约束)约束 PRIMARY KEY:主码约束

DEFAULT <默认值>:默认(缺省)约束 Check < (逻辑表达式) >:核查约束,定义校验条件

表级完整性约束--涉及到该表的一个或多个属性。

   表)]

 

Check(<逻辑表达式>) :检查约束 PRIMARY KEY与 UNIQUE的区别? UNIQUE(属性列列表) :限定各列取值唯一 PRIMARY KEY (属性列列表) :指定主码

FOREIGN KEY (属性列列表) REFERENCES <表名> [(属性列列

例:建立“学生”表Student,学号是主码,姓名取值唯一 CREATE TABLE Student

(Sno CHAR(9) PRIMARY KEY,/*主码*/ Sname CHAR(20) UNIQUE, /* Sname取唯一值*/ Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)); 数据类型

修改基本表:ALTER TABLE <表名> [ ADD <新列名> <数据类型> [ 完整性约束 ] ] [ DROP <列名> |<完整性约束名> ] [ ALTER COLUMN<列名> <数据类型> ];

例:向Student表增加“入学时间”列,其数据类型为日期型 ALTER TABLE Student ADD S_entrance DATE;

不论基本表中原来是否已有数据,新增加的列一律为空值

将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数 ALTER TABLE Student ALTER COLUMN Sage INT; 注:修改原有的列定义有可能会破坏已有数据 增加课程名称必须取唯一值的约束条件。 ALTER TABLE Course ADD UNIQUE(Cname);

直接删除属性列:(新标准) 例: ALTER TABLE Student Drop Sage; 删除基本表 :DROP TABLE <表名>[RESTRICT| CASCADE];

RESTRICT:(受限) 欲删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象(触发器,视图等),则此表不能被删除。

CASCADE:(级联)在删除基本表的同时,相关的依赖对象一起删除。

例:删除Student表 DROP TABLE Student CASCADE ;

基本表定义被删除,数据被删除;表上建立的索引、视图、触发器等一般也将被删除 。

删除索引 :DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述。 例: 删除Student表的Stusname索引:DROP INDEX Stusname 2、数据查询:基本格式 单表查询

选择表中的若干列 (投影)

查询指定列 (相当于πA(R),A= A1,A2,…,An ) 例;查询全体学生的学号与姓名 SELECT Sno,Sname FROM Student;

查询全部列:在SELECT关键字后面列出所有列名按用户指定顺序显示。 将<目标列表达式>指定为 *按关系模式中的属性顺序显示。 例:查询全体学生的详细记录

SELECT Sno,Sname,Ssex,Sdept , Sage FROM Student;

或 SELECT * FROM Student;

P.S: SELECT子句的<目标列表达式>可以为: 查询经过计算的值

例:查全体学生的姓名及其出生年份

SELECT Sname,2011-Sage /*假定当年的年份为2011年*/

FROM Student; 输出结果: Sname 2011-Sage 李勇 刘晨

1991 1992

字符串常量、函数

例:查询全体学生的姓名、出生年份和所有系,要求用小写字母 表示所有系名

SELECT Sname,‘Year of Birth: ',2004-Sage,ISLOWER(Sdept) FROM Student; 输出结果:

Sname 'Year of Birth:' 2004-Sage ISLOWER(Sdept) 李勇 Year of Birth: 1984 cs 刘晨 Year of Birth: 1985 is 列别名

SELECT Sname as NAME,'Year of Birth: ' as BIRTH, 2011-Sage as BIRTHDAY,LOWER(Sdept) as DEPARTMENT FROM Student; 输出结果:

NAME BIRTH BIRTHDAY DEPARTMENT ------- ---------------- ------------- ------------------ 李勇 Year of Birth: 1991 cs 刘晨 Year of Birth: 1992 is 选择表中的若干元组(选择)

消除重复性:

指定DISTINCT关键词,去掉表中重复的行 SELECT DISTINCT Sno FROM SC; 注意 DISTINCT短语的作用范围是所有目标列

错误的写法 SELECT DISTINCT Cno,DISTINCT Grade FROM SC; 正确的写法 SELECT DISTINCT Cno,Grade FROM SC; SELECT 子句缺省情况是保留重复元组(ALL),

例:查询选修了课程的学生学号。SELECT Sno FROM SC;等价于: SELECT ALL Sno FROM SC; 查询满足条件的元组

WHERE子句常用的查询条件(相当于σF)

比较大小使用比较运算符 或逻辑运算符NOT + 比较运算符 例:查询计算机科学系全体学生的名单 SELECT Sname FROM Student

WHERE Sdept=‘CS’;

例:查询所有年龄在20岁以下的学生姓名及其年龄 SELECT Sname,Sage FROM Student

WHERE Sage < 20; //NOT Sage>=20

确定范围 BETWEEN … AND … NOT BETWEEN … AND … 例;查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄 SELECT Sname,Sdept,Sage FROM Student

WHERE Sage BETWEEN 20 AND 23;//Sage>=20 and Sage<=23 例:查询年龄不在20~23岁之间的学生姓名、系别和年龄 SELECT Sname,Sdept,Sage FROM Student

WHERE Sage NOT BETWEEN 20 AND 23;//Sage<20 or Sage>23 确定集合IN <值表>, NOT IN <值表>

例:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别 SELECT Sname,Ssex FROM Student

WHERE Sdept IN ( 'IS','MA','CS' );

例:查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别 SELECT Sname,Ssex FROM Student

WHERE Sdept NOT IN ( 'IS','MA','CS' );

自负匹配[NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’] 匹配串为固定字符串

例:查询学号为的学生的详细情况。

SELECT * SELECT *

FROM Student 等价于: FROM Student

WHERE Sno LIKE ‘'; WHERE Sno = ' '; 匹配串为含通配符的字符串

%:代表任意长度(可以是0)的字符串 _:代表任意单个字符

字符串本身就含有 % 或 _ 时,在% 或 _ 之前加上转义符“\\”要使用ESCAPE ‘<换码字符>’将通配符转义为普通字符。如果‘\’ 要作为一个普通字符,用连续两个‘\’ 表示一个真正的‘\’。

例:查询以\"DB_\"开头,且倒数第3个字符为 i的课程的详细情况。 SELECT * FROM Course

WHERE Cname LIKE 'DB\\_%i_ _' ESCAPE ' \\ ‘;

涉及空值的查询 IS NULL 或 IS NOT NULL “IS” 不能用 “=” 代替 例:查所有有成绩的学生学号和课程号 SELECT Sno,Cno FROM SC

WHERE Grade IS NOT NULL;

多重条件查询:AND和 OR来联结多个查询条件,AND的优先级高于OR,可以用括号改变优先级,可用来实

现多种其他谓词。 [NOT] IN

[NOT] BETWEEN … AND …

改写 例:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别

SELECT Sname,Ssex

FROM Student

WHERE Sdept IN ( 'IS','MA','CS' ) 可改写为:

SELECT Sname,Ssex FROM Student

WHERE Sdept= ' IS ' OR Sdept= ' MA' OR Sdept= ' CS ' ORDER BY子句:对查询结果排序

可以按一个或多个属性列排序:升序:ASC;降序:DESC;缺省值为升序。 当排序列含空值时:空值最大

ASC:排序列为空值的元组最后显示;DESC:排序列为空值的元组最先显示。 例:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列 SELECT Sno,Grade FROM SC WHERE Cno= ' 3 ' ORDER BY Grade DESC;

聚集函数:对查询结果集中的某列进行计算或统计。

计数COUNT([DISTINCT|ALL] *) COUNT([DISTINCT|ALL] <列名>) 计算总和SUM([DISTINCT|ALL] <列名>)

计算平均值 AVG([DISTINCT|ALL] <列名>)

最大最小值MAX([DISTINCT|ALL] <列名>) MIN([DISTINCT|ALL] <列名>) 例:查询学生选修课程的总学分数 SELECT SUM(Ccredit) FROM SC, Course

WHER Sno='' AND SC.Cno=Course.Cno;

注:除Count(*),都要跳过空值;Where子句不能使用聚集函数。 GROUP BY子句:对查询结果分组。 用途细化聚集函数的作用对象

未对查询结果分组,聚集函数将作用于整个查询结果 对查询结果分组后,聚集函数将分别作用于每个组

使用GROUP BY 后:其SELECT子句的列名列表中只能出现分组属性和集函数。 如果分组后还要按照条件对这些组进行筛选,可使用having 短语指定筛选条件 例: 查询选修了3门以上课程的学生学号 SELECT Sno FROM SC GROUP BY Sno

HAVING COUNT(*) >3;

例:查询有3门以上课程是90分以上学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC Where Grade >90 GROUP BY Sno

HAVING COUNT(*) >3;

HAVING短语与WHERE子句的区别:作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组 HAVING短语作用于组,从中选择满足条件的组。 ****连接查询*****p100页

****嵌套查询*****p104页 ***重点*** 数据更新

(1)插入数据 插入元组 INSERT

[INTO] <表名> [(<属性列1>[,<属性列2 >…)] VALUES (<常量1> [,<常量2>] … )

功能:将新元组插入指定表中;新元组的属性列1的值为常量1,属性列2的值为常量2,…。

INTO子句:属性列的顺序可与表定义中的顺序不一致,但须指定列名;没有指定属性列,表示要插入的是一条完整的元组;指定部分属性列,未指定的属性列取空值,具有NOT NULL的属性列除外。

VALUES子句:提供的值必须与INTO子句匹配,值的个数,值的类型。 例:将一个新学生元组(学号:;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中

INSERT

INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('','陈冬','男','IS',18); 例: 将学生张成民的信息插入到Student表中 INSERT INTO Student

VALUES (‘’, ‘张成民’, ‘男’,18,'CS'); 例:插入一条选课记录( '','1 ')。 INSERT

INTO SC(Sno,Cno) VALUES (‘ ’,‘ 1 ’);

RDBMS将在新插入记录的Grade列上自动地赋空值。或者: INSERT INTO SC

VALUES (‘ ’,‘ 1 ’,NULL);

因为没有指出SC的属性名,在GRADE列上要明确给出空值 插入子查询结果 Insert

Into <表名>[(<属性列1>[,<属性列2 >…)] 子查询(select等); (2)修改数据 UPDATE <表名>

SET <列名>=<表达式>[,<列名>=<表达式>]… [WHERE <条件>];

SET子句:指定修改方式,要修改的列,修改后取值:<表达式>。 WHERE子句:指定要修改的元组,,缺省表示要修改表中的所有元组。 功能:修改指定表中满足WHERE子句条件的元组。 修改某一个元组的值 例:将学生的年龄改为22岁 UPDATE Student SET Sage=22 WHERE Sno=' '; 修改多个元组的值 例:将所有学生的年龄增加1岁 UPDATE Student

SET Sage= Sage+1;

带子查询的修改语句 子查询须放在比较运算符之后 例:将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE 'CS'= (SELETE Sdept FROM Student

WHERE Student.Sno = SC.Sno); (3)删除数据 DELETE

FROM <表名> [WHERE <条件>];

功能:删除指定表中满足WHERE子句条件的元组。

WHERE子句:指定要删除的元组;缺省表示要删除表中的全部元组,表的定义仍在数据字典中。

删除某一个元组的值 例:删除学号为的学生记录 DELETE FROM Student WHERE Sno= '; 删除多个元组的值 例:删除所有的学生选课记录 DELETE

FROM SC; 带子查询的删除语句 例:删除计算机科学系所有学生的选课记录 DELETE FROM SC WHERE 'CS'= (SELETE Sdept FROM Student

WHERE Student.Sno=SC.Sno); 4、视 图

特点:虚表,是从一个或几个基本表(或视图)导出的表;只存放视图的定义,不存放视图对应的数据;基表中的数据发生变化,从视图中查询出的数据也随之改变。

基于视图的操作: 查询、删除、受限更新、定义基于该视图的新视图。 (1)定义视图 建立视图 CREATE VIEW <视图名> [(<列名> [,<列名>]…)] AS <子查询>

[WITH CHECK OPTION];

子查询:不允许含有ORDER BY子句和DISTINCT短语。

WITH CHECK OPTION:表示对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

组成视图的属性列名:全部省略或全部指定,但在下列三种情况下必须明确指定组成视图的所有列名:

某个目标列不是单纯的属性名,而是聚集函数或列表达式;

多表连接时选出了几个同名列作为视图的字段; 需要在视图中为某个列启用新的名字。

RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。

行列子集视图:从单个基本表导出 ,只是去掉了基本表的某些行和某些列保留了主码

例:建立信息系学生的视图 CREATE VIEW IS_Student AS

SELECT Sno,Sname,Sage FROM Student WHERE Sdept= ‘IS’;

WITH CHECK OPTION 例:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生

CREATE VIEW IS_Student AS

SELECT Sno,Sname,Sage FROM Student WHERE Sdept= 'IS' WITH CHECK OPTION;

加上了WITH CHECK OPTION子句:RDBMS对IS_Student视图的更新操作:修改操作:自动加上Sdept= 'IS'的条件;删除操作:自动加上Sdept= 'IS'的条件;插入操作:自动检查Sdept属性值是否为'IS' 。如果不是,则拒绝该插入操作。如果没有提供Sdept属性值,则自动定义Sdept为'IS'。

基于多个基表的视图 例:建立信息系选修了1号课程的学生视图 CREATE VIEW IS_S1(Sno,Sname,Grade) AS

SELECT Student.Sno,Sname,Grade FROM Student,SC WHERE Sdept= 'IS' AND Student.Sno=SC.Sno AND SC.Cno= '1'; 基于视图的视图 例:建立信息系选修了1号课程且成绩在90分以上的学生的视图 CREATE VIEW IS_S2 AS

SELECT Sno,Sname,Grade FROM IS_S1 WHERE Grade>=90;

由于视图中的数据不会实际存储,所以定义视图时可根据应用的需要,设置一些派生属性列或虚拟列,以便于查询和统计。

以 SELECT * 方式创建的视图可扩充性差,应尽可能避免 。

缺点:修改基表Student的结构后,Student表与F_Student视图的映象关系被破坏,导致该视图不能正确工作。

删除视图DROP VIEW <视图名>;

该语句从数据字典中删除指定的视图定义。如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除 。删除基表时,

由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除。

例:删除视图BT_S: DROP VIEW BT_S; 删除视图IS_S1:拒绝执行

级联删除:DROP VIEW IS_S1 CASCADE;

(2) 查询视图:查询视图与查询基本表相同,视图定义后,就可以像对待基本表一样对视图进行查询(SELECT)操作。

视图消解法(View Resolution)进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义 ;转换成等价的对基本表的查询,把视图定义中的子查询与用户的查询结合起来;执行修正后的查询。

例:在信息系学生的视图中找出年龄小于20岁的学生 SELECT Sno,Sage FROM IS_Student WHERE Sage<20;

视图消解转换后的查询语句为: SELECT Sno,Sage FROM Student

WHERE Sdept= 'IS' AND Sage<20;

例:在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩 SELECT * FROM S_G WHERE Gavg>=90; S_G视图的子查询定义: CREATE VIEW S_G (Sno,Gavg)

AS

SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno; (3) 更新视图

DBMS实现视图更新的方法:转换为对基本表的更新。视图消解法(View Resolution)。

只有对成为“可更新”视图才能进行更新操作。

SQL2对“可更新”视图给出正式定义:从关系R选出某些属性(用select 而不是 select distinct)定义的视图,R本身可以是可更新的视图;Where中不能嵌套涉及R的子查询;Select必须包括足够多的属性,所有not null的属性必须包括。

对于视图元组的更新操作(INSERT、DELETE、UPDATA),有以下三条规则: 如果一个视图是从多个基本表使用联接操作导出的,那么不允许对这个视图执行更新操作。

如果在导出视图的过程中,使用了分组和聚集函数操作,也不允许对这个视图执行更新操作。

行列子集视图可以执行更新操作。

在SQL2中,允许更新的视图在定义时,必须加上“WITH CHECK OPTION”短语。DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新。

例:将信息系学生视图IS_Student中学号的学生姓名改为“刘辰”。 UPDATE IS_Student SET Sname= '刘辰' WHERE Sno= ' ';

转换后的语句: UPDATE Student SET Sname= '刘辰'

WHERE Sno= ' ' AND Sdept= 'IS';

例:向信息系学生视图IS_S中插入一个新的学生记录:,赵新,20岁 INSERT INTO IS_Student

VALUES(‘95029’,‘赵新’,20); 转换为对基本表的更新: INSERT

INTO Student(Sno,Sname,Sage,Sdept) VALUES(‘ ','赵新',20,'IS' );

例:删除信息系学生视图IS_Student中学号为的记录 DELETE FROM IS_Student WHERE Sno= ' '; 转换为对基本表的更新: DELETE FROM Student

WHERE Sno= ' ' AND Sdept= 'IS';

更新视图的:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新。对其他类型视图的更新不同系统有不同:

(1) 若视图是由两个以上基本表导出的,则此视图不允许更新

(2) 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和

UPDATE操作,但允许执行DELETE操作。

(3) 若视图的字段来自集函数,则此视图不允许更新。

(4) 若视图定义中含有GROUP BY子句,则此视图不允许更新。 (5) 若视图定义中含有DISTINCT短语,则此视图不允许更新。

(6) 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。

(7) 一个不允许更新的视图上定义的视图也不允许更新 第四章:数据库的安全性 计算机系统的三类安全性问题 技术安全,管理安全,法律 数据库安全性控制(6种) 1.用户标识与鉴别 用户标识,口令 2.存取控制

3.自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户要访问数据库时,首先要检查其存取权限,以防止非法用户对数据库进行存取。“自主存取控制”中“自主”的含义:用户可以将自己所拥有的存取权限“自主”地授予他人,即用户具有一定的“自主”权。

4.授权与收回语句。

GRANT 语句和 REVOKE 语句实现关系数据库系统中存取控制权限: 1、GRANT(授权) GRANT语句的一般格式: GRANT <权限>[,<权限>]...

ON <对象类型> <对象名> ,[<对象类型> <对象名>] TO <用户>[,<用户>]...

[WITH GRANT OPTION];

将对指定操作对象的指定操作权限授予指定的用户

发出GRANT:DBA,数据库对象创建者(即属主Owner),拥有该权限的用户 接受权限的用户 :一个或多个具体用户;PUBLIC(全体用户)。 例:把查询Student表权限授给用户U1 GRANT SELECT ON TABLE Student TO U1;

例:把查询Student表和修改学生学号的权限授给用户U4 GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;

对属性列的授权时必须明确指出相应属性列名

2、REVOKE:授予的权限可以由DBA或其他授权者用REVOKE语句收回 REVOKE语句的一般格式为: REVOKE <权限>[,<权限>]...

ON <对象类型> <对象名> >[,<对象类型> <对象名>] … FROM <用户>[,<用户>]... >[CASCADE|RESTRICT]; 把指定对象的指定操作权限从指定用户处收回。 例:把用户U4修改学生学号的权限收回 REVOKE UPDATE(Sno) ON TABLE Student FROM U4;

例:收回所有用户对表SC的查询权限

REVOKE SELECT ON TABLE SC FROM PUBLIC;

例:把用户U5对SC表的INSERT权限收回 REVOKE INSERT ON TABLE SC

FROM U5 CASCADE ;(缺省是RESTRICT)

将用户U5的INSERT权限收回的时候必须级联(CASCADE)收回,因为U5将SC的INSERT权限授予U6,U6又将其授予U7,CASCADE系统只收回直接或间接从U5处获得的权限。

Grant 和Revoke向用户授予或收回对数据的操作权限 3、创建数据库模式的权限 :DBA在创建用户时实现 CREATE USER语句格式 CREATE USER

[WITH][DBA | RESOURCE | CONNECT]

拥有DBA权限的用户是系统中的超级用户;只有系统的超级用户才有权创建新的数据库用户;如果没有指定创建的新用户的权限,默认该用户拥有CONNECT权限,只能登录数据库.。

5.数据库角色 角色的创建,给角色授权,将一个角色授予其他角色或用户

6.强制存取控制方法:每一个数据对象被(强制地)标以一定的加密级别,每位用户也被(强制地)授予某一级别的许可证。系统规定只有具有某一许可证级别的用户才能存取加密级别的数据对象。

强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提高

了更高级别的安全性。

第五章:数据库的完整性 看书。。。

实体完整性(定义)参照完整性 用户定义完整性 第六章:关系数据理论

1、函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集, 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。 所谓函数依赖是指关系中属性或属性组的值可以决定其它属性的值,设R(U)是属性集U上的关系模式,X、Y是U的子集:

如果X和Y之间是1:1关系(一对一关系),如学校和校长之间就是1:1关系,则存在函数依赖X → Y和Y →X。

如果X和Y之间是1:n关系(一对多关系),如年龄和姓名之间就是1:n关系,则存在函数依赖Y → X。

如果X和Y之间是m:n关系(多对多关系),如学生和课程之间就是m:n关系,则X和Y之间不存在函数依赖。

在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但平凡的函数依赖;若X→Y,但

,则称X→Y是非

则称X→Y是平凡的函数依赖。

例:在关系SC(Sno, Cno, Grade)中,非平凡函数依赖: (Sno, Cno) → Grade; 平凡函数依赖: (Sno, Cno) → Sno (Sno, Cno) → Cno

若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。 2、 完全函数依赖: 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ Y, 则称Y对X完全函数依赖,记作

3、部分函数依赖:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作

例:中 (Sno,Cno)→Grade是完全函数依赖,(Sno,Cno)→Sdept是部分函数依赖 ∵Sno →Sdept成立,且Sno是(Sno,Cno)的真子集。 当存在部分依赖时,就会产生数据冗余。

4、传递函数依赖:在R(U)中,如果X→Y,(YX) ,YX ,Y→Z,Z Z对X传递函数依赖,记为:

Y,则称

注: 如果Y→X, 即X←→Y,则Z直接依赖于X。 例: 在关系Std(Sno, Sname,Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname Mname传递函数依赖于Sno

5、侯选码:设K为R中的属性或属性组,若K称为R的侯选码(Candidate Key)

注K满足两个条件:

1.K完全函数决定该关系的所有其它属性。

2.K的任何真子集都不能完全函数决定R的所有其它属性,K必须是最小的。 若候选码多于一个,则选定其中的一个做为主码(Primary Key),通常称之为码。 主属性(Prime attribute):包含在任何一个候选码中的属性。 非主属性或非码属性:不包含在任何码中的属性。 例:关系模式S(Sno,Sdept,Sage),单个属性Sno是码, SC(Sno,Cno,Grade)中,(Sno,Cno)是码

由于码能唯一确定一个元组,所以关系的码函数决定该关系的所有属;一个关系中的所有属性都函数依赖于该关系的码。

例:关系模式R(P,W,A)P:演奏者 W:作品 A:听众:一个演奏者可以演奏多个作品,某一作品可被多个演奏者演奏,听众可以欣赏不同演奏者的不同作品。

U (每个属性), 则K

码为(P,W,A),即All-Key

6、外部码: 关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码

如在SC(Sno,Cno,Grade)中,Sno不是码,

但Sno是关系模式S(Sno,Sdept,Sage)的码,则Sno是关系模式SC的外部码 主码与外部码一起提供了表示关系之间联系的手段 各种范式之间存在联系:

1、1NF :如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库;简而言之,第一范式就是无重复的列,关系数据库研究的关系都是规范化的关系。但是满足第一范式的关系模式并不一定是一个好的关系模式。

例:关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个地方。

函数依赖包括: (Sno, Cno) F Grade (Sno, Cno) P Sdept ∵ Sno → Sdept (Sno, Cno) P Sloc ∵ Sdept 传递 Sloc S-L-C的码为(Sno, Cno)。 S-L-C满足第一范式。

非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)。 插入异常:如未选课的学生不能插入。

删除异常:如放弃修一门课,只选修这-门课的学生被删除

数据冗余度大 修改复杂

原因:存在对码的冗余依赖。Sdept、 Sloc部分函数依赖于码。

解决方法:S-L-C分解为两个关系模式,以消除这些部分函数依赖 SC(Sno, Cno, Grade) S-L(Sno, Sdept, Sloc) 2、2NF;若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF 简而言之,第二范式就是每一行被码唯一标识 例:S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈1NF S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈2NF SC(Sno, Cno, Grade) ∈ 2NF S-L(Sno, Sdept, Sloc) ∈ 2NF

采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。但将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

3、3NF:关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z ), 使得X→Y, Y → X, Y→Z成立,即每个非主属性都不传递依赖于R的码,则称R ∈ 3NF。若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。

简而言之,第三范式(3NF)要求一个数据库表中不能包含其它表中已包含的非码信息。

例:S-L(Sno, Sdept, Sloc) ∈ 2NF S-L(Sno, Sdept, Sloc) ∈ 3NF S-D(Sno,Sdept) ∈ 3NF D-L(Sdept, Sloc)∈ 3NF 如果R∈3NF,则R也是2NF。

局部依赖和传递依赖是模式产生数据冗余和操作异常的两个重要原因。

由于3NF模式中不存在非主属性对候选码的局部依赖和传递依赖,因此一定程度上上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题

具有较好的性能。将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

4、BC范式(BCNF):关系模式R∈1NF,若X→Y且有码,即每个属性都不传递依赖于R的码,则R ∈BCNF。

等价于:每一个决定因素都包含码,即消除任何属性对码的部分和传递函数依赖 若R∈BCNF 所有非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码,也是完全函数依赖;没有任何属性完全函数依赖于非码属性。

R ∈BCNFR ∈BCNF

R ∈3NF 。如果R∈3NF,且R只有一个候选码 R ∈3NF

时X必含

例:关系模式S(Sno,Sname,Sdept,Sage)假定S有两个码Sno,Sname S∈3NF S ∈ BCNF

例:系模式SJP(S,J,P) s 学生,J课程, P名次

函数依赖:(S,J)→P;(J,P)→S (S,J)与(J,P)都可以作为候选码,属性相交

SJP∈3NF,(不存在非主属性对码的部分和传递依赖) SJP∈BCNF,(每个决定因素都包含码) 第七章:数据库设计

三分技术,七分管理,十二分基础数据是数据库设计的特点之一。 数据库设计的基本步骤 1、需求分析 2、概念结结构设计 3、逻辑结构设计 4、物理结构设计

5、数据库实施 6、数据库运行和维护 数据字典 p207页

什么是数据库的逻辑结构设计?试述其设计步骤?E-R图向关系模型的转换

逻辑结构设计P224

4、数据库的再组织和重构造 第十章:数据库恢复技术

事务事务是用户所定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务具有四个特性:

1、原子性:事务是数据库的逻辑单位,事务中所包括的读项操作要么都做,要么都不做。

2、一致性:事务执行的结果必须是使数据库从某个一致性状态转变到另一个一致性状态。

3、隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及所试用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4、持续性:(永久性)事务一旦提交,它对数据库中主句的改变就应该是永久的。接下来的其他操作或昂不应对其执行结果产生任何影响。

为了保证事务的原子性、一致性与持续性。DBMS必须对事务故障、系统故障和介质故障进行恢复;为了保证事务的隔离性和一致性,DBMS需要对并发操作进行控制。

故障的种类及其影响以及相应的恢复策略

1、事务内部故障的恢复:事务内部故障的恢复由DBMS自动完成,对用户而言是透明的。DBMS执行的恢复步骤如下:

(1)反向扫描文件日志(即从后向前扫描日志文件),查找该事务的更新操作。

(2)对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。

(3)继续反向扫描日志文件,进行同样的处理。

(4)如此继续下去,直至独到此事务的开始标记,该事务故障恢复就完成了。 2、系统故障的恢复:会造成数据库处于不一致的状态,主要是一方面,为完成事务对数据库所做的更新可能已写入数据库;另一方面,已提交事务对数据库做的更新可能尚留在缓冲区,未能及时写入数据库。因此恢复操作就是撤销(UNDO)故障发生时为完成的事务,重做(REDO)已完成的事务。恢复步骤如下:

(1)正向扫描日志文件,找出在故障发生之前已经提交的事务队列(REDO队列)和为完成的事务队列(UNDO队列)。

(2)对于撤销队列中的各个事务进行UNDO处理。进行UNDO处理的方法是:反向扫描日志文件,对每个UNDO事务的过呢更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库中。

(3)对重做队列中的各个事务进行REDO处理。进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件中所登记的操作,激将日志记录中“更新后的值”写入数据库。

3、截至故障的恢复:恢复方法是重装数据库,然后重做已完成的事务,具体操作如下:

(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库回复到转储时的一致性状态。

(2)DBA装入转储结束时的日志文件副本。

(3)DBA启动系统恢复命令,有DBMS实现恢复功能,即重做已完成的事务。 恢复的实现技术

数据转储(动态海量转储,动态增量转储,静态海量转储,静态增量转储)

登记日志文件

第十一章:数据库并发控制技术 并发操作可能产生的数据不一致

1、丢失修改:两个事务1、2同时读入同意数据并进行修改,2所提交的结果破坏(覆盖)了1提交的结果,导致1所做的修改被丢失。

2、不可重复读:事务1读取某一数据后,事务2对其执行更新操作,使1无法再现前一次读取的结果。

3、读‘脏’数据:事务1修改某一数据,将其协会磁盘,事务2读取同意数据后,事务1由于某种原因被撤销,这是事务1已修改过的数据将恢复原值,事务2所读取的数据就与数据库中的数据不一致,则事务2所独到的就是‘脏’数据,即不正确的数据。

避免不一致性的方法是并发控制机制。最常用的并发控制技术是封锁技术。 封锁 排它锁,共享锁 活锁和死锁 P296

并发调度的可串行性,冲突可串行性化调度 P299 封锁的粒度,多粒度封锁协议 P302

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务