数据库原理复习

news/2025/3/17 14:17:55/文章来源:https://www.cnblogs.com/hjdssj/p/18776766

数据库复习

第一章 数据库发展史

1、数据管理技术的发展(特点)

人工管理阶段,文件系统阶段,数据库技术,文件系统的缺陷(数据冗余性,数据不一致性、数据联系弱)

2、数据库技术的产生

进入数据库阶段的标志是20世纪60年代末的三件大事

1968年IBM公司研制的IMS系统——典型的层次DBS

1969年美国CODASYL组织 DBTG报告踢出——网状DBS的概念

1970年美国IBM公司的E.F.COOD发表的论文踢出——关系模型的思想

数据库阶段的特点:

(1)采用数据模型标识复杂的数据结构(数据库的三级体系结构)

(2)有较高的数据独立性(逻辑数据独立性、物理数据独立性)

(3)数据库系统为用户提供了方便的用户接口

(4)数据库系统提供四方面的数据控制功能:数据库的并发控制、数据库的回复、数据的完整性、数据安全性。

(5)对数据的操作以数据项为单位,增加了系统的灵活性。

3、数据库技术的术语

用户——DBMS——DB

DBMS(数据库管理系统)、DB(数据库)和用户三样东西加起来,通常被称为数据库系统(Database System,DBS)。

4、数据库技术的发展

关注分布式数据库(不怎么考)

第二章 数据库系统结构

现实——信息——机器 三个世界的转换

现实世界到信息世界 通过ER图

信息世界到机器世界 通过逻辑设计,把ER图转化成了某一种数据模型(层次、网状、关系,层次、网状被淘汰了)所以逻辑设计就是把一张ER图转化成一张张的表

1、数据描述

从事物的特性到计算机中的具体表示,分别经历了三个阶段:

​ 概念设计中的数据描述(实体、属性、实体集、实体标识符)

​ 逻辑设计中的数据描述(记录、字段、文件、关键码)——表中的行是记录,列是字段,表本身是文件

​ 物理设计中的数据描述(位、字节、字、块、桶、卷)

注意他们的差别:

​ 概念设计中的数据描述与逻辑数据描述的差别;

​ 逻辑数据描述与物理数据描述的差别。

存储介质的层次:图2.1

2、数据联系的描述

联系的元数:与一个联系有关的实体集的个数

联系的类型: 一对一(1:1)

​ 一对多(1:n)

​ 多对多(m:n)

image-20250218183033116

3、数据模型的概念: 表示实体类型及实体间联系的模型

概念数据模型(对现实世界的第一层抽象)

是按用户的观点对数据建模,强调其语义表达能力。

(独立于计算机系统的模型,用于建立信息世界的数据模型)。

逻辑数据模型 “结构数据模型”:(对现实世界的第二层抽象)

是直接面向数据库的逻辑结构,与DBMS有关。

(从计算机的观点对数据建模,用于建立机器世界的数据模型)

概念数据模型--实体联系模型(ER模型)

在ER模型中有四个基本成分:

​ 矩形框表示实体类型;

​ 菱形框表示联系类型(实体间的联系);

​ 椭圆形框表示实体类型和联系类型的属性;

​ 用直线连接:实体与属性;

​ 联系与属性;

​ 实体与实体;

相应的命名均记人各种框中。

对于关键码的属性,在属性名下划一横线。

建立ER模型的步骤如下:

首先确定实体类型和联系类型,

接着把实体类型和联系类型组合成ER图;

然后确定实体类型和联系类型的属性,

再确定实体类型的键,在属于键的属性名下划一横线。

(包括第六章ER模型的扩充)

逻辑数据模型:面向数据库逻辑结构的模型。

逻辑数据模型包含:

​ 数据结构、数据操作和数据完整性约束。

数据结构是指对实体类型和实体间联系的表达和实现;

数据操作是指对数据库的检索和更新(包括插入、删除、修改)两类操作的实现;

数据完整性约束给出数据及其联系应具有的制约和依赖规则。

逻辑数据模型主要有:

层次模型:用树型结构来表示实体类型及实体之间联系的模型,称为层次模型。(数据之间的联系通过指针实现)

网状模型:用有向图结构表示实体类型及实体间联系的模型,称为网状模型。(数据之间的联系通过指针实现)

关系模型:用二维表格结构来表示实体集。(数据之间的联系,是通过外键和主键间联系实现的 即:公共属性…)

面向对象模型:数据之间嵌套、递归联系是通过对象标识符实现的

层次网状数据库通过指针来联系

关系数据库通过共同属性(外键)来联系

4、数据库的体系结构

三级模式结构

三级结构和两级映象

数据独立性定义

两级数据独立性: 物理数据独立性、逻辑数据独立性

5、数据库管理系统

image-20250218185100992

用户访问数据的过程 :

image-20250218185111231

DBMS的主要功能:

(1)数据库的定义功能:建数据库表视图索引等

(2)数据库的操纵功能:增删查改

(3)数据库的保护功能:第八章的四大功能:恢复、并发、完整性、安全性

(4)数据库的维护功能:

(5)数据字典:数据库的数据库,把数据库以及数据库中的对象(表、视图、索引等)的相关信息记录在数据字典。数据字典存放了数据库的相关信息(例如谁建的,建在哪)和数据库的对象的相关信息。

DBMS的模块组成(太专业,可以不用看)

从模块结构来观察,DBMS由两大部分组成:查询处理器和存储管理器。

查询处理器有四个主要成分:DDL编译器,DML编译器,嵌入式DML的预编译器及查询运行核心程序。

存储管理器有四个主要成分:权限和完整性管理器,事务管理器,文件管理器及缓冲区管理器。

数据库管理系统:模块结构(太专业,可以不用看)

image-20250218185245943

6、数据库系统DBS

DBS的组成:

数据库DB、硬件(计算机)、软件(DBMS、操作系统等)、数据库管理员DBA(用户)

DBS的全局结构(略)

DBS结构的分类(略)

DBS的效益(略)

数据库管理员DBA:

DBA是控制数据整体结构的一组人员,负责DBS的正常运行,承担创建、监控和维护数据库结构的责任。

DBA的主要职责:

① 定义模式

② 定义内模式(存在什么地方)

③ 与用户的联络。包括定义外模式、应用程序的设计、提供技术培训等专业服务。

④ 定义安全性规则,对用户访问数据库的授权。

⑤ 定义完整性规则,监督数据库的运行。

⑥ 数据库的转储与恢复工作。

第三章 关系运算(重点)

作业一定要好好看

两个重点:学会写关系代数表达式和学会用语法树来做查询优化(主观题)

也有很多客观题要考,基本概念要梳理。

1、基本概念

关系模型:

用二维表格表示实体集,用关键码表示实体间联系的数据模型;

关键码:

超键、候选键、主键和外键;(P.37)

唯一决定这一行的都叫超键

超键里不含有多余属性的叫候选键

候选键中选一个是主键

外键可能不是主键,可能是另一个关系的主键,是两张表联系的纽带

拿到一个关系一定要找到主键和外键。要找主键肯定要找超键,要找超键肯定要找候选键

关系的定义和特点;(P.36-P.37,P.41)

这部分参考数据库中关系有哪些性质(结合例子自己理解)_数据库关系的性质-CSDN博客

关系有几个性质,一定要搞清楚。

1、列是同质的,即每列中的数据必须来自同一个域,具有相同的数据类型

这句话怎么理解呢,性别我们有男女之分,但是也可以用1和2来代表男和女或者M或者F。所以当你选择用男或者女用M和F时,你就不能用1和2.这就是同质。

2、每列必须是不可再分的数据项

这句话怎么理解呢,工资有基本工资、绩效工资和岗位工资等等。你不能将表中单独放一个栏目叫做工资下面几个小工资,你必须将工资分成不可割分之后并列。比如:

image-20250218191546223

图2就不可以!!!!

3、元组(记录)不重复,即不能有相同的行

这个不用举例,记录不存在冗余。假如你存储了王大记录,你就不能再存储王大记录。

4、元组无序性,即行次序无关

这句话可以理解为:张明这条记录和王红的记录可以上下互换,表示同样的意思,无异性。

5、属性无序性,即列次序无关

这句话理解更简单,假如学生信息表,你把性别和年龄列交换顺序都一样。比如:

image-20250218191830503

两者相同!!!!!!

6、属性不同名

三类完整性规则:

实体完整性规则(约束主键,不为空)、参照完整性规则(约束外键)、用户定义的完整性规则;(P.40-P.41)。

前两个完整性是必须干的。第三个在第八章有很多。

ER模型到关系模型的转换规则;

过程性语言与非过程性语言:

过程性语言:编程时必须指出“干什么”及“怎么干”的语言;

非过程性语言:编程时只须指出“干什么”,不必指出“怎么干”。

非过程性语言与过程性语言的区别

image-20250218190929307

关系运算包括:关系代数和关系演算两类。

2、关系代数(P.42—P.51)理论基础:集合运算

五个基本操作(并、差、笛卡儿积、投影、选择);

四个组合操作(交、联接、自然联接、除);

交是通过两次差获得的;链接运算是通过两张表先笛卡尔积,完了再做选择;自然链接(三种运算组合而成)的条件是两张表要有相同属性,把两张表相同属性的行连接起来得到的;除运算也是三种运算组合而成(哪三种?)

三个扩充的关系代数操作(外联接、外部并、半联接);

关系代数表达式的运用技巧

(1)一般规则

对于只涉及到选择、投影、联接的查询可用下列表达式表示:

π…(σ…(R×S)) 或者 π…(σ…(R⋈S))

(2) 对于否定的操作,一般要用差操作表示;

例如: “检索不学C2课的学生姓名”。

不能用下式表示: πSNAME,AGE(σCNO≠'C2'(S⋈SC))

一定要用“差”的形式:

πSNAME,AGE(S)-πSNAME,AGE(σCNO='C2'(S⋈SC))

(3)对于具有“全部”或“包含”问题的检索,一般要用除法操作表示。

例: “检索学习全部课程的学生学号”:

πSNO,CNO(SC)÷πCNO(C)

不能表示为:πSNO (SC÷πCNO(C))

3、查询优化(P.57-P.64)

用语法树的办法来做查询优化。

第一步 写出表达式

第二步 画出原始语法树

第三步 把所有选择往树叶端点靠(往最下靠)

第四步 把所有投影往树叶端点靠

关系代数表达式的优化问题;

关系代数表达式的等价变换规则;

优化的策略;

优化算法、例 3.24

第四章 关系数据库语言SQL (P.67-P.97)(重点)

参考:史上最全SQL基础知识总结(理论+举例)-CSDN博客

SQL:DDL:CREATE;DROP;ALTER (Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

​ DQL:SELECT(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

​ DML:INSERT;DELETE;UPDATE (Data Control Language):数据控制语言,用来定义访问权限和安全级别;

​ DCL:(Data Query Language):数据查询语言,用来查询记录(数据)

考试百分之80考SELECT,百分之20考另外六条

1、SQL数据库的体系结构,SQL的组成。

2、SQL的数据定义:SQL模式、基本表和索引的创建和撤销,SQL提供的数据类型。

3、SQL的数据查询:SELECT语句的格式,单表和多表查询,基本表的联接操作,聚合和分组,集合操作。

4、SQL的数据更新:插入、删除和修改语句。

5、视图的创建和撤消,对视图更新操作的限制。

6、嵌入式SQL:预处理方式,使用规定,使用技术。不考主观题

客观题就是概念,主观题就是sql命令

SELECT语句

语法:

select 列名 ----> 要查询的列名称from 表名 ----> 要查询的表名称where 条件 ----> 行条件group by 分组列 ----> 对结果分组having 分组条件 ----> 分组后的行条件order by 排序列 ----> 对结果分组limit 起始行, 行数 ----> 结果限定

内容分析

SELECT语句是SQL的核心内容,应掌握下列内容。

1.SELECT语句的来历

在关系代数中最常用的式子是下列表达式:

πA1,…,An(σF(R1×…×Rm))

这里R1、…、Rm为关系,F是公式,A1、…、An为属性。

为此SQL设计成SELECT—FROM—WHERE句型:

SELECT A1,…,AnFROM R1,…,RmWHERE F

该句型是从关系代数表达式演变来的,但WHERE子句中的条件表达式F要比关系代数中公式更灵活。

2.SELECT语句中出现的基本表名,应理解为基本表中的元组变量,而列名应理解为元组分量。

3.SELECT语句的语义通常有三种情况(SQL标准):

以学生表S(SNO,SNAME,AGE,SEX)为例说明。

第一种情况:SELECT语句中未使用分组子句,也未使用聚合操作,

那么SELECT子句的语义是对查询的结果执行投影操作。

如:

SELECT SNO,SNAMEFROM SWHERE SEX='M';

第二种情况:SELECT语句中未使用分组子句,但在SELECT子句中使用了聚合操作,此时SELECT子句的语义是对查询结果执行聚合操作。

如:

SELECT COUNT(\*),AVG(AGE)FROM S  WHERE SEX='M';

该语句是求男同学的人数和平均年龄。

第三种情况:SELECT语句使用了分组子句和聚合操作,此时SELECT子句的语义是对查询结果的每一分组去做聚合操作。

如:求男同学每一年龄的人数。

SELECT AGE,COUNT(\*)FROM SWHERE SEX='男'GROUP BY AGE;	

SQL的数据更新:

插入、删除和修改语句 (P.89-P.91)

数据插入

1、插入单个元组:

INSERT INTO 基本表名(列名表)VALUES (元组值)

2、插入子查询的结果:

INSERT INTO 基本表名(列名表)SELECT 查询语句;

数据删除

删除关系中满足条件的元组语句的句法如下:

DELETE FROM <表名> WHERE  <条件表达式>

数据修改

UPDATE 基本表名 SET 列名=值表达式[,列名=值表达式…][WHERE 条件表达式]

视图的更新操作 (P.91-P.92)

对于视图元组的更新操作(INSERT、DELETE、UPDATA),有以下三条规则:

① 如果一个视图是从多个基本表使用联接操作导出的,那么不允许对这个视图执行更新操作。

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

③ 如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键或某个候选键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。

在SQL2中,允许更新的视图在定义时,必须加上“WITH CHECK OPTION”短语。

嵌入式SQL的使用技术:(主观题不考,客观题考)

嵌入式SQL的实现,有两种处理方式:

1、扩充宿主语言的编译程序,使之能处理SQL语句;

2、采用预处理方式。

目前多数系统采用后一种方式。

处理数据一行的不需要游标,处理数据多行的用游标

处理数据一行的只需要定义几个变量放值就行

游标怎么用?定义游标declare,打开游标open,推进游标fetch,关闭游标close

image-20250218203303828

嵌入式SQL使用时必须解决的问题

①为区分SQL语句与宿主语言语句,在所有的SQL语句前必须加上 前缀标识“EXEC SQL”,并以“END EXEC”作为语句结束标志。

② 数据库工作单元和主程序工作单元之间的通讯允许嵌入的SQL语句引用宿主语言的程序变量 (称为共享变量)。在引用这些变量时必须在这些变量前加冒号“ :”作为前缀标识,以示与数据库中变量有区别;

③ 引入游标机制: 将集合操作转换为单元组处理。

第四章作业

对于教学数据库的三个基本表。

S( SNO, SNAME, AGE,SEX, SDEPT)

SC(SNO, CNO, GRADE)

C( CNO, CNAME , CDEPT, TNAME )

试用SQL的查询语句表达下列查询。

(1)检索LIU老师所授课程的课程号和课程名

(2)检索年龄大于23岁的男学生的学号和姓名

(3)检索学号为S3的学生所学课程的课程名和任课教师名

(4)检索至少选修LIU老师所授课程中一门课程的女学生姓名

(5)检索WANG同学不学的课程的课程号

看到不字用NOT EXIST或者NOT IN

(6)检索至少选修两门课程的学生学号。

分组统计门数>=2,还有一种方法是自身连接

(7)检索全部学生都选修的课程的课程号与课程名

全部 就是双重否定

(8)检索选修课程包含LIU老师所授课程的学生学号

双重否定

试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询。

(1)统计有学生选修的课程门数。

(2)求选修C4课程的学生的平均年龄。

(3)求LIU老师所授课程的每门课程的学生平均成绩

(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

(5)检索学号比WANG同学大,而年龄比他小的学生姓名

比较运算符两边都要是值,不能是集合

(6)检索姓名以WANG打头的所有学生的姓名和年龄

凡是有通配符前面要用like不能用= 且必须要用单引号

(7)在SC中检索成绩为空值的学生学号和课程号。

条件里出现空 前面一定用is 不能用=

(8)求年龄大于女同学平均年龄的男学生姓名和年龄

(9)求年龄大于所有女同学年龄的男学生姓名和年龄

大于>后面一定要加all,不用all的话把这个年龄求最大值就是值了

试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作

(1)向基本表S中插入一个学生元组('S9','WU',18)。

(2)在基本表S中检索每一门课程成绩都大于或等于80分的学生学号、姓名和性别并将检索结果保存到另一个已存在的基本表STUDENT(SNO,SNAME,SEX)中。

(3)在基本表SC中删除尚无成绩的选课元组。

(4)把WANG同学的学习选课和成绩全部删去

(5)把选修MATHS课不及格的成绩全改为空值。

(6)把低于总平均成绩的女同学成绩提高5%。

(7)在基本表SC中修改C4课程的成绩,若成绩小于或等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。

对于教学数据库中基本表SC,已建立下列视图

CREATE VIEW S_GRADE(SNO,C NUM,AVG GRADE)AS SELECT SNO, COUNT(CNO), AVG(GRADE)FROM SC GROUP BY SNO;

试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作

(1)SELECT * FROM S_GRADE;
(2)SELECT SNO,C_NUM
FROM S_GRADE
WHERE AVG_GRADE>80:
3)SELECT SNO, AVG_GRADE
FROM S_GRADE
WHERE C_NUM>(SELECT C_NUM
FROM S_GRADE
SNO='S4');
(4)UPDATE S_GRADE 
SET C_NUM=C_NUM +1
WHERE SNO ='S4';
(5) DELETE FROM S_GRADE
WHERE C_NUM>4;

第四第五题不允许

第七章 数据库设计

客观题为主

一、本章重要概念

(1)DBS生存期及其7个阶段的任务和工作,DBD过程的输入和输出。

(2)需求分析的步骤、数据流图,数据字典的内容和作用。

(3)概念设计的重要性、主要步骤。逻辑设计阶段的主要步骤。

(4)ER模型的基本元素,属性的分类,联系的元数、连通词、基数。采用ER方法的概念设计步骤。

(5)ER模型到关系模型的转换规则。采用ER方法的逻辑设计步骤。

(6)ER模型的扩充:弱实体,超类和子类。

(7)规范化理论对数据库设计的指导意义。

概念设计——逻辑设计——物理设计

ER图怎么画

一共有四种符号:矩形符号,椭圆框,菱形框,连线

弱实体是什么?邮件里的附件,简历,一个人的家庭住址

超类 子类

学校里有很多超类,人是超类,学生和老师是子类

只要学会画基本er模型就行,弱实体和超类子类只要概念就行,最多客观题

两条规则,实体怎么转换,联系怎么转换

实体:一个实体就是一张表

联系:一对一,一的放到另一个一变成外键

一对多,把一的主键放到多的表变成外键

多对多,新的表,两张表主键组合而成

不单考客观题,还会考综合题

image-20250225183438388

明面上有七步,重点掌握其中的两到三步

建表的语句要掌握

建表语句 CREATE

主键 primary key

外键 foreign key

插一个元组 INSERT

二、本章的重点篇幅

(1)教材中P163-165的转换规则和实例。

(2)教材中P159-160的ER模型实例。

三、要求掌握

(1)基本概念、定义、方法;

(2)根据用户的需求,进行ER模型设计;

(3)根据转换规则,将ER模型转换为关系模型。

这一章没说是重点,但是既有客观题又有主观题

第八章 数据库管理(重点)

这个学期三个重点,第三章第四章第八章

这一章不但有客观题还有主观题

一、本章重要概念

(1)事务的定义,COMMIT和ROLLBACK的语义,事务的ACID性质,事务的状态变迁图。

COMMIT是把内存里的更新提交

ROLLBACK是把内存里的更新作废(注意定义)

事务的四大性质

A:原子性(Atomicity)

——原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

C:一致性(Consistency)

——事务前后数据的完整性必须保持一致。

I:隔离性(Isolation)

——事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

D:持久性(Durability)

——持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

(2)存储器类型,稳定存储器的实现,数据传送过程。
(3)恢复的定义、基本原则和实现方法,故障的类型,检查点机制,REDO和UNDO操作,运行记录优先原则。

什么叫恢复?

备份/转储,日志。

三类故障:

事务故障:程序错了 怎么解决?撤销

系统故障:硬件或者软件坏了 建两个队列 重做队列 正向扫描 撤销队列 反向扫描

上面两个故障系统会帮我们做的

介质故障:放数据的硬盘坏了

怎么恢复?买个新盘吧最新的备份弄进去,完了以后再把日志拿出来从这个时间点去做

检查点机制

p177 图8-1

发生故障后

第一种情况,t1在检查之前已经commit,不用恢复

第二种情况:t2和t4在检查点的时候还没做完,在故障点之前做完,将来要放在重做队列

第三种情况:t3和t5在检查点和故障点都没做完,将来要放在撤销队列

运行记录优先原则

包括两点:

将一个更新结果写到DB中前,必须确保先在日志中成功登记了这个更新。

直至对一事务的日志登记全部完成,方能够允许该事务完成COMMIT处理。

这个原则确保了发生故障后能够根据日志对事务进行REDO或UNDO。

(4)并发操作带来的三个问题,X锁、PX协议、PXC协议,S锁、PS协议、PSC协议,活锁、饿死和死锁,并发调度,串行调度,并发调度的可串行化,两段封锁法,SQL中事务的存取模式和隔离级别。
并发操作的三个问题

丢失更新问题:一事务所作的更新操作因另一事务的操作而丢失。

读“脏数据”问题:又称为未提交依赖,指一事务取用了别的事务未提交随后又被撤消的数据。

不一致分析问题:指事务从数据库中读取了处于不一致状态的数据,并因此进行了不一致的分析。

防止这三个问题产生,方法是封锁机制

基本的封锁有两类:

排它型封锁(写锁,X封锁):一个事务对数据对象加了X锁后,在它释放X锁之前不允许其他事务再对该数据对象加任何锁。

共享型锁(读锁,S封锁) :一个事务对数据对象加了S锁后,允许其他事务再对该数据对象加S锁,但在它释放S锁之前不允许其他事务加X锁。

锁加的不好可能会导致活锁,死锁

活锁:永远处在等待状态,解决活锁的办法就是队列,先来先服务

死锁:循环等待,解决的办法有三:指定一个封锁顺序,一次性全加锁,把代价最小的事务做rollback解开锁

调度问题:

并发调度和串行调度

可串行化概念

如果一个并发调度与某一串行调度具有相同的执行结果,那么称这个并发调度是“可串行化的调度”(即正确的并发调度),否则是不可串行化的调度。

两端封锁法

事务在对数据对象存取之前必须先获得对此数据对象的封锁,事务在解除了一个锁之后不再获得任何锁。

遵守两段封锁协议 所有并发调度都可串行化,反过来不成立

(5)完整性的定义,完整性子系统的功能,完整性规则的组成。SQL中的三大类完整性约束,SQL3中的触发器技术。

完整性是指数据的正确性、有效性和相容性。

完整性约束条件:为保证数据的完整性而规定的条件。

完整性检查:检查DB中数据是否满足完整性约束条件。

完整性子系统:DBMS中执行完整性检查的子系统。其功能:

①监督事务的执行,测试其是否违反完整性约束条件;

②若有违反,则按进行预定的处理。

完整性规则的组成

每个规则包括三部分:

触发条件 规定何时执行本规则进行检查;

约束条件 又称谓词,定义应满足的条件;

否则子句 规定不满足条件时该作的处理。

② 在关系DB中,完整性规则可分为三类:

域完整性规则:定义属性取值范围。

域联系的规则:定义属性间的联系、影响和约束。

关系完整性规则:定义更新操作对值的影响和限制。

③ 完整性规则用DDL描述,由系统执行检查。

完整性约束分为三大类:

域约束

基本表约束:主键外键约束

断言

比断言还厉害的 就要用触发器了

(6)安全性的定义、级别,权限,SQL中的安全性机制(视图、SQL用户权限及操作)

二、本章的重点篇幅

(1)检查点机制的方法和恢复算法。(教材中P.175-176)

(2)并发操作带来的三个问题,封锁带来的三个问题,并发调度的可串行化。 (教材P.177-179)

(3)SQL中完整性约束的实现,断言、触发器(SQL3)。(教材P.185-191)

​ SQL Server 触发器的使用(教材P.298-300)

(4)安全性中的授权语句、回收语句(教材P.193、194)。

三、要求掌握

(1)恢复、并发控制、完整性和安全性的基本概念、定义和方法;

(2)采用检测点技术进行数据恢复的分析方法;

(3)并发调度的可串行化(包括事务的调度、串行调度、并发调度)分析方法;

(4)根据用户的需求,能用多种方法定义完整性约束;

(5)授权和回收语句的使用。

8.19 设教学数据库的关系如下:

 S(SNO,SNAME,AGE,SEX)SC(SNO,CNO,GRADE)C(CNO,CNAME,TEACHER)

试用多种方法定义下列完整性约束:

⑴ 在关系S中插入的学生年龄值应在16~25岁之间。

(1)用检查子句定义:

CHECK(AGE BETWEEN 16 AND 25);

⑵ 在关系SC中插入元组时,其SNO值和CNO值必须分别在S和C中出现。

定义sc表学号课程号的时候定义两个外键,学号必须要参照s表中的学号,课程号必须要参照c表的课程号

在关系SC的定义中,用外键子句定义:

FOREIGN KEY(SNO) REFERENCES S(SNO);

FOREIGN KEY(CNO) REFERENCES C(CNO);

⑶ 在关系C中删除一个元组时,首先要把关系SC中具有同样CNO值的元组全部删去。

在关系SC的定义中,用外键子句定义:

FOREIGN KEY(CNO) REFERENCES C(CNO)

ON DELETE CASCADE;

⑷ 在关系S中把某个SNO值修改为新值时,必须同时把关系SC中那些同样的SNO值也修改为新值。

(4)在关系SC的定义中,用外键子句定义:

FOREIGN KEY(SNO) REFERENCES S(SNO)

ON UPDATE CASCADE;

8.20 在教学数据库中的关系S、SC、C中,试用SQL的断言机制定义下列两个完整性约束:

只要掌握两大类就能解决这里的题目

⑴ 每位教师开设的课程不能超过10门。
CREATE  ASSERTION  ASSE5  CHECK(10>=ALL(SELECT  COUNT(CNO))FROM  CGROUP  BY TNAME))
(2)不允许男同学选修WU老师的课程。
CREATE  ASSERTION  ASSE2  CHECK(NOT  EXISTS ( SELECT  *FROM  SC WHERE  CNO IN (SELECT  CNO FROM  CWHERE TNAME=’WU’)AND  SNO IN (SELECT  SNO FROM  SWHERE SEX=’男’)));
(3)每门课程最多50名男同学选修

两张表做连接查询,然后和第一道差不多

CREATE  ASSERTION  ASSE3  CHECK(50>=ALL(SELECT  COUNT(SC.SNO)FROM  S, SCWHERE  S.SNO=SC.SNO AND  SEX=’ 男’GROUP  BY  CNO));
(4)学生必须在选修Maths课后,才能选修其他课程。

这个约束可用下列形式表达:

“不存在一个学生的选课,这个学生没学过Maths课”。

这样就能很容易地写出断言:

CREATE  ASSERTION  ASSE4  CHECK(NOT  EXISTS( SELECT  SNOFROM  SC  XWHERE  NOT  EXISTS(SELECT  *FROM  SC  Y, CWHERE  Y.CNO=C.CNOAND   Y.SNO=X.SNOAND   CNAME=’ Maths’))); 
(5)每个男学生最多选修20门课程。
CREATE  ASSERTION  ASSE5  CHECK(20>=ALL(SELECT  COUNT(CNO)FROM  S, SCWHERE  S.SNO=SC.SNOAND  SEX=’ 男’GROUP  BY  S.SNO));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900372.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

碰撞检测

碰撞产生的必要条件是两个物体都有碰撞器(Collider),至少一个物体有刚体(rigidbody) 有了刚体才会模拟受到力的作用 Mass - 质量 默认为千克 Drag - 阻力 0表示没有阻力 Angular Drag - 扭矩阻力 阻碍旋转的阻力 0表示没有阻力 Is Kinematic - 如果启动此选项,则对象将不会被…

未通过针对firfox的验证,现已被禁用

相信大家很多都碰到过这种问题,我也是网上找了很多方法,都不是很好用,最后破罐子破摔结果就解决了怎么解决呢,直接更新好吧,直接更新最新版本更新完了之后你就会发现解决了,一切都解决了 当然这里只是给大家提供一种思路,虽然网上很多都是复制粘贴,但是特定情况下肯定也…

PCB不同层级的功能和作用

PCB不同层级的功能和作用 示意图:以AltiumDesign为例,各层用途Gerber文件和Altium Design PCB 层级对应关系嘉立创生成geber文件对应功能 生成后的Gerber文件是一个压缩包,解压后文件如下:文件名 类型 备注/说明Gerber_BoardOutline.GKO 边框文件 PCB板厂根据该文件进行切割…

nginx 简单实践:负载均衡【nginx 实践系列之四】

本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考。〇、前言 本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考。 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章: https://www.cnblogs.com/hnzhengfy/p/Nginx.html …

EFcore 实现带UI的自定义日志记录提供程序

基于 EFcore 实现了一个 .net core 日志记录程序,支持使用 .net 原生的日志框架 Microsoft.Extensions.Logging 将应用程序日志写入关系型数据库,目前支持三种关系型数据库(MS SQL Server、MySQL、PostgreSQL)。日志查看面板 UI 使用 vue3 开发,以嵌入的方式集成到程序集中…

ASE50N30-ASEMI智能家居专用ASE50N30

ASE50N30-ASEMI智能家居专用ASE50N30编辑:ll ASE50N30-ASEMI智能家居专用ASE50N30 型号:ASE50N30 品牌:ASEMI 封装:TO-247 批号:最新 最大漏源电流:50A 漏源击穿电压:300V RDS(ON)Max:68mΩ 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道MO…

wr30u 救砖

变砖了 给 wr30u 刷成了 at3000 的uboot,进而导致我的wr30u路由器成了转,进不去uboot了! 准备硬件 usb转串口设备 购买 usb转串口(ttl)设备,在淘宝随便买就行 没啥差别,几块钱一个:目前流行ch340系列的,推荐 ch340g 即可, 功能更强大也贵杜邦线 一般 你在购买 usb转串口…

滑动窗口-2962.统计最大元素出现至少k次的子数组

设 mx=max(nums)。 右端点 right 从左到右遍历 nums。遍历到元素 x=nums[right] 时,如果 x=mx,就把计数器 cntMx 加一。 如果此时 cntMx=k,则不断右移左指针 left,直到窗口内的 mx 的出现次数小于 k 为止。此时,对于右端点为 right 且左端点小于 left 的子数组,mx 的出现…

The Hackers Labs (防御靶场练习)

我打蓝队时我们队的靶机be like:The Hackers Labs (防御靶场练习) Binary Trail(二进制痕迹) 对公司基础设施至关重要的 Linux 服务器已显示出可疑活动的迹象。在例行审计期间,已发现位于非标准目录中的未知二进制文件的存在。此文件的性质和来源尚不确定,但其行为表明可…

Linux 安装配置Anaconda

下载地址 https://www.anaconda.com/download/success 选择系统版本,复制链接 wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh脚本赋权,再执行安装 chmod +x Anaconda3-2024.10-1-Linux-x86_64.sh./Anaconda3-2024.10-1-Linux-x86_64.sh然后出…

Linux 下载安装CUDA Toolkit 12.8,配置Nvidia Driver

cuda下载地址 https://developer.nvidia.com/cuda-downloadsnvidia-smi Mon Mar 17 02:08:35 2025 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 570.124.06 Driver Version: 570.124.06 CUDA …