数据库原理
非常好考试题
不过这里的题偏简单,但是用来看概念很好,要注意MOOC作业题!
数据库系统概论SQL编程题合集(包含期末题、考研初试题以及复试题)_数据库编程题-CSDN博客
数据库原理及应用期末复习汇总(附某高校期末真题试卷)_数据库原理期末考试题-CSDN博客
【数据库原理及应用】期末复习汇总&高校期末真题试卷11_数据库原理及应用教程期末考试-CSDN博客
概念辨析(1~3章)
几个缩写
- DBMS:数据库管理系统
- DBS:数据库系统:包括DB、DBMS、应用系统、数据库管理员(DBA)
- DDL:数据定义语言,定义数据库中各个对象的组成和结构。常见语句:
CREATE
、ALTER
、DROP
、TRUNCATE
等。 - DML:数据操纵语言,增删查改。常见语句:
SELECT
、INSERT
、UPDATE
、DELETE
等。 - DCL:数据控制语言,用于控制对数据库的访问权限和安全性。常见语句:
GRANT
(授予权限)、REVOKE
(撤销权限)等。 - 数据模型的组成要素:数据结构、数据操作、数据完整性约束
三级模式
模式:对数据库中全体数据的逻辑结构和特征的描述,一个数据库只有一个模式
- 外模式(子模式、用户模式):是模式的子集,指用户使用的局部数据的逻辑结构和特征的描述,同一外模式可以被某一个用户的多个应用程序使用。用户只能访问自己的外模式中的数据。
- 内模式(存储模式):数据物理结构和存储方式的描述,内涵记录如何存储?用B+tree存储?这种信息,一个数据库只有一个内模式。
二级映像
- 外模式/模式映像:定义外模式和模式间的对应关系。每个外模式都对应一个外模式/模式映像,其定义在外模式的描述中。当模式改变时,只需要修改外模式/模式映像,而不需要修改外模式本身(应用是依据外模式的),应用程序就不用修改了,保证数据的逻辑独立性 。
- 模式/内模式映像:定义了数据全局逻辑结构与存储结构之间的对应关系。数据库中模式/内模式映象是唯一的;该映象定义通常包含在模式描述中。当数据库的存储结构改变了( 例如选用了另一种存储结构) ,数据库管理员修改模式/内模式映象, 使模式保持不变;保证了数据与程序的物理独立性 。
笛卡尔积和基数
基数:笛卡尔积后集合元素个数
码
n目关系对应n个属性
- 候选码:关系中某一属性组(说明可以不止一个属性)能唯一标识该元组,而其子集不能。
- 全码:该关系的所有属性组构成该关系的候选码
- 主码:若该关系有多个候选码(不是说候选码由多属性组成!),那这多个候选码中的随便一个即主码。
- 外码:属性F是R的一个属性,但不是R的主码,同时F又是关系K的主码。称F是R的外码。R叫参照关系、K叫被参照关系
- 候选码的诸属性叫主属性,其他属性叫非主属性。
这里的外码中,关系R和K不一定是不同的关系;F在R和K中的名字也可能不一样,可见下面的例子
利用传递函数可以给出更好的定义:U为关系R的全部属性
- 候选码K:属性K满足,K称为R的一个候选码
- 超码:属性K满足,K称为R的一个超码。我们往候选码上随便加点其他属性上去就能构成超码,即候选码是最小的超码
关系模型中三类完整性约束
- 实体完整性:主属性不能取空值
- 参照完整性:若属性F是R的外码,那F的取值必须在K中出现过(或者直接取空值)
- 用户定义的完整性:用户自己定义,比如检查“成绩”项的值小于100
关系代数
基本的关系代数:并、差、笛卡尔积、选择、投影。
这部分建议做题。
连接运算有三种
- 等值连接:记得要写条件A=B
- 自然连接:等值连接后去掉重复的属性列,不用写连接条件
- 外连接:把舍弃掉的元组也保存,其余属性上填NULL
通常先选择,再投影,最后连接
除法的计算:

