定义:描述事物的符号记录
地位:数据库中存储的基本对象
数据的语义:数据的含义,数据与其语义是不可分的
定义:长期储存在计算机内、有组织的、可共享的大量数据的集合
特点:①数据按一定的数据模型组织、描述和存储
②具有较小的冗余度
③较高的数据独立性
④易扩展性
⑤可为各种用户共享
基本特点:永久存储、有组织、可共享
位于用户与操作系统之间的一层数据管理软件
数据库管理系统和操作系统是计算机的基础软件
功能:
定义:数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统
数据管理:对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题
发展动力:① 应用需求的推动 ② 计算机硬件、软件的发展
特点:
特点:
缺点:
从文件系统到数据库系统标志着数据管理技术的飞跃
特点:
数据库管理系统提供的数据控制功能:
数据库是长期存储在计算机内有组织、大量、共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。
数据库管理系统在数据库建立、运用和维护时对数据库进行统一控制,以保证数据库的完整性和安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对数据库进行恢复
定义:对现实世界数据特征的抽象
地位:数据模型是数据库系统的核心和基础
组成要素:数据结构、数据操作、数据的完整性约束条件
要求:
分类:根据应用的不同目的,可分为概念模型、逻辑模型和物理模型
首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界
概念模型属于信息世界
现实世界 —> 概念模型 数据库设计人员完成
概念模型 —> 逻辑模型 可以是数据库设计人员完成,也可以用数据库设计工具协助设计人员完成
逻辑模型 —> 物理模型 数据库管理系统完成
数据结构:描述数据库的组成对象以及对象之间的联系
数据操作:对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则
数据的完整性约束条件:一组完整性规则
层次模型和网状模型统称为格式化模型
概念模型是现实世界到机器世界的一个中间层次
作用:
实体:客观存在并可相互区别的事务
属性:实体所具有的某一特性,一个实体可以由若干个属性刻画
码:唯一标识实体的属性集
实体型:用实体名及其属性名集合抽象和刻画同类实体
实体集:同一类型实体的集合
联系:实体内部的联系通常指组成实体的各属性之间的联系,实体之间的联系通常指不同实体集之间的联系;实体之间的联系有一对一、一对多和多对多等多种类型
实体—联系方法 / E-R 方法 / E-R 模型
地位:数据库系统中最早出现的数据模型
层次数据库系统只能处理一对多的实体联系
层次模型像一棵倒立的树,结点的双亲是唯一的
查询、插入、删除、更新
典型代表:DBTG 系统(CODASYL 系统)
层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一
地位:关系模型是最重要的一种数据模型
关系模型要求关系必须是规范化的,关系的每一个分量必须是一个不可分的数据项
关系:一个关系对应通常说的一张表
元组:表中的一行即为一个元组
属性:表中的一列即为一个属性,给每一个属性起一个名称即属性名
码:也称为码键,表中的某个属性组,可以唯一确定一个元组
域:一组具有相同数据类型的值的集合,属性的取值范围来自某个域
分量:元组中的一个属性值
关系模式:对关系的描述,表示 关系名(属性1,属性2,...,属性n)
操作对象和操作结果都是关系
关系模型把存取路径向用户隐蔽起来,用户只要指明“干什么”或“找什么”,不必详细说明“怎么干”或“怎么找”
关系的完整性约束条件包括实体完整性、参照完整性和用户定义的完整性
数据库开发人员——三级模式结构——数据库系统内部的系统结构
数据库最终用户——单用户结构、主从式结构、分布式结构、客户-服务器、浏览器-应用服务器/数据库服务器——数据库系统外部的体系结构
型:对某一类数据的结构和属性的说明
值:型的一个具体赋值
模式:数据库中全体数据的逻辑结构和特征的描述,仅涉及型的描述,不涉及具体的值
模式是相对稳定的,实例时相对变动的
别称:全局模式、逻辑模式
介绍:是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,又与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关
数量:一个数据库只有一个模式
别称:子模式、用户模式、局部模式
介绍:是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
数量:一个数据库可以有多个外模式
别称:物理模式、存储模式
介绍:是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式
数量:一个数据库只有一个内模式
当模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
当数据库的存储结构改变时,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性
数据库系统一般由数据库、数据库管理系统、应用程序和数据库管理员组成
具体职责:
具体指责:
具体职责:
具体职责:负责设计和编写应用系统的程序模块,并进行调试和安装
最终用户:通过应用系统的用户接口使用数据库
最终用户分类:
关系模型的数据结构非常简单,只包含单一的数据结构——关系
关系模型中数据的逻辑结构是一张扁平的二维表
定义:一组具有相同数据类型的值的集合
定义:
定义:
类型:基本关系(基本表或基表)、查询表和视图表
当关系作为关系数据模型的数据结构时,需要给予如下的限定和扩充:
基本关系的性质:
关系模式是型,关系是值
关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据
定义:关系的描述
形式化地表示:R(U,D,DOM,F)
简记:R(U)
或 R(A1,A2,...,An)
定义:在一个给定地应用领域中,所有关系的集合构成一个关系数据库
关系数据库的型称为关系数据库模式,是对关系数据库的描述
关系数据库的值是关系模式在某一时刻对应的关系的集合,称为关系数据库
关系模型中常用的关系操作包括查询操作和插入、删除、修改操作两大部分
5 种基本操作:选择、投影、并、差、笛卡儿积
关系操作的特点:集合操作方式,操作的对象和结果都是集合
结构化查询语言 SQL
SQL 的功能:
SQL 是集查询、数据定义语言、数据操纵语言和数据控制语言于一体的关系数据语言
SQL 语言是一种高度非过程化的语言
关系模型中有三类完整性约束:
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,故称为关系的两个不变性
保证关系数据库中每个元组是可区分的,是唯一的
实体完整性规则:若属性 A 是基本关系 R 的主属性,则 A 不能取空值
说明:
参照完整性规则:若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码 KS 相对应,则对于 R 中的每个元组在 F 上的值必须:
定义:一种抽象的查询语言,用对关系的运算表达查询
运算的三大要素:运算对象、运算符、运算结果
运算对象:关系
运算结果:关系
运算符:
传统的集合运算是二目运算,包括交、并、差、笛卡儿积
运算前提:关系 R 和关系 S 具有相同的目 n(即两个关系都有 n 个属性),且相应的属性取自同一个域
记作:R∪S={t|t∈R∨t∈S}
结果:n 目关系,由属于 R 或属于 S 的元组组成
记作:R∩S={t|t∈R∧t∈S}
结果:n 目关系,由既属于 R 又属于 S 的元组组成
用差表示:R ∩ S = R-(R-S)
记作:R-S={t|t∈R∧t∉S}
结果:n 目关系,由属于 R 且不属于 S 的元组组成
两个分别为 n 目和 m 目的关系 R 和 S 的笛卡儿积是一个(n+m)列的元组的集合
若 R 有 k1 个元组,S 有 k2 个元组,则关系 R 和关系 S 的笛卡儿积有 k1*k2 个元组
记作:
专门的关系运算包括选择、投影、连接和除运算等
别称:限制
记作:
F 表示选择条件,是一个逻辑表达式,去逻辑值“真”或“假”
逻辑表达式 F 的基本形式:X1θX2
关系 R 上的投影是从 R 中选择出若干属性列组成新的关系
记作:
A 为 R 中的属性列
投影操作是从列的角度进行的运算
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消某些属性列后,可能出现重复行,应取消这些完全相同的行
别称:θ 连接
作用:从两个关系的笛卡儿积中选取属性间满足一定条件的元组
记作:
等值连接:θ 为“=”的连接运算
自然连接:一种特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中去掉重复的属性列
悬浮元组:被舍弃的元组
外连接:把悬浮元组保存在结果关系中,在其他属性上填空值
左外连接:只保留左边关系 R 中的悬浮元组
右外连接:只保留右边关系 S 中的悬浮元组
设关系 R 除以关系 S 的结果为关系 T,则 T 包含所有在 R 但不在 S 中的属性及其值,且 T 的元组与 S 的元组的所有组合都在 R 中
用象集定义除法:
结构化查询语言 SQL 是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言
SQL 集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括:
非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录
SQL 既是独立的语言,又是嵌入式语言
外模式包括若干视图和部分基本表,模式包括若干基本表,内模式包括若干存储文件
基本表是本身独立存在的表,在数据库管理系统中一个关系就对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中
存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构对最终用户是隐蔽的
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象
create schema <模式名> authorization <用户名>
若未指定模式名,则模式名隐含为用户名
创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的 create schema
的权限
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象
用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权
drop schema <模式名> cascade|restrict
create table <表名>(
<列明> <数据类型> [完整性约束条件]
......
)
主码:primary key
唯一:unique
非空:not null
候选码:foreign key (列名) references 表名(列名)
alter table <表名>
添加新的一列:add [column] <新列名> <数据类型> [完整性约束]
添加完整性约束:add <表级完整性约束>
删除列:drop [column] <列名> [cascade|restrict]
,新增加的列一律为空值
删除完整性约束:drop constraint <完整性约束名> [cascade|restrict]
修改数据类型:alter column <列名> <数据类型>
修改列名:增加新列,删除原来的一列
drop table <表名> cascade|restrict
默认 restrict
建立索引是加快查询速度的有效手段
建立和删除索引由数据库管理员或表的属主,即建立表的人,负责完成
关系数据库管理系统在执行查询时会自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引
create [unique] [cluster] index 索引名
on <表名> (<列名> [<次序>],...)
升序 asc,降序 desc,默认 asc
unique 表明此索引的每一个索引值只对应唯一的数据记录
cluster 建立的是聚簇索引,聚簇索引一个表只建立一个
重新命名:alter index <旧索引名> rename to <新索引名>
drop index <索引名>
数据查询是数据库的核心操作
group by 出现时,having 可能不出现;但 having 出现时,group by 一定出现
统计元组个数:count(*)
统计一列中值的个数:count([distinct|all] <列名>)
计算一列值的总和(此列必须是数值型):sum([distinct|all] <列名>)
计算一列值的平均值(此列必须是数值型):avg([distinct|all] <列名>)
求一列值中的最大值:max([distinct|all] <列名>)
求一列值中的最小值:min([distinct|all] <列名>)
数据更新操作有三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据
插入语句 insert 通常有两种形式,一种是插入元组,另一种是插入子查询结果
insert
into <表名> (属性列1,属性列2,...)
values (常量1,常量2,...);
into 子句中没有出现的属性列,新元组在这些列上将取空值,在表定义时说明 not null 的属性列不能取空值
若 into 子句中没有指明任何属性列,则新插入的元组必须在每个属性列上均有值
insert
into <表名> (属性列1,属性列2,...)
子查询;
update <表名>
set <列名>=<表达式>,...
where;
delete
from <表名>
where;
插入、外连接
is null , is not null
定义:从一个或几个基本表或视图导出的表
与基本表不同,是一个虚表
数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中,一旦基本表中的数据发生变化,从视图中查询出的数据就随之改变
create view <视图名> (列名1,列名2,...)
as <子查询>
with check option;
表示对视图进行 update、insert、delete 操作时要保证更新、插入或删除行满足视图定义中的谓词条件
组成视图的属性列或者全部省略或者全部指定
若省略了视图的各个属性列名,则隐含该视图由子查询中 select 子句目标列中的诸字段组成
以下情况必须明确指定组成视图的所有列名:
关系数据库管理系统执行 create view 语句的结果只是把视图的定义存入数据字典,并不执行其中的 select 语句,在对视图查询时,才按视图的定义从基本表中将数据查出
行列子集视图:从单个基本表导出的视图,并且只是去掉了基本表的某些行和某些列,但保留了主码
视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个已定义好的视图上,或定义在基本表与视图上
分组视图:带有聚集函数和 group by 子句的查询定义的视图
drop view <视图名> [cascade];
视图删除后视图的定义将从数据字典中删除
基本表删除后,由该基本表导出的所有视图均无法使用了,但是视图的定义没有从字典中清除。删除这些视图定义需要显式地使用 drop view 语句
关系数据库管理系统执行对视图地查询时,首先进行有效性检查。检查查询中涉及的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后在执行修正了的查询,这一转换过程称为视图消解
where 子句中不能用聚集函数作为条件表达式
定义视图并查询视图与基于派生表的查询是有区别的,视图一旦定义,其定义将永久保存在数据字典中,之后的所有查询都可以直接引用该视图。而派生表只是在语句执行时的临时定义,语句执行后该定义即被删除
由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新
一般地,行列子集视图是可更新的
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
从 4 个方面描述安全性级别划分的标准,即安全策略、责任、保证和文档
4 组 7 个等级
最低级别
保留 D 级的目的是为了将一切不符合更高标准的系统统统归于 D 组
只提供了非常初级的自主安全保护,能够实现对用户和数据的分离,进行自主存取控制,保护或限制用户权限的传播
实际上是安全产品的最低档,提供受控的存取保护,将 C1 级的自主存取控制进一步细化,以个人身份注册负责,并实施审计和资源隔离
产品名称往往不突出“安全”这一特色
标记安全保护
对统计的数据加以标记,并对标记的主体和客体实施强制存取控制以及审计等安全机制
B1 级别的产品才被认为是真正意义上的安全产品
产品冠以“安全”或“可信的”字样
结构化保护
建立形式化的安全策略模型,并对系统内的所有主体和客体实施自主存取控制和强制存取控制
安全域
TCB 满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程
验证设计,即提供 B3 级保护的同时给出系统的形式化设计说明和验证,以确信各安全保护真正实现
用户身份鉴别是数据库管理系统提供的最外层安全保护措施
当前最常用的鉴别方法
静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统
口令是静态不变的
数据库管理系统从口令的复杂度,口令的管理、存储及传输等方面保障口令的安全可靠
目前较为安全的鉴别方式
口令是动态变化的
每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法
是一种通过生物特征进行认证的技术,生物特征是指生物体唯一具有的,可测量、识别和验证的稳定生物特性
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
存取控制机制主要包括定义用户权限和合法权限检查两部分
用户对某一数据对象的操作权力称为权限
数据库管理系统必须提供适当的语言来定义用户权限,这些定义经过编译后存储在数据字典中,被称做安全规则或授权规则
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统
C2 级的数据库管理系统支持自主存取控制,B1 级的数据库管理系统支持强制存取控制
自主存取控制:用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户
强制存取控制:每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证,对于任意一个对象,只有具有合法许可证的用户才可以存取
主要通过 SQL 的 grant 语句和 revoke 语句实现
用户权限的组成要素:数据库对象和操作类型
授权:定义存取权限
一般格式:
grant <权限>,...
on 对象类型 对象名,...
to 用户,...
with grant option;
获得某种权限的用户还可以把这种权限再授予其他的用户
不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先
一般格式:
revoke <权限>,...
on 对象类型 对象名,...
from 用户,...
只能收回自己给出的权限,对于别人给出的权限,无法收回
数据库管理员拥有对数据库中所有对象的所有权限,并可以根据实际情况将不同的权限授予不同的用户
用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用 grant 语句把其中某些权限授予其他用户。被授权的用户如果有“继续授权”的许可,还可以把获得的权限再授予其他用户
用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人,故这样的存取控制是自主存取控制
创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现
create user
说明:
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合
可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程
create role <角色名>
刚创建的角色是空的,没有任何内容
grant 权限,...
on <对象类型> 对象名,...
to 角色1,...
数据库管理j员和用户可以利用 grant 语句将权限授予某一个或某几个角色
grant 角色1,...
to 角色2,...
with admin option;
获得某种权限的角色或用户可以把这种权限再授予其他的角色
一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限
revoke 权限
on 对象类型 对象名
from 角色1,...
用户可以收回角色的权限,从而修改角色拥有的权限
revoke 动作的执行者或者是角色的创建者,或者拥有在这些角色上的 admin option
强制存取控制不是用户能直接感知或进行控制的,适用于对数据有严格而固定密级分类的部门
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各进程
客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等
对于主体和客体,数据库管理系统为它们每个实例指派一个敏感度标记
敏感度标记被分成若干级别,例如绝密 TS、机密 S、可信 C、公开 P 等
密级的次序:TS>=S>=C>=P
主体的敏感度标记称为许可证级别
客体的敏感度标记称为密级
强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体
规则:
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了跟高级别的安全性
为不同的用户定义不同的视图,把数据对象限制在一定的范围内,即通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护
审计功能是数据库管理系统达到 C2 以上安全级别不可少的一项指标
审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事情,找出非法存取数据的人、时间和内容等
审计功能很费时间和空间,数据库管理系统往往将审计设置为可选特征,运行数据库管理员根据具体应用对安全性的要求灵活地打开或关闭审计功能
审计功能主要用于安全性要求较高的部门
审计事件的类别:
audit 语句用来设置审计功能
audit 操作1,...
on 表名;
noaudit 语句取消审计功能
noaudit 操作1,...
on 表名;
审计一般分为用户级审计和系统级审计
数据库安全审计系统提供了一种事后检查的安全机制
数据加密是防止数据库数据在存储和传输中失密的有效手段
加密的基本思想:根据一定的算法将原始数据——明文变换为不可直接识别的格式——密文,从而使得不知道解密算法的人无法获知数据的内容
数据加密主要包括存储加密和传输加密
对于存储加密,一般提供透明和非透明两种存储加密方式
常用的传输加密方式如链路加密和端到端加密
处理对象:强制存取控制未解决的问题
目的:避免用户利用其能够访问的数据推知更高密级的数据
处理对象:强制存取控制未解决的问题
目的:控制不愿被他人知道或他人不便知道的个人数据的能力
数据库的完整性是指数据的正确性和相容性
数据的正确性:指数据是符合现实世界语义、反映当前实际状况的
数据的相容性:指数据库同一对象在不同关系表中的数据是符合逻辑的
数据的完整性和安全性是两个既有联系又不尽相同的概念
数据的完整性是为了防止数据库中存在不符合语义的数据,也是防止数据库中存在不正确的数据
数据的安全性是保护数据库防止恶意破坏和非法存取
完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库
安全性控制的防范对象是非法用户和非法操作,防止他们对数据库数据的非法存取
为维护数据库的完整性,数据库管理系统必须实现的功能:
完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件
一般在 insert 、update 、delete 语句执行后开始检查,也可以在事务提交时检查
自动检查:
检查记录中主码值是否唯一的一种方法是进行全表扫描,依次判断表中的每一条记录的主码值与将插入记录的主码值是否相同
为了避免对基本表进行全表扫描,关系数据库管理系统一般都在主码上自动建立一个索引
foreign key 属性名 references 表名(属性名)
对被参照表和参照表进行增、删、改操作时有可能破坏参照完整性
处理方法:
不允许该操作执行,默认策略
当删除或修改被参照表的一个元组导致参照表的不一致时,删除或修改参照表中的所有导致不一致的元组
当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值
插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足,不满足则拒绝执行
元组级的限制可以设置不同属性之间的取值的相互约束条件
插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足,不满足则操作被拒绝执行
constraint 完整性约束条件名 完整性约束条件
断言创建以后,任何对断言中所涉及关系的操作的都会触发关系数据库管理系统对断言的检查,任何使断言不为真的操作都会被拒绝执行
create assertion 断言名 check子句
drop assertion 断言名
定义:触发器是用户定义在关系表上的一类由事件驱动的特殊过程
保存:触发器一旦定义,将被保存在数据库服务器中
激活:任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制
触发器又叫做事件-条件-动作规则,当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作
建立触发器:
create trigger 触发器名
{before|after} 触发事件 on 表名
referencing new|old row as 变量
for each{row|statement}
[when 触发条件] 触发动作体
详细说明:
insert
、delete
、update
,也可以是这几个事件的组合,还可以是 update of 触发列
进一步指明修改哪些列时激活触发器;after/before
是触发的时机,after
表示在触发事件的操作执行之后激活触发器,before
表示在触发事件的操作执行之前激活触发触发器for each row
和语句级触发器for each statement
when
触发条件,则触发动作体在触发器激活后立即执行new
和old
引用update/insert
事件之后的新值和update/delete
事件之前的旧值;如果是语句级触发器,则不能在触发动作体中使用new
或old
进行引用。如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对象不发生任何变化触发器的执行是由触发事件激活,并由数据库服务器自动执行的。一个数据表上可能定义了多个触发器,同一个表上的多个触发器激活时遵循如下的执行顺序:
drop trigger 触发器名 on 表名
触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除
规范化:一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,此过程叫做模式分解
定义:每一个分量必须是不可分的数据项
定义:若 R ∈ 1NF,且每一个非主属性完全函数依赖于任何一个候选码,则 R ∈ 2NF
不满足第二范式,会产生的问题:
定义:设关系模式 R ∈ 1NF,若 R 中不存在这样的码 X,属性组 Y 及非主属性 Z(Z 不包含于 Y)使得 X—>Y,Y—>Z 成立,Y—/—>X,则称 R ∈ 3NF
若 R ∈ 3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码
定义1:关系模式 R ∈ 1NF,若 X—>Y 且 Y 不包含于 X 时 X 必含有码,则 R ∈ BCNF
定义2:关系模式 R 中,若每一个决定因素都包含码,则 R ∈ BCNF
定义3: