admin 管理员组

文章数量: 887018


2024年2月28日发(作者:字母switch)

第一章 绪论:

1. 信息:信息是关于现实世界事物的存在方式或运动状态的反映的综合,是一种被加工为特定形式的数据,有意义和价值。

2. 数据:是描述事物的符号记录,是信息的具体表现形式。

3. 数据库:是长期存储在计算机的、有组织的、可共享的大量的数据集合。

4. 数据库中的数据:按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,可共享。

5. 数据库管理系统位于用户与操作系统之间的一层数据管理软件。

主要功能:数据定义、组织、存储、操纵,数据库的事务管理和运行管理、建立和维护。

6. 数据库系统是在计算机系统中引入数据库的系统。

包括:数据库、数据库管理系统、应用系统、数据库管理员(DBA)、用户。

7. 数据处理:对各种数据进行收集、储存、加工和传播等。

8. 数据管理:数据处理的中心问题,对数据进行分类、组织、编码、存储、检索和维护。

9. 数据管理的三个阶段:人工管理、文件系统、数据库系统阶段。

10. 数据库与文件系统的根本区别:数据结构化。

11. 在数据库中,不仅文件部数据彼此相关,而且文件之间在结构上也有机地联系在一起。

12. 数据的独立性包括:a.物理独立性:用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的。b.逻辑独立性:应用程序与数据库的逻辑结构相互独立。

13. 数据的独立性是由DBMS的二级映象功能来保证的。

14. DBMS必须提供的控制功能:安全性保护、完整性检查、并发控制、数据库恢复。

15. 模型现实世界特征的模拟和抽象;数据模型是现实世界数据特征的抽象。

16. 两个不同层次的模型:a.概念模型(数据库设计)b.逻辑模型(DBMS的实现)和物理模型(系统部的表示和存取方法)

17. 抽象过程:现实世界——信息世界——机器世界。

18. 数据模型的三要素:数据结构、数据操作、完整性约束

19. 数据结构: 组成数据库的对象类型的集合、对系统静态特性的描述。

20. 数据操作:检索(查询)和更新(包括插入、删除、修改)两大类操作。

21. 完整性约束:数据及其联系所满足的制约和依存规则,以保证数据的正确、有效和相容。

22. 码(Key):唯一标识实体的属性集。

23. E-R图表示实体型、属性和联系的方法:实体型——矩形;联系——菱形;属性——椭圆。

24. 关系模型是建立在严格的数学概念之上的,它的数据结构是一二维表。

25. 关系:一个关系对应一二维表。元组:一行。属性:一列。

主码:可唯一标识元组的属性或属性组,也称为关系的键。

关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,…,属性n),如:学生(学号,,年龄,性别,专业,年级)。

26. 数据操纵主要包括查询、插入、删除和修改数据。

27. 数据库系统的三级模式结构:外模式、模式、模式。

28. 两层映象:外模式/模式映像、模式/模式映像。

29. 外模式/模式映像:当模式改变时,外模式/模式的映像要作相应的改变,以保证外模式保持不变。保证了数据的逻辑独立性。

30. 模式/模式映像:定义数据逻辑结构和存储结构之间的对应关系,当数据库的存储结构改变时,模式/模式的映像也必须作相应的修改,使得模式保持不变。保证了数据的物理独立性。

31. 模式:数据库中全部数据的逻辑结构和特性的描述。只是对记录型的描述,而与具体的值无关;不仅要定义数据的逻辑结构,还要定义数据间的联系,安全性、完整性要求。

32. 外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。

注:一个应用程序只能使用一个外模式。

33. 模式:也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库部的表示方式。

注:一个数据库只能有一个模式。

第二章 关系数据库:

1. 关系的三种完整性约束:实体完整性、参照完整性、用户自定义的完整性。

2. 域:具有相同数据类型的值的集合。域中值的个数成为基数。

3. 域表示属性的取值围。

4. 笛卡尔积:给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:D1×D2×…×Dn={(d1,d2,…,dn )| di∈Di

i=1,2,…,n},其中每一个元素(d1,d2,…,dn )叫做一个n元组(n-tuple)或简称元组(Tuple)。元素中的每一个值di叫做一个分量(Component)。

例如:给出三个域:

i. D1=导师集合SUPERVISOR={,易}

ii. D2=专业集合SPECIALITY={计算机,信息}

iii. D3=研究生集合POSTGRADUATE={勇,晨,王敏}

则D1×D2×D3= {

(,计算机,勇),(,计算机,晨),

(,计算机,王敏),(,信息,勇),

(,信息,晨),(,信息,王敏),

(易,计算机,勇),(易,计算机,晨),

(易,计算机,王敏),(易,信息,勇),

(易,信息,晨),(易,信息,王敏)}

5. 关系:D1×D2×…×Dn的子集叫做在域D1,D2,…,Dn上的关系。n是关系的目或度。

6. 由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。

7. 候选码:若关系中的某一属性组的值能唯一地标识一个元组,则该属性组就是候选码。

8. 若一个关系有多个候选码,则选定其中一个为主码。主码的属性称为主属性

9. 关系的三种类型:基本关系、查询表、视图。

注:基本表是实际存在的表;查询表式查询结果对应的表;视图表是虚表,不对应实际存储的数据。

10. 实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。

用户定义的完整性:针对某一具体关系数据库的约束条件。

11. 并:R∪S={t|t∈R∨t∈S} 差:R-S={t|t∈R∧tS} 交:R∩S={t|t∈R∧t∈S}

⌒广义笛卡尔积:R×S={trts|tr∈R∧ts∈S}

例如:给定两个关系R和S

则有:

12. 选择:在关系R中选择满足给定条件的诸元组。F(R)={t|t∈R∧F(t)=‘真’}

例:查询信息系(IS)全体学生:Sdept=‘IS’(Student)

查询年龄小于20岁的学生:Sage<20(Student)

13. 投影:关系R上的投影,是从R中选择出若干属性列构成新的关系。

A(R)={t[A]|t∈R}

例:查询学生的和所在的系:Sname,Sdept(Student)

查询学生关系中有哪些系:Sdept(Student)

14. 连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

⌒R⋈S={trts|tr∈R∧ts∈S∧tr[A]ts[B]}

AB

15. 等值连接:为“=”的连接为等值连接

16. 自然连接:两个关系中进行比较的分量必须是相同的属性组,并且去掉结果中重复的属性列。

例5 对于下面的两个关系R和S,考虑三个连接

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

R÷S={tr

[X]| tr

∈R∧ Y(S)Yx}

例6 对于下面的关系R和S,计算R÷S。

对于关系R,A可以取四个值:{a1,a2,a3,a4},其中:

a1的象集(B,C)a1 ={(b1,c2),(b2,c3),(b2 ,c1)}

a2的象集(B,C)a2 ={(b3,c7),(b2,c3)}

a3的象集(B,C)a3 ={(b4,c6)}

a4的象集(B,C)a4 ={(b6,c6

)}

S在(B,C)上的投影为:{(b1,c2),(b2 ,c1),(b2,c3)}

R÷S的结果为:➢ 几个例子关系:

例7查询选修2号课程的学生的学号

Sno( Cno=‘2’(SC))

例9 查询至少选修了一门其直接先行课为5号课程的学生。

Sname(Cpno=‘5’(Course)⋈SC⋈Sno,Sname(Student))

例10 查询选修了全部课程的学生的学号和。

Sno,Cno(SC)÷ Cno

(Course)⋈ Sno,Sname(Student)

18. 元组关系演算以元组变量作为为此变元的基本对象。典型的关系演算语言:ALPHA。

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

1.

2.

SQL的三级模式结构:外模式——视图和部分基本表、模式——基本表、模式——存储文件。

3. 定义模式:CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

CREATE SCHEMA “S-T” AUTHORIZATION WANG;为用户wang定义了一个模式S-T。

4. 删除模式:DROP SCHEMA <模式名>

注:CASCADE和RESTRICT两者必选其一。

CASCADE—级联删除:把该模式中所有的数据库对象全部一起删除。

RESTRICT—限制删除:如果该模式中已经定义了下属的数据库对象,则拒绝该删除语句的执行。没有下属对象时才能执行。

例:DROP SCHEMA ZHANG CASCADE;删除模式zhang,同时已经定义的表也被删除。

5. 模式实际上定义了一个命名空间,在这个空间可以进一步定义该模式包含的数据库对象:基本表、视图、索引等。

6. 创建了一个模式,就建立了一个数据库的命名空间,一个框架,这个空间中首先应定义的是该模式包含的基本表。

7. 非空值约束 :不知道、不确定或无法填入的值。

唯一性约束 :指明基本表上的某个列或某些列的组合在不同的元组中的取值不能相同。

主键约束:用于定义基本表的主键。

外键约束:是指一个表(称从表)的一个列或列组合,它的值需要引用另一个表(称引用表)的主键或唯一性键的值。

8. ON DELETE选项是设置当引用表中具有外键约束的行被删除时,系统所做的处理。有三种可能的处理办法:

RESTRICT:缺省选项,引用表中凡是被从表所引用的行都不准删除;

CASCADE:从表中所有引用了引用表中被删除行的行也随之被删除;

SET NULL:外键的值被设置为NULL。

9. 定义基本表:CREATE TABLE <表名>;

注:“< >”中的容是必选项“[ ]”中的容是可选项;DEFAULT选项是列指定缺省值。

例1 建立一个学生表Student,课程表course,选课表sc。

CREATE TABLE Student (

Sno CHAR(5)PRIMARY KEY,

Sname CHAR(20)UNIQUE,

Ssex CHAR(1),

Sage INT DEFAULT 18,

Sdept CHAR(15));

CREATE TABLE Course (

Cno CHAR(2)PRIMARY KEY,

Cname CHAR(30)NOT NULL,

Cpno CHAR(2),

Ccredit SMALLINT));

CREATE TABLE SC (

Sno CHAR(5),

Cno CHAR(2),

Grade SMALLINT,

PRIMARY KEY(Sno,Cno),

FOREIGN KEY(Sno)REFERENCES Student(Sno),

FOREIGN KEY(Cno)REFERENCES Course(Cno)ON DELETE CASCADE));

10. 修改基本表:ALTER TABLE <表名>+[ADD [<新列名> <数据类型>][完整性约束]]

[DROP<完整性约束名>]

[MODIFY <列名> <数据类型>];

例2 向Student表增加“入学时间(Scome)”列。

ALTER TABLE Student ADD Scome DATE;

例3 将Student表Sage的数据类型改为INT

ALTER TABLE Student MODIFY Sage INT;

例4 删除Student表学生(Sname)的唯一性约束。

ALTER TABLE Student DROP UNIQUE(Sname);

11. 删除基本表:DROP TABLE <表名>;连同数据及视图一同被删除。

例5 删除Student表。 DROP TABLE Student;

12. 建立索引:CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>]

[,<列名>[<次序>]]…);

索引提供多种存取路径,加快查询速度。建在表的一列或多列上,各列名之间用逗号分隔。列名后面还可以用次序选项指定索引值的排列次序,可选ASC(升序)或DESC(降序),缺省值为ASC;UNIQUE表明要建立唯一索引;CLUSTER表示要建立聚簇索引。

13. 聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织,并且表中的数据与索引一同存储。可以在最常查询的列上建立簇聚索引以提高查询效率。

14. 唯一索引是指每一个索引值只对应唯一的数据记录。

CREATE CLUSTER INDEX Stusname ON Student(Sname);

例 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中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);

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

例7 删除Student表的Stusname索引。

DROP INDEX Stusname;

16. 查询:SELECT[ALL|DISTINCT] <列名或表达式> [别名1][,<列名或表达式> [别名2]]…

FROM <表名或视图名> [表别名][,<表名或视图名> [表别名]]…

[WHERE <条件表达式>]

[GROUP BY <列名1>] [HAVING <条件表达式>]

[ORDER BY <列名2>] [ASC|DESC];

17. 单表查询:

例1 查询全体学生的学号和。

SELECT Sno,Sname FROM Student;

例2 查询全体学生的详细记录。

SELECT * FROM Student;

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

SELECT Sname,‘Year of Birth:’,1996-Sage,ISLOWER(Sdept)

FROM Student;

SLEECT Sname Name,‘Year of Birth:’ BIRTH,1996-Sage BIRTHDAY,ISLOWER(Sdept) DEPARTMENT(查询并将列重命名)

FROM Student;

18. 消除取值重复行:SLEECT DISTINCT Sno FROM SC;

19. 查询满足条件的元组:=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较符

BETWEEN AND,NOT BETWEEN AND确定围

IN,NOT IN确定集合(查找属性值属于指定集合的元组)

LIKE,NOT LIKE进行字符串的匹配

IS NULL,IS NOT NULL空值

AND,OR多重条件

注:当LIKE后面的匹配串中不含通配符时,可以用=取代LIKE谓词。

确定围:例10 查询年龄在20~23之间的学生的、系别和年龄。

SELECT Sname,Sdept,Sage FROM Student

WHERE Sage BETWEEN 20 AND 23;

确定集合:例13 查询不是信息系、数学系和计算机科学系学生的和性别。

SELECT Sname,Ssex FROM Student

WHERE Sdept NOT IN (‘IS’,‘MA’,‘CS’) ;

字符匹配:例21 查询缺少成绩的学生的学号和相应的课程号。

SELECT Cno,Ccredit FROM Course

WHERE Cname LIKE ‘DB_Design’ ESCAPE ’’;

(ESCAPE’’后面的字符”_”不再有通配符的含义,转移为普通的“_”字符)

涉及空值的查询:例22 查询有成绩的学生的学号和相应的课程号

SELECT Sno,Cno FROM SC

WHERE Grade IS NOT NULL;

多重条件查询:例23 查询计算机系年龄在20岁以下的学生。

SELECT Sname FROM Student

WHERE Sdept=‘CS’ AND Sage<20;

20. 对查询结果排序:用ORDER BY字句,升序(ASC)或降序排序(DESC)。

例25 查询全体学生情况,结果按所在系的系号升序排列,同一系中的学生按年龄将序排列。 SELECT * FROM Student

ORDER BY Sdept,Sage DESC ;

21. 集函数:count,sum,avg,max,min

例27 查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno) FROM SC;

22. GROUP BY子句:将查询结果按某一列或多列的值分组,值相等的为一组。

例31 查询选修了3门以上课程的学生学号。

SELECT Sno FROM SC

GROUP BY Sno

HAVING COUNT(*)>3;

23. 连接条件:连接查询中用来连接两个表的条件。

例32 查询每个学生及其选修课程的情况。

SELECT Student.*,SC.* FROM Student,SC

WHERE =;

24. 等值连接:连接运算符为=。

25. 自然连接:在等值连接中,把目标列中重复的属性列去掉,就成为自然连接。

26. 自身连接:一个表与其自己进行连接。

例34 查询每一门课的间接先修课(即先修课的先修课)

SELECT , FROM Course FIRST,Course SECOND

WHERE =;

27.

运行结果:

嵌套查询:将一个查询快嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询。

注:子查询不能用ORDER BY子句。

例37 查询与晨在同一个系学习的学生。

SELECT Sno,Sname,Sdept FROM Student

WHERE Sdept IN (

SELECT Sdept FROM Student

WHERE Sname=‘晨’);

28. 不相关子查询:子查询的查询条件不依赖于父查询。

SELECT Sno,Sname,Sdept FROM Student

WHERE Sdept=

(SELECT Sdept FROM Student

WHERE Sname=‘晨’);

注意子查询要在比较符之后。

29. 相关子查询:子查询的查询条件依赖于外层父查询的某个属性值。

例:找出每个学生超过他选修课程平均成绩的课程号

SELECT Sno, Cno FROM SC SCX

WHERE Grade>=( SELECT AVG(Grade) FROM SC SCY

WHERE =);

30. ANY:与子查询结果的某个值比较

ALL :与子查询结果的所有值比较

例39 查询其他系中比信息系某一学生年龄小的学生和年龄。

SELECT Sname,Sage FROM Student

WHERE Sage

WHERE Sdept=‘IS’) AND Sdept<>’IS’;

31. 带有EXISTS谓词的子查询:

例41 查询所有选修了1号课程的学生。

SELECT Sname FROM Student

WHERE EXISTS (SELECT * FROM SC

WHERE = AND Cno=‘1’);

用连接可写成:

SELECT Sname FROM Student,SC

WHERE = AND =‘1;

例42 查询选修了全部课程的学生。

SELECT Sname FROM Student

WHERE NOT EXISTS

(SELECT * FROM Course

WHERE NOT EXISTS

(SELECT * FROM SC

WHERE =

=));

32. 例46 查询选修了课程1或者选修了课程2的学生学号。

SELECT Sno FROM SC

WHERE Cno=‘1’

UNION

SELECT Sno FROM SC

33.

WHERE Cno=‘2’;

例48 查询同时选修了课程1和课程2的学生学号。

SELECT Sno FROM SC

WHERE Cno=‘1’ AND Sno IN

(SELECT Sno FROM SC

WHERE Cno=‘2’);

34. SQL中更新包括:插入、删除、修改

例1 将一个新学生记录(学号:200215128;:东;性别:男;所在系:IS;年龄:18)插入到Student表中。

INSERT INTO Student VALUES (‘200215128’,‘东’,‘男’,‘IS’, 18);

例2 对每一个系,求学生的平均年龄,并把结果存入数据库。

CREATE TABLE Deptage(Sdept CHAR(15),Avgage SMALLINT);

INSERT INTO Deptage(Sdept,Avgage)

SELECT Sdept,Avg(Sage) FROM Student

GROUP BY Sdept;

例3 将学生200215121的年龄改为22岁。

UPDATE Student

SET Sage=22

WHERE Sno=‘200215121’;

例4 删除学号为200215128的学生记录。

DELETE

FROM Student

WHERE Sno=‘200215128’;

35. 视图:从一个或几个基本表(或视图)导出的表,是一个虚表。数据库中只存放视图的定义。而不存放视图对应的数据,这些数据仍存放在原来的基本表中。

例2 建立信息系学生的视图,并要求更新视图时仍保证视图只有信息系的学生。

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage FROM Student

WHERE Sdept=‘IS’

WITH CHECK OPTION(当对视图进行插入或更新时,要保证新行满足视图的定义中的谓词条件。)

注:AS下面的子查询通常不允许含有ORDER BY子句和DISTINCT短语。

36. 行列子集视图:若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了码,称这类视图为行列子集视图。

例4 建立信息系选修了1号课程的学生视图。

CREATE VIEW IS_S1(Sno,Sname,Grade)

AS

SELECT ,,Grade FROM Student,SC

WHERE Sdept=‘IS’ AND = AND =‘1’;

37. 虚拟列:视图定义中的一些基本表中并不存在派生属性。表达式视图:带虚拟列的视图。

例5 定义一个反映学生出生年份的视图。

CREATE VIEW BT_S(Sno,Sname,Sbirth)

AS

SELECT Sno,Sname,2006-Sage FROM Student;

38. 删除视图:例8 删除视图IS_S1: DROP VIEW IS_S1;

39. 视图查询:

例3 在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩。

SELECT * FROM S_G

WHERE Gavg>=90;

视图消解后得到:

SELECT Sno,AVG(Grade) FROM SC

WHERE AVG(Grade)>=90 GROUP BY Sno;

正确的查询语句应该是:

SELECT Sno,AVG(Grade) FROM SC

GROUP BY Sno; HAVING AVG(Grade)>=90

40. 并不是所有视图都可以更新,一些视图是理论上可更新的,一些是理论上不可更新的。通常行列子集视图允许更新。

视图不允许更新的情况:书P124

41. 视图的作用:简化用户操作;使用户以多种角度看待同一数据;对重构数据库提供了一定程度的逻辑独立性;对数据提供安全保护;更清晰的表达查询。

42. SQL中数据控制功能包:事务管理功能和数据保护功能;数据库的安全性和完整性控制。

43. DBMS安全控制功能:把授权决定告知系统;授权结果存入数据字典;用户提出操作请求时,根据授权情况进行检查,以决定是否执行操作请求。

44. 授权:GRANT <权限>[, <权限>] …[ON <对象类型><对象名>]TO <用户> [,<用户>

例1 把查询Student表的权限授给用户U1。

GRANT SELECT ON TABLE Student TO U1;

例3 把查询Student表和修改学生学号的权限授予所有用户。

GRANT UPDATE(Sno),SELECT ON TABLE Student TO PUBLIC;

例5 DBA把在数据库S_C中建立表权限授予用户U8,并允许此权限再授予其他用户。

GRANT CREATETAB ON DATABASE S_C TO U8 WITH GRANT OPTION;

45. 收回权限:REVOKE <权限> [,<权限> ] … [ON <对象类型> <对象名> ] FROM <用户>

例7 把用户U4修改学生学号的权限收回。

REVOKE UPDATE(Sno) ON TABLE Student FROM U4;

第五章 数据库完整性

1. 数据库的完整性是指数据的正确性和相容性。

2. 完整性:防止数据库中存在不符合语义的数据,防止错误的信息的输入和输出造成的无效操作和错误结果。

安全性:保护数据库防止恶意的破坏和非法的存取。

3. 完整性约束条件是加在数据库数据之上的语义约束条件。

4. 完整性检查是检查数据是否满足完整性条件的机制。

5. 完整性控制机制具有三个方面的功能:定义,检查,保证数据的完整性。

6. 实体完整性在CREATE TABLE中用PRIMARY KEY定义。

完整性检查包括:主码值是否唯一,不唯一则拒绝修改;检查注明的各属性是否为空,一个空则拒绝修改。

7. 参照完整性:FOREIGN KEY和REFERENCES短语定义外码和所参照的主码。

8. 自定义完整性约束条件:NOT NULL UNIQUE CHECK

第六章 关系数据理论

例:用于描述学生情况的一组属性:

U={SNO,SDEPT,MN,CNAME,G}。这里,这些属性分别描述学号、系、系负责人、课程名和成绩。由现实世界已知的事实可知:

➢ 一个系有若干学生,但一个学生只属于一个系;

➢ 一个系只有一名负责人;

➢ 一个学生可以选修多门课程,每门课程有若干学生选修;

➢ 每个学生学习每一门课程有一个成绩。

因此可得到属性集U上的一组函数依赖:

F={SNO→SDEPT,SDEPT→MN,(SNO,CNAME) →G}

 不好的模式常见的四个问题:插入异常、删除异常、冗余太大、更新异常。

➢ 解决办法:S(SNO,SDEPT,SNO→SDEPT);

SG(SNO,CNAME,G,(SNO,CNAME)→G);

DEPT(SDEPT,MN,SDEPT→MN)。

1. 关系数据库的规化理论主要包括三个方面的容:函数依赖、式、模式设计。其中,函数依赖起着核心的作用。

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

3. X→Y,但Y⊈X则称X→Y是非平凡的函数依赖;X→Y,但Y包含于X则称X→Y是平凡的函数依赖;若X→Y,则X叫做决定因素。

4. 在R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有 X′↛Y,则称Y对X完全函数依赖。

5. 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。

6. 在R(U)中,如果X→Y,(Y⊈X),Y↛X,Y→Z,则称Z对X传递函数依赖。

注:如果Y→X,则XY,实际上是X直接→Z,是直接函数依赖而不是传递函数依赖。

7. 5NF  4NF  BCNF  3NF  2NF  1NF

8. 一个低一级式的关系模式,通过模式分解可以转换为若干个高一级式的关系模式的集合,这种过程叫做规化。

9. 第一式:关系中每个属性都是不可再分的简单项。1NF,记作R1NF。满足这个条件的关系称为规化关系。注:在非规化的关系中去掉组合项就能化成规化的关系。

10. 2NF:若R1NF,且每一个非主属性完全函数依赖于码,则R2NF。

➢ 考虑关系模式S-L-C(SNO,SDEPT,SLOC,CNO,G),其中SLOC为学生的住处,并且每个系的学生住在同一个地方。

 这里码为(SNO,CNO)。满足的函数依赖有: F

(SNO,CNO) →G,

SNO→SDEPT,SDEPT→SLOC,SNO→SLOC,P

(SNO,CNO) →SDEPT,P

(SNO,CNO)→SLOC 。

所以 S-L-C2NF

11. 不满足2NF和3NF的关系模式会产生以下问题:插入异常 删除异常 修改复杂。

➢ 分析上面的例子,可以用投影分解把S-L-C分解为:

SC(SNO,CNO,G) F

(SNO,CNO) →G

S-L(SNO,DEPT,SLOC)

SNO→SDEPT

SDEPT→SLOC

SNO→SLOC

12. 3NF:关系模式R < U,F>中若不存在这样的码X,属性组Y及非主属性Z(Z⊈Y),使得X→Y,Y ↛X ,Y→Z成立,则称R < U,F > 3NF。注:若R3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。

考虑分解得到的关系模式S-L(SNO,SDEPT,SLOC)。由于:

SNO→SDEPT SDEPT→SLOC SDEPT↛SNO 所以S-L3NF

解决办法是对S-L分解消除非主属性对码的传递函数依赖:

S-D(SNO,SDEPT) SNO→SDEPT

D-L(SDEPT,SLOC) SDEPT→SLOC

13. BCNF:关系模式R1NF。若X→Y且Y⊈X时,X必含有码,则R BCNF。也就是说,关系模式R中,若每一个决定因素都包含码,则RBCNF。

14. 一个满足BCNF的关系模式有:所有非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码,也是完全函数依赖;没有任何属性完全函数依赖于非码的任何一组属性。

➢ 例子:考察关系模式Course(CNO,CNAME,PCNO),它只有一个码CNO,这里没有任何属性对CNO部分依赖或传递依赖,所以Course3NF。同时CNO是唯一的决定因素,所以CourseBCNF。

➢ 对于关系模式Student(SNO,SNAME,SDEPT,SAGE),假定SNAME也具有唯一性,那么Student就有两个码,这两个码都由单个属性组成,彼此不相交。其他属性不存在对码的传递依赖与部分依赖,所以Student3NF。同时Student中除SNO,SNAME外没有其他决定因素,所以Student也属于BCNF。

➢ 关系模式SJP(S,J,P)中,S是学生,J表示课程,P表示名次。每一个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生(即没有并列名次)。

 由语义可得到下面的函数依赖:

(S,J)→P (J,P)→S

所以(S,J)与(J,P)都可以作为候选码。这两个码各由两个属性组成,而且它们是相交的。这个关系模式中显然没有属性对码传递依赖或部分依赖。所以SJP3NF,而且除(S,J)与(J,P)以外没有其他决定因素,所以SJPBCNF。

➢ 关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课;每门课有若干教师;某一学生选定某门课,就对应一个固定的教师 。

 由语义可得到下面的函数依赖:

(S,J)→T (S,T)→J T→J

这里(S,J),(S,T)都是候选码。STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STJ不满足BCNF关系,因为T是决定因素,而T不包含码。

STJ仍存在插入异常 将其分解为:ST(S,T) TJ(T,J)

15. 关系规化的过程如下图所示:

16. 在实际应用中,最有价值的是3NF和BCNF。

17. 合并规则:由X→Y,X→Z,有X→YZ。

18. 伪传递规则:由X→Y,WY→Z,有XW→Z。

19. 分解规则:由X→Y及ZY,有X→Z。

20. X→A1A2…Ak成立的充分必要条件是X→Ai成立

+21. 在关系模式R 中为F所逻辑蕴含的函数依赖的全体叫做F的闭包,记为F。

➢ 已知关系模式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) =AB∪CD=ABCD;