函数依赖
已知X能确定唯一的Y,即X函数确定Y、Y函数依赖与X,记为
- 平凡函数依赖:,Y是X的子集(平凡函数依赖是必然成立的)
- 非平凡函数依赖:,Y不是X的子集
- 完全函数依赖:,而X的任意真子集X’,都没法实现X’函数确定Y,则称Y完全函数依赖于X(即就是X中的所有元素缺一不可)记做
- 部分函数依赖:X中的真子集就能函数确定Y,记作
-
传递函数依赖:这个注很重要
范式
-
1NF:R中所有属性都不可再分(表里不能再有表),不满足1NF就不能被称为关系数据库。
-
2NF:消除非主属性对码的部分函数依赖
-
3NF:消除非主属性对码的传递函数依赖
-
BC范式:消除主属性对码的部分函数和传递函数依赖
还有满足3NF为什么满足2NF,满足BCNF为什么满足3NF:好大学在线CNMOOC_中国顶尖的慕课平台
3个实体型间的关系讨论:好大学在线CNMOOC_中国顶尖的慕课平台
还有一些最小依赖集、极小化的内容直接做题
关系模式的分解要遵循的原则:
- 无损连接:关系分解后得到的关系按外码自然连接能得到原先的关系。
- 保持原先的函数依赖:分解后的每个关系的最小函数依赖集是原关系最小函数依赖集的子集,并且小的并一下就变成原关系的。
SQL语言(第4章)
数据定义
模式
创建:CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
删除:DROP SCHEMA <模式名><CASCADE|RESTRICT>
- CASCADE:级联删除,删除模式的时候把里面所有数据库对象都删除
- RESTRICT:限制删除,如果该模式中定义了下属的数据库对象( 如表、 视图等),则拒绝该删除语句的执行, 没有任何下属的对象时才能执行。
表
创建

要注意:
- 主码:PRIMARY KEY ,要注意当主码由两个属性构成时,要进行单独定义
- 唯一性(不能重名):UNIQUE
- 非空/空:NULL/NOT NULL
- 外码:FOREIGN KEY REFERENCES
- 约束加条件:CHECK
修改

删除
DROP TABLE <表名> [RESTRICT | CASCADE];
索引
创建
-
聚簇索引
-
唯一值索引
修改
ALTER INDEX <旧索引名> RENAME TO <新索引名> ;
删除
DROP INDEX <索引名>;
视图
- 虚表, 是从一个或几个基本表( 或视图) 导出的表;
- 只存放视图的定义, 不会出现数据冗余;
- 基表中的数据发生变化, 从视图中查询出的数据也随之改变;
创建视图

-
注意这里的AS关键字
-
这里的“列名”要么全部省略,要么全部指定。
-
子查询可以是任意的SELECT语句, 是否含有ORDER BY子句和DISTINCT短语, 取决于具体系统的实现;
-
WITH CHECK OPTION表示对视图进行更新、 插入或删除操作时, 要保证满足视图定义中的谓词条件( 子查询条件表达式) 。
-
DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典, 并不执行其中的SELECT语句。
-
当视图中某属性是带表达式时,必须明确定义视图各属性列名
-
当不指定属性列时,可以将所有记录定义为一个视图。但这样会存在缺陷。
行列子集视图:若一个视图由单个基本表导出, 只是去掉某些行列, 但保留主码

删除视图
CASCADE表示级联删除
视图查询
DBMS进行视图查询有两种方法
- 实体化视图:为视图新建一个临时表
- 有效性检查: 检查所查询的视图是否存在
- 执行视图定义, 将视图临时实体化, 生成临时表
- 查询视图转换为查询临时表
- 查询完毕删除被实体化的视图(临时表)
- 视图消解法:对查询语句进行拼接,然后在原表上弄
- 进行有效性检查, 检查查询的表、 视图等是否存在。 如果存在, 则从数据字典中取出视图的定义
- 把视图定义中的子查询与用户的查询结合起来, 转换成等价的对基本表的查询
- 执行修正后的查询
用视图消解法进行视图查询的示例:

但是视图消解法存在局限性:

在这里AVG是聚集函数,聚集函数只能在SELECT和HAVING中使用,故出现语法错误。在这种情况下, 视图消解法不能生成正确查询, DBMS会限制这类查询
视图更新
也是有视图实体化和视图消解法两种方法。在定义视图时使用了WITH CHECK OPTION子句后,DBMS在更新视图时会进行检查, 防止用户通过视图对不属于视图范围内的基本表数据进行更新。
视图的作用
- 视图能够简化用户的操作
- 视图机制能使不同用户以不同方式看待同一数据, 适应不同种类的用户数据库共享的需要
- 视图对重构数据库提供了一定程度的逻辑独立性
- 视图能够对机密数据提供安全保护
- 对不同用户定义不同视图, 使每个用户只能看到他有权看到的数据;
- 通过WITH CHECK OPTION对关键数据定义操作时间限制;
- 适当的视图能够更清晰表达查询
数据查询
单表查询
SELECT操作
消除取值重复的行的关键字
- DISTINCT:消除重复取值后输出
- ALL:默认选项,输出全部

WHERE操作
确定范围关键字:注意这个区间是双闭区间
- BETWEEN AND
- NOT BETWEEN AND

在集合中选值关键字:
- IN <一组值>
- NOT IN <一组值>

字符串匹配关键词:[NOT] LIKE ‘ <匹配串>’ [ESCAPE ‘ <换码字符>’ ]
这里的匹配串可以是:
-
固定字符串,此时可以用 = 运算符取代 LIKE 谓词,用 != 或 < >运算符取代 NOT LIKE 谓词
-
含有通配符的字符串,要老老实实用LIKE关键词
-
% (百分号): 代表任意长度( 长度可以为0) 的字符串
-
_ (下横线): 代表任意单个字符
-
-
当固定字符串中含有%、_符号时,要用\符号来转义
-
涉及空值查询时
对查询结果排序
使用ORDER BY子句
- 可以按一个或多个属性列排序
- 升序: ASC; 降序: DESC; 缺省值为升序
- 当排序列含空值时 ,ASC: 排序列为空值的元组最后显示 ;DESC: 排序列为空值的元组最先显示 。类似于把空值当成无穷大。

对查询结果分组
聚集函数

使用GROUP BY子句分组, 按某一列或多列的值分组, 值相等的为一组。 对查询结果分组后, 聚集函数将分别作用于每个组 。最后使用HAVING短语筛选最终输出结果 。

限制查询结果的数量LIMIT
LIMIT <行数1>[ OFFSET <行数2>];
语义是忽略前<行数2>行, 然后取<行数1>作为查询结果数据。LIMIT子句经常和ORDER BY子句一起使用 。

连接查询
同时涉及多个表的查询。
等值连接

自然连接

通过SELECT值的不同来实现自然连接
自身连接
- 一个表与其自己进行连接, 称为表的自身连接;
- 需要给表起别名以示区别;
- 由于所有属性名都是同名属性, 因此必须使用别名前缀;即FIRET.Cno这种

外连接
- 普通连接操作只输出满足连接条件的元组;
- 外连接操作以指定表为连接主体, 将主体表中不满足连接条件的悬浮元组一并输出;

嵌套查询
把一次查询的结果作为下一次查询的输入源。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询;

子查询的SELECT语句中不能使用ORDER BY子句,因为ORDER BY子句只能对最终查询结果排序
IN谓词查询
比较运算符查询
当子查询返回一个值时,就可以用比较运算符( >, <, =,>=, <=, !=或< >)。
即当我们确定子查询只返回单值时,可以用=来代替IN关键字。

同时可以使用ANY或者ALL关键词

EXISTS谓词子查询
- 带有EXISTS谓词的子查询不返回任何数据, 只产生逻辑真值“ true” 或逻辑假值“ false” 。
- 由EXISTS引出的子查询, 其目标列表达式通常都用* , 因为带EXISTS的子查询只返回真值或假值, 给出列名无实际意义

这种要往子查询里传入Student这个参数的,就叫做相关查询,子查询的结果依赖于父查询。
用EXISTS和NOT EXISTS来实现全称量词

用EXISTS和NOT EXISTS来实现逻辑蕴含
集合查询
用于把两个(或者多个)查询结果组合。这就要求各查询结果的列数必须相同; 对应项的数据类型也必须相同
并操作
- UNION: 将多个查询结果合并起来时, 系统自动去掉重复元组
- UNION ALL: 将多个查询结果合并起来时, 保留重复元组。

交操作
INTERSECT

差操作
EXCEPT

派生查询
子查询不仅可以用在WHERE中,也可以用在FROM中,此时要用AS关键词为该表起个新名字,便于WHERE中写条件用。

数据更新
插入数据

修改数据

- SET字句:指定修改方式 、要修改的列 、修改后的取值。
- WHERE子句:指定修改哪个元组,缺省表示修改全部元组
插入数据