因为X(0)X(1),所以再找出左部为ABCD子集的那些函数依赖,又得到C→E,AC→B,于是X(2)=X(1)∪BE= ABCDE。

因为X(2)已等于全部属性集合,所以(AB)F+=ABCDE。

22. 模式分解:分解具有无损连接性、分解保持依赖、既具有无损连接性又保持依赖。

练习:

➢ 设有关系模式R(A,B,C,D,E),其上的函数依赖集:

F={A → BC,CD → E,B → D,E → A}

① 计算A+。

② 求出R的所有候选关键字。

③ R满足的最高式。

➢ 设有一教学管理数据库,其属性包括:学号(S#),课程号(C#),成绩(G),任课教师(TN),教师所在的系(D)。这些数据有下列语义:

学号和课程号分别与其代表的学生和课程一一对应;一个学生所修的每门课程都有一个成绩;每门课程只有一位任课教师,但每位教师可以有多门课程;教师中没有重名,每个教师只属于一个系。

① 试根据上述语义确定函数依赖集。② 如果用上面所有属性组成一个关系模式,那么该关系模 式满足的最高式级别是什么?③ 分解为3NF。

第七章 数据库设计

1. 数据库设计:对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能有效的存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。

2. 数据库设计的目标:为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。

3. 现代数据库设计的特点:“三分技术,七分管理,十二分的基础数据”;

结构(数据)设计和行为(处理)设计相结合。

4. 规设计法:新奥尔良方法、基于E-R模型的数据库设计方法、基于3NF的设计方法、ODL方法。

5. 按规设计法可将数据库设计分为六个阶段:

分析设计阶段:前四个阶段

面向用户的应用要求,面向具体的问题: 需求分析 概念结构设计

面向数据库管理系统: 逻辑结构设计 物理结构设计

实现和运行阶段:后两个阶段

面向具体的实现方法: 数据库实施 数据库运行与维护

6. 数据库设计的生存期:指从数据库研制到不再使用它的整个时期。

➢ 需求分析是整个数据库设计过程的基础,要收集数据库所有用户的信息容和处理要求,并加以规格化和分析。

➢ 概念结构设计:整个数据库设计的关键,通过对用户需求进行综合、归纳与抽象,形成独立于任何DBMS软件和硬件的概念模型。

➢ 逻辑结构设计:将上一步得到的概念结构转换为某个DBMS所支持的数据模型,并对其进行优化。

➢ 数据库物理设计:为逻辑数据模型建立一个完整的能实现的物理数据库结构,包括存储结构和存取方法。

➢ 数据库实施阶段:运用DBMS提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

➢ 数据库运行、维护阶段:收集和记录实际系统运行的数据,数据库运行的记录用来提高用户要求的有效信息,用来评价数据库系统的性能,进一步调整和修改数据库。

7. 数据库结构设计的不同阶段形成数据库的各级模式:

➢ 需求分析阶段,综合各个用户的需求;

➢ 概念设计阶段形成独立于及其特点,独立于各个DBMS产品的概念模式(E-R图);

➢ 逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式;

➢ 物理设计阶段,根据DBMS的特点和处理需要,进行物理存储安排,建立索引,形成数据库模式。

8. 需求分析的任务:通过详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,收集支持新系统的基础数据并对其进行处理,确定新系统的功能。

9. 获得用户对数据库的如下要求:信息要求、处理要求、安全性与完整性要求。

10. 数据应用系统设计的特点:用户参加数据库设计。

11. 需求分析的方法:自顶向下的分析方法。SA方法从最上层的系统组织机构入手,采用逐层分解的方式分析系统,用数据流图和数据字典描述系统。

12. 数据字典包括:数据项、数据结构、数据流、数据存储、处理过程。

13. 数据项是不可再分的数据单位。

14. 数据结构:反映数据之间的组合关系。可以由若干个数据项或数据结构组成。

15. 数据流可以是数据项,也可以是数据结构,它表示某一处理过程中数据在系统传输的路径。

16. 需求分析注意:设计人员要充分考虑到可能的扩充和改变;强调用户的参与。

17. 概念结构设计:将需求分析得到的用户需求抽象为信息结构即概念模型的过程。

做法:选择局部应用;逐一设计分E-R图。

18. 概念结构是对现实世界的一种抽象。三种抽象:分类、聚集(整体与部分)、概括(一般与特殊,子集关系)。

19. E-R图中的冲突有三种:属性冲突、命名冲突和结构冲突。

将E-R图转换为关系模型实际上就是将实体、属性和联系转换成关系模式。

在转换中要遵循以下原则:(1)将每一个实体转换为一个关系;(2)所有主码必须定义非空。

20. 实体间的联系有以下几种转换规则:

➢ 一个1:1的联系可以转换为一个独立的关系,也可以与任意一端对应的关系合并。

➢ 一个1:n联系可以转换为一个独立的关系,也可以与n端对应的关系合并。

➢ 一个m:n联系转换为一个关系。

➢ 三个或三个以上实体间的一个多元联系可以转换为一个关系。

➢ 具有相同码的关系模式可合并。

21. 数据库物理设计:对于给定的逻辑数据模型,选取一个最适合应用环境的物理结构的过程。任务是为了有效地实现逻辑模式,确定所采取的存储策略。

22. 数据库的物理设计可分为两步:确定数据库的物理结构;对物理结构进行评价。

23. 关系模式常用的三类存取方法:索引方法、聚簇(Cluster)方法、HASH方法。

24. 聚簇就是为了提高查询速度,把在一个(或一组)属性上具有相同值的元组集中地存放在一个物理块中。如果存放不下,可以存放在相邻的物理块中。其中,这个(或这组)属性称为聚簇码。

25. 两个作用:聚簇值不必在每个元组中重复存储;大大提高按聚簇码进行查询的效率。

26. 一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。

第十章 数据库恢复技术

1. 事务:用户定义的一个数据库操作序列,要么全不做,要么全做,是一个不可分割的工作单位。

2. 事务的和程序是两个概念。一般地讲, 一个程序中包含多个事务。

在SQL语言中,定义事务的语句有三条:

BEGIN TRANSACTION开始

COMMIT结束:表示提交,将事务中所有对数据库的更新协会到磁盘,正常结束事务。

ROLLBACK结束:回滚,事务运行过程中发生故障,将事务中队数据库的已完成的更新操作全部车型,回滚到事务开始的状态。

3. 事务的四个特性:简称ACID

原子性:要么都做,要么都不做。是数据库的逻辑工作单位。一致性;隔离性;持续性。

4. 数据库的恢复:把数据库从错误状态恢复某一致的正确状态的功能。

5. 数据库恢复机构的目的:保证事务的原子性; 当系统发生故障以后,数据库能够恢复到正确状态 。

➢ 事务部的故障:在不影响其他事务运行的情况下,强行回滚事务,既撤消该事务已经作出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作成为事务撤销(UNDO)。

➢ 系统故障:恢复子系统除需要撤销所有未完成事务外,还需要重做(REDO)所有已提交的事务,以将数据库真正恢复到一致状态。

➢ 介质故障(又称为硬故障 )。

➢ 计算机病毒。

6. 恢复的原理概括为:冗余。数据库中任何一部分被破坏的或不正确的数据可以根据存储在系统别处的冗余数据来建立。

7. 建立冗余数据最常用的技术是:数据转储和登录日志文件。

8. 恢复机制涉及的两个关键问题:如何建立冗余数据;如何利用这些冗余数据实施数据库恢复。

9. 数据转储即由DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。

10. 日志文件是用来记录事务对数据库的更新操作的文件。日志文件需要登记的容:各个事务的开始标记、结束(标记、所有更新操作。

11. 日志文件可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。具体作用:事务故障恢复和系统故障恢复必须用日志文件;在动态转储方式中,必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。在静态转储方式中,也可以建立日志文件。把已完成的事务进行重做处理,对故障发生时未完成的事务进行撤销处理。

12. 登记日志文件时必须遵循的原则:严格按并发事务执行的时间次序来进行登记;必须先写日志文件,后写数据库。

13. 事务故障的恢复步骤:

反向扫描文件日志;对该事务的更新操作执行逆操作;继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理;直到读到此事务的开始标记。

14. 系统故障的恢复:正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标志记入重做队列;找出故障发生时尚未完成的事务,将其事务标识记入撤销队列。

15. 介质故障的恢复步骤:装入最新的数据库后备副本;装入相应的日志文件副本,重做已完成的事务。

第十一章 并发控制

1. 交叉并发方式:在单处理机系统中,事务的并行执行实际上是这些事务的并行操作轮流交叉运行。多个程序同时提交到CPU,但对于CPU仍是每一时刻只运行一个程序。

2. 同时并发方式:多处理机系统中,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。

3. 事务时并发控制的基本单位。为了保证事务的隔离性和一致性,DBMS需要对并发操作进行正确调度。

4. 并发操作带来的数据不一致性主要包括:丢失修改、不可重复读、读脏数据。

➢ 丢失修改:甲修改的数据乙没看到,乙又进行了修改,此时,甲的结果被覆盖。

➢ 不可重复读:要用到原来的数据,却没有读到原容。

➢ 读脏数据:某事物对数据进行了修改,中间过程被读取,后来事务却取消了修改,回复原来的值,那么读到了一个不存在的数据。

5. 并发所引起的问题来自对同一数据对象的写-写冲突或读-写冲突,问题出在“写”上,并发操作破坏了事务的隔离性,只读事务并发执行不会发生问题。

6. 实现并发控制的主要技术是封锁。

7. 基本封锁类型:

排它锁(写锁X锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,

其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不 能再读取和修改A。

共享锁(读锁S锁):若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

8. 一级封锁协议可防止丢失修改,并保证事务T是可恢复的;二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据;三级封锁协议进一步防止了不可重复读。

9. 避免活锁的简单方法是采用先来先服务的策略。

10. 事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形。

11. 在同时处于等待状态的两个或多个事务中,其中的每一个事务在它能够执行之前,都等待着某个数据对象,而这个数据对象已被其中的某个事务所封锁,从而造成相互等待的现象,这种状态称为死锁。

12. 预防死锁方法:一次封锁法;顺序封锁法。

13. 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。

14. 可串行性是并发事务正确性的准则。一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。

15. 冲突可串行化调度是可串行化调度的充分条件,不是必要条件。

16. 两段锁协议:所有事务必须分两个阶段对数据项加锁和解锁

a) 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;

b) 在释放一个封锁之后,事务不再申请和获得任何其他封锁。

17. 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。

18. 一次封锁法遵守两段锁协议;但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。

19. 封锁对象的大小称为封锁粒度。

20. 显式封锁:直接加到数据对象上的封锁;

隐式封锁:该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁。

21. 一般地,对某个数据对象加锁:检查该数据对象上有无显示封锁与之冲突;检查其所有上级结点,看本事务的显示封锁是否与该数据对象上的隐式封锁冲突;检查其所有下级结点,看上面的显示封锁是否与本事务的隐式封锁冲突。

22. 意向锁:如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。

23. 意向共享锁:如果对一个数据对象加IS锁,表示它的后裔结点拟加S锁。例如,要对某个元组加S锁,则要首先对关系和数据库加IS锁。

24. 意向排它锁:如果对一个数据对象加IX锁,表示它的后裔结点拟加X锁。例如,要对某个元组加X锁,则要首先对关系和数据库加IX锁。

25. 共享意向排它锁:如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例如对某个表加SIX锁,则表示该事务要读整个表,同时会更新个别元组。


本文标签: 数据库 数据 事务