空值NULL相关
空值就是“ 不知道” 或“ 不存在” 或“ 无意义” 的值 。空值可能来自:
- 赋值时赋的值就是NULL,或者没有进行赋值
- 外连接时,没有定义的数值会被定义成空值
- 空值的关系运算
在WHERE关键词中涉及到NULL时,采用IS NULL 或 IS NOT NULL 判断一个属性的值是否为空值 。
不能取空值的情况:
- 属性定义( 或域定义) 中有NOT NULL约束条件的不能取空值;
- 加了UNIQUE限制的属性不能取空值;
- 码属性不能取空值;
空值运算:
-
空值与另一个值( 包括另一个空值) 的算术运算结果为空值;
-
空值与另一个值( 包括另一个空值) 的比较运算结果为UNKNOWN;
-
逻辑运算真值表:
数据库设计与安全(5~6章)
数据库设计流程
- 需求分析:需求分析的重点是“数据” 和“处理” ,调查、收集与分析用户在数据管理中 信息要求(查询内容与性质)、处理要求(功能、响应时间、方式)、安全性与完整性要求 。需求分析阶段描述的用户应用需求是现实世界的具体需求;
- 概念结构设计:嗯画ER图,将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计;其常用策略是自顶向下地进行需求分析 、自底向上地设计概念结构 。
- 逻辑结构设计:ER图向关系模型的转换,这个直接做题去
- 数据库物理设计:数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程,就是数据库的物理设计。
- 数据库实施与维护
数据字典
数据字典是各类数据描述的集合;数据字典是进行详细的数据收集和数据分析所获得的主要结果。数据字典是关于数据库中数据的描述,是元数据,而不是数据本身。数据字典在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善。数据字典包括:
-
数据项:数据的最小组成单位
-
数据结构:反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
-
数据流:数据结构在系统内传输的路径。
-
数据存储:数据结构停留或保存的地方,也是数据流的来源和去向之一。
-
处理过程
概念结构设计
三类常用数据抽象
-
分类:对应一个实体的具体取值
-
聚集:对应一个实体的属性
-
概括:定义类型间的子集联系
合并分ER图时存在的冲突
-
属性冲突:属性值的类型、 取值范围或取值集合不同 ;属性取值单位冲突。
-
命名冲突:不同的东西在两个应用中名字一样;同一东西在两个应用中名字不同
-
结构冲突
- 同一对象在不同应用中具有不同的抽象;
- 同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同;
- 实体之间的联系在不同局部视图中呈现不同的类型;
冗余消除
- 冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。
- 冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难
- 并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高某些应用的效率, 不得不以冗余信息作为代价
数据库物理设计
下次一定
😭再也不下次一定了还真考了这个
数据库安全
概述
TCSEC/TDI安全级别划分
C2是安全产品的最低档,B1有强制存取控制MAC
数据库安全性控制的常用方法 :
- 用户标识和鉴定:最外层安保,拿静态口令、动态口令来辨别用户
- 存取控制:用户权限定义和合法权检查机制一起组成了DBMS的存取控制子系统。
- 视图
- 审计
- 密码存储
存取控制
- 自主存取控制DAC:C2级别就有了,用户对不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,用户还可将其拥有的存取权限转授给其他用户。
- 强制存取控制MAC:B1级别才有,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对任意一个对象,只有具有合法许可证的用户才可以存取。
自主存取控制DAC
赋予权限

注意ON后面是什么表和什么对象,TO后面是具体的用户
-
权限中要赋予全部操作权限用ALL PRIVILIGES
-
授予全部用户用PUBLIC
-
如果授予的权限仅针对一个属性值
-
WITH GRANT OPTION子句加上后表明可以再授予,注意不能进行循环授权
收回权限

数据库角色
相当于一个函数,给ROLE赋予权限后,相当于一个模板,可以直接把ROLE所有的权限赋给真实的用户。
强制存取控制MAC
- 强制存取控制(MAC)是指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求,所采取的强制存取检查手段。
- MAC不是用户能直接感知或进行控制的。
- 在MAC中, DBMS所管理的全部实体被分为主体和客体两大类 。主体是系统中的活动实体,即各个用户(或进程);客体是系统中的被动实体,即表、视图这种。
- 对于主体和客体, DBMS为它们每个实例(值)指派一个敏感度标记( Label),分别为绝密、机密、可信、公开。
- 主体的敏感度标记称为许可证级别;客体的敏感度标记称为密级
- 主体的敏感度级别>=客体,主体可读该客体
- 主体的敏感度级别<=客体,主体可写该客体
视图
审计
- 启用一个专用的审计日志(Audit Log)将用户对数据库的所有操作记录在上面;
- DBA可以利用审计日志中的追踪信息找出非法存取数据的人;
- C2以上安全级别的DBMS必须具有审计功能;
- 审计很费时间和空间 ,DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能
审计的分类
- 用户级审计
- 针对自己创建的数据库表或视图进行审计。
- 记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求,以及各种类型的SQL操作。
- 系统级审计
- DBA设置。
- 监测成功或失败的登录要求。
- 监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
审计语句
AUDIT和NOAUDIT

统计数据库安全性
-
规则1:任何查询至少要涉及N(N足够大)个以上的记录
-
规则2:任意两个查询的相交数据项不能超过M个
-
规则3:任一用户的查询次数不能超过1+(N-2)/M