导图社区 数据库系统概论
数据库系统概论部分思维导图,有具体概念知识点。
编辑于2020-12-30 19:00:57数据库系统概论
基础篇
绪论
数据库系统概论
数据库的四个基本概念
数据库管理技术的生产和发展
数据库系统的特点
数据模型
两类数据模型
概念模型:也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计
逻辑模型和物理模型
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。按计算机系统的观点对数据建模,用于DBMS实
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。面向计算机系统
概念模型
数据模型的组成要素
常用数据模型
层次模型
网状模型
关系模型
数据库系统的结构
数据库系统模式的概念
数据库系统的三级模式结构
模式
数据库中全体数据的逻辑结构和特征的描述 所有用户的公共数据视图
数据的逻辑结构(数据项的名字、类型、取值范围等) 数据之间的联系 数据有关的安全性、完整性要求
外模式
数据库用户(包括应用程序员和最终用户) 使用的局部数据的逻辑结构和特征的描述 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
模式与外模式的关系:一对多 外模式通常是模式的子集 一个数据库可以有多个外模式。反映了不同的用户的应用需求、 看待数据的方式、对数据保密的要求 对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同
外模式与应用的关系:一对多 同一外模式也可以为某一用户的多个应用系统所使用 但一个应用程序只能使用一个外模式
内模式
是数据物理结构和存储方式的描述 是数据在数据库内部的表示方式 记录的存储方式 索引的组织方式 数据是否压缩存储 数据是否加密 数据存储记录结构的规定
数据库的二级映像功能与数据独立性
数据库系统的组成
关系数据库
关系数据结构及形式化定义
关系
域(Domain
笛卡尔积(Cartesian Product)
给定一组域D1,D2,…,Dn,允许其中某些域是相同的。D1,D2,…,Dn的笛卡尔积为: D1×D2×…×Dn = {(d1,d2,…,dn)|diÎDi,i=1,2,…,n} 其中,每一个元素(d1,d2,…,dn)叫作一个n元组,简称元组;元组的每一个值di 叫做一个分量
v元组(Tuple) n笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple),简称元组 例如,(张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨) 等 都是元组。
v分量(Component) n笛卡尔积元素(d1,d2,…,dn)中的每一个值di 叫作一个分量 例如,张清玫、计算机专业、李勇、刘晨等都是分量。
v基数(Cardinal number) n若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为: n
v笛卡尔积的表示方法 n笛卡尔积可表示为一张二维表 n表中的每行对应一个元组,表中的每列对应一个域
关系(Relation)
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn) nR:关系名 nn:关系的目或度(Degree)
元组 关系中的每个元素是关系中的元组,通常用 t 表示
单元关系与二元关系 当n=1时,称该关系为单元关系(Unary relation) 或 一元关系 当n=2时,称该关系为二元关系(Binary relation)
关系的表示 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
属性 n关系中不同列可以对应相同的域 n为了加以区分,必须对每列起一个名字,称为属性(Attribute) nn目关系必有n个属性
码 n候选码(Candidate key) 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。 简单的情况:候选码只包含一个属性。 n全码(All-key) 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
n主码 若一个关系有多个候选码,则选定其中一个为主码(Primary key) n主属性与非主属性 候选码的诸属性称为主属性(Prime attribute) 不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)
vD1,D2,…,Dn的笛卡尔积的某个子集才有实际含义
三类关系 基本关系(基本表或基表) 实际存在的表,是实际存储数据的逻辑表示。 查询表 查询结果对应的表。 视图表 由基本表或其他视图表导出的表,是虚表,不对 应实际存储的数据。
基本关系的性质 ① 列是同质的(Homogeneous) ② 不同的列可出自同一个域 l其中的每一列称为一个属性 l不同的属性要给予不同的属性名 ③ 列的顺序无所谓,列的次序可以任意交换 ④ 任意两个元组的候选码不能取相同的值 ⑤ 行的顺序无所谓,即行的次序可以任意交换 ⑥ 分量必须取原子值
关系模式
关系数据库
关系模型的存储结构
关系操作
基本的关系操作
选择,投影,并,差,笛卡尔积
关系数据语言的分类
关系的完整性
实体完整性
v规则2.1 实体完整性规则(Entity Integrity) n若属性A是基本关系R的主属性,则属性A不能取空值 n空值就是“不知道”或“不存在”或“无意义”的值
v实体完整性规则的说明 (1)实体完整性规则是针对基本关系而言的。 一个基本表通常对应现实世界的一个实体集。 (2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。 (3)关系模型中以主码作为唯一性标识。 (4)主码中的属性即主属性不能取空值。 主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。
参照完整性
v规则2.2 参照完整性规则 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为: n或者取空值(F的每个属性值均为空值); n或者等于S中某个元组的主码值。
用户定义完整性
关系代数
传统的集合运算
•传统的集合运算是从关系的“水平”方向即行的角度进行
并
vR∪S n仍为n目关系,由属于R 或 属于S的元组组成 R∪S = { t|t Î R∨t ÎS }
差
vR - S n仍为n目关系,由属于R 而不属于S 的所有元组组成 R -S = { t|tÎR∧tÏS }
交
vR∩S n仍为n目关系,由既属于R又属于S的元组组成 R∩S = { t|t Î R∧t ÎS } R∩S = R –(R-S)
笛卡尔积
vR×S n列:(n+m)列元组的集合 l元组的前n列是关系R的一个元组 l后m列是关系S的一个元组 n行:k1×k2个元组 lR×S = {tr ts |tr ÎR ∧ tsÎS }
专门的关系运算
•专门的关系运算不仅涉及行而且涉及列
选择
v选择又称为限制(Restriction) v选择运算符的含义 n在关系R中选择满足给定条件的诸元组 σF(R ) = {t |t ÎR∧F(t )= '真'} nF:选择条件,是一个逻辑表达式,取值为“真”或“假” l基本形式为:X1θY1 lθ表示比较运算符,它可以是>,≥,<,≤,=或<>
v选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
投影
n从R 中选择出若干属性列组成新的关系 πA(R) = { t[A] | t ÎR } A:R中的属性列 n投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行) n投影操作主要是从列的角度进行运算
连接
v连接也称为θ连接 v连接运算的含义 从两个关系的笛卡尔积中选取属性间满足一定条件的元组 R S = { | tr Î R∧ts ÎS∧tr[A]θts[B] } lA和B:分别为R和S上度数相等且可比的属性组 lθ:比较运算符 n连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组
n两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组。
v外连接(Outer Join) n如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接 n左外连接(LEFT OUTER JOIN或LEFT JOIN) l只保留左边关系R中的悬浮元组 n右外连接(RIGHT OUTER JOIN或RIGHT JOIN) l只保留右边关系S中的悬浮元组
除
给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。 R中的Y与S中的Y可以有不同的属性名,但必须出自相同的 域集。 R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影: 元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作: R÷S={tr[X]|trÎR∧πY(S)ÍYx} Yx:x在R中的象集,x = tr[X]
v在关系R中,A可以取四个值{a1,a2,a3,a4} a1的象集为 {(b1,c2),(b2,c3),(b2,c1)} a2的象集为 {(b3,c7),(b2,c3)} a3的象集为 {(b4,c6)} a4的象集为 {(b6,c6)} vS在(B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) } v只有a1的象集包含了S在(B,C)属性组上的投影 所以 R÷S ={a1}
运 算 符 含 义 集合 运算符 ∪ 并 - 差 ∩ 交 × 笛卡尔积 专门的 运算符 关系 σ 选择 π 投影 ÷ 除 连接
关系演算
元组关系演算语言ALPHA
元组关系演算
域关系演算语言QBE
关系数据库标准语言SQL
SQL概述
SQL的生产与发展
SQL的特点
SQL的基本概念
学生课程数据库
数据定义
关系模式的定义与删除
基本表的定义,删除与修改
索引的建立与删除
数据字典
数据查询
单表查询
连接查询
嵌套查询
集合查询
基于派生表查询
SELECT语句的一般格式
数据更新
插入数据
修改数据
删除数据
空值的处理
视图
定义视图
查询视图
更新视图
视图的作用
数据库安全性
数据库安全性概述
数据库不安全因素
安全标准简介
数据库安全性控制
用户身份鉴别
存取控制
v存取控制机制的组成: n定义用户权限,并将用户权限登记到数据字典中 l用户对某一数据对象的操作权力称为权限 lDBMS提供适当的语言来定义用户权限,并存放在数据字典中,称做安全规则或授权规则 n合法权限检查 l用户发出存取数据库操作请求,DBMS查找数据字典,进行合法权限检查 v用户权限定义和合法权检查机制一起组成了数据库管理系统的存取控制子系统
n自主存取控制(Discretionary Access Control ,简称DAC) l C2级的DBMS支持DAC l用户对不同的数据对象有不同的存取权限 l不同的用户对同一对象也有不同的权限 l用户还可将其拥有的存取权限转授给其他用户
n强制存取控制(Mandatory Access Control,简称 MAC) lB1级的DBMS支持MAC l每一个数据对象被标以一定的密级 l每一个用户也被授予某一个级别的许可证 l对于任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制方法
授权:授予与收回
数据库角色
v数据库角色:被命名的一组与数据库操作相关的权限。 n角色是权限的集合 n可以为一组具有相同权限的用户创建一个角色 n简化了授权的过程
1.角色的创建 CREATE ROLE <角色名> 2.给角色授权 GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO <角色>[,<角色>]…
.将一个角色授予其他的角色或用户 GRANT <角色1>[,<角色2>]… TO <角色3>[,<用户1>]… [WITH ADMIN OPTION]
n该语句把角色授予某用户,或授予另一个角色 n授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION n指定了WITH ADMIN OPTION,则获得某种权限的角色或用户还可以把这种权限授予其他角色 一个角色的权限:直接授予这个角色的全部权限加上其他角色 授予这个角色的全部权限
角色权限的收回 REVOKE <权限>[,<权限>]… ON <对象类型> <对象名> FROM <角色>[,<角色>]… nREVOKE执行者是 l角色的创建者 l拥有在这个(些)角色上的ADMIN OPTION
[例4.11] 通过角色来实现将一组权限授予一个用户。 步骤如下: (1)首先创建一个角色 R1 CREATE ROLE R1; (2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限 GRANT SELECT, UPDATE, INSERT ON TABLE Student TO R1; (3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限 GRANT R1 TO 王平,张明,赵玲; (4) 可以一次性通过R1来回收王平的这3个权限 REVOKE R1 FROM 王平;
强制存取控制方法
n用户不能直接感知或进行控制
视图机制
审计
数据加密
其他安全保护
数据库完整性
实体完整性
定义实体完整性
v数据库的完整性 n数据的正确性 n数据的相容性
l防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。 l防范对象:不合语义的、不正确的数据。
实体完整性检查和违约处理
参照完整性
定义参照完整性
参照完整性检查和违约处理
v一个参照完整性将两个表中的相应元组联系起来 v对被参照表和参照表进行增删改操作时,有可能破坏参照完整性,必须进行检查
nSC表中增加一个元组,该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。 修改SC表中的一个元组,修改后该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等
n从Student表中删除一个元组,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。 n修改Student表中一个元组的Sno属性,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等 。
被参照表(例如Student) 参照表(例如SC) 违约处理 可能破坏参照完整性 插入元组 拒绝 可能破坏参照完整性 修改外码值 拒绝 删除元组 可能破坏参照完整性 拒绝/级连删除/设置为空值 修改主码值 可能破坏参照完整性 拒绝/级连修改/设置为空值
v参照完整性违约处理 (1) 拒绝(NO ACTION)执行 l不允许该操作执行。该策略一般设置为默认策略 (2) 级联(CASCADE)操作 l当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组 (3)设置为空值(SET-NULL) l当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
用户定义完整性
属性上的约束条件
用CHECK短语指定列值应该满足的条件 [例5.7] Student表的Ssex只允许取“男”或“女”。 CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (‘男’,’女’)), /*性别属性Ssex只允许取'男'或'女' */ Sage SMALLINT, Sdept CHAR(20) );
元组上的约束条件
完整性约束命名子句
域中的完整性限制
断言
触发器
定义触发器
触发器又叫做事件-条件-动作(event-condition-action)规则。 当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,通常是一段SQL存储过程。
vCREATE TRIGGER语法格式 CREATE TRIGGER <触发器名> {BEFORE | AFTER} <触发事件> ON <表名> REFERENCING NEW|OLD ROW AS<变量> FOR EACH {ROW | STATEMENT} [WHEN <触发条件>]<触发动作体>
v定义触发器的语法说明 (1)表的拥有者才可以在表上创建触发器 (2)触发器名 l触发器名可以包含模式名,也可以不包含模式名 l同一模式下,触发器名必须是唯一的 l触发器名和表名必须在同一模式下 (3)表名 l触发器只能定义在基本表上,不能定义在视图上 l当基本表的数据发生变化时,将激活定义在该表上相应触 发事件的触发器
(4)触发事件 l触发事件可以是INSERT、DELETE或UPDATE 也可以是这几个事件的组合 l还可以UPDATE OF<触发列,...>,即进一步指明修改哪些列时激活触发器 lAFTER/BEFORE是触发的时机 ØAFTER表示在触发事件的操作执行之后激活触发器 ØBEFORE表示在触发事件的操作执行之前激活触发器
(5)触发器类型 Ø行级触发器(FOR EACH ROW) Ø语句级触发器(FOR EACH STATEMENT) 例如,在例5.11的TEACHER表上创建一个AFTER UPDATE触发器,触发事件是UPDATE语句: UPDATE TEACHER SET Deptno=5; 假设表TEACHER有1000行 l 如果是语句级触发器,那么执行完该语句后,触发动作只发生一次 l如果是行级触发器,触发动作将执行1000次
(6)触发条件 l触发器被激活时,只有当触发条件为真时触发动作体才执行;否则触发动作体不执行。 l如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行
(7)触发动作体 l触发动作体可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用 l如果是行级触发器,用户都可以在过程体中使用NEW和OLD,引用事件之后的新值和事件之前的旧值 l如果是语句级触发器,则不能在触发动作体中使用NEW或OLD进行引用 注意:不同的RDBMS产品触发器语法各不相同 匿名块:以DECLARE或BEGIN开始,每次提交都被编译。匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用。 命名块:除匿名块之外的其他块。包括过程、函数、包和触发器。可以在数据库中存储并在适当的使用运行。
激活触发器
删除触发器
设计与应用开发篇
关系数据理论
问题提出
规范化
函数依赖
函数依赖
v函数依赖是语义范畴的概念,只能根据数据的语义来确定一个函数依赖。 n例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立
v定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
平凡函数依赖与非平凡函数依赖
vX→Y,但Y⊈X则称X→Y是非平凡的函数依赖。 vX→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。 若不特别声明, 我们总是讨论非平凡函数依赖。
完全函数依赖与部分函数依赖
v定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → Y。 v若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → Y
传递函数依赖
v定义6.3 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:X → Z。 n注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
码
v定义6.4 设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。 n如果U部分函数依赖于K,即K → U,则K称为超码。候选码是最小的超码,即它的任意一个真子集都不是候选码。 v若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
v主属性与非主属性 n包含在任何一个候选码中的属性 ,称为主属性 (Prime attribute) n不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute) v全码:整个属性组是码,称为全码(All-key)
定义6.5 关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码
范式
规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插入、修改、删除时发生的异常现象。这就要求关系数据库设计出来的关系模式要满足一定的条件。 把规范化过程中,为不同程度的规范化要求而设立的不同标准,称为范式。
满足最基本规范化要求的关系模式叫第一范式,在第一范式中进一步满足一些要求为第二范式,以此类推就产生了第三范式等概念。每种范式都规定了一些限制约束条件。
v范式是符合某一种级别的关系模式的集合。 v关系数据库中的关系必须满足一定的要求。满足 不同程度要求的为不同范式。
范式的种类:
第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF)
v各种范式之间存在联系: n某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)
1NF
定义如果关系模式R,其所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式(First Normal Form),简称1NF,记作R∈1NF。 说明:不满足1NF的关系称为非规范化的关系,满足1NF的关系称为规范化的关系。 在关系数据库系统中只讨论规范化的关系。不满足第一范式的数据库模式不能称为关系数据库。
2NF
v定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
v一个关系模式不属于2NF,会产生以下问题: n插入异常 l如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。 n删除异常 l如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。 n修改复杂 l如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
v出现这种问题的原因 n例子中有两类非主属性: l一类如Grade,它对码完全函数依赖 l另一类如Sdept、Sloc,它们对码不是完全函数依赖 v解决方法: n用投影分解把关系模式S-L-C分解成两个关系模式 lSC(Sno,Cno,Grade) lS-L(Sno,Sdept,Sloc)
两个结论: (1)从1NF关系中消除非主属性对码的部分函数依赖,则可得到2NF关系。 (2)如果R的码为单属性,或R的全体属性均为主属性,则R∈2NF。
2NF规范化是指把1NF关系模式通过投影分解转换成2NF关系模式的集合。 分解时遵循的基本原则就是“一事一地”,即让一个关系只描述一个实体或者实体间的联系,如果一个关系描述的内容多于一个实体或联系,就要进行投影分解,使一个关系只说明一个问题。
第二范式的缺点 2NF的关系模式解决了1NF中存在的一些问题,2NF规范化的程度比1NF前进了一步,但2NF的关系模式在进行数据操作时,仍然存在着一些问题: (1)数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数。 (2)插入异常。当一个新系没有招生时,有关该系的信息无法插入。 (3)删除异常。某系学生全部毕业而没有招生时,删除全部学生的记录也随之删除了该系的有关信息。 (4)更新异常。更换系主任时,仍需改动较多的学生记录。
3NF
v定义6.7 设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。
例如,前面由关系模式SDC分解而得到的SD(SNO, SNAME, SAGE, DEPT, MN)和SC(SNO, CNO, GRADE)都为2NF。 其中,SC∈3NF,但在SD中存在着非主属性MN对码SNO的传递依赖,SD∉3NF。对于SD,应该进一步进行分解,使其转换成3NF。 3NF规范化是指把2NF关系模式通过投影分解转换成3NF关系模式的集合。 和2NF的规范化时遵循的原则相同,即“一事一地”,让一个关系只描述一个实体或者实体间的联系。
关系模式SD由2NF分解为3NF后,函数依赖关系变得更加简单,既没有非主属性对码的部分依赖,也没有非主属性对码的传递依赖,解决了2NF中存在的四个问题: (1)数据冗余降低。 (2)不存在插入异常。 (3)不存在删除异常。 (4)不存在更新异常。
BCNF
vBCNF(Boyce Codd Normal Form)由Boyce和Codd提出,比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。 v定义6.8 设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。 v换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
vBCNF的关系模式所具有的性质 n所有非主属性都完全函数依赖于每个候选码 n所有主属性都完全函数依赖于每个不包含它的候选码 n没有任何属性完全函数依赖于非码的任何一组属性 v如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
v对于不是BCNF的关系模式,仍然存在不合适的地方。 v非BCNF的关系模式也可以通过分解成为BCNF。例如,STJ可分解为ST(S,T)与TJ(T,J),它们都是BCNF。
v3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。 n一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。 n而3NF的“不彻底”性,源于可能存在主属性对码的部分依赖和传递依赖。
多值依赖
v定义6.9 设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
v多值依赖的另一个等价的定义 在R(U)的任一关系r中,如果存在元组t,s使得t[X]=s[X] ,那么就必然存在元组w,v∈r,(w,v可以与s,t相 同), 使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z], v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两 个新元组必在r中)则Y多值依赖于X,记为X→→Y。这里X,Y是U的子集,Z=U-X-Y。
v平凡多值依赖和非平凡的多值依赖 n 若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。 n 否则称X→→Y为非平凡的多值依赖。
4NF
v定义6.10 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。 v4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。 v4NF所允许的非平凡多值依赖实际上是函数依赖。
v如果一个关系模式是4NF, 则必为BCNF。
v在[例6.10]的WSC中,W →→S, W→→C,他们都是非平凡多值依赖。而W不是码,关系模式WSC的码是(W,S,C),即All-key,因此WSC ∈ 4NF。 v可以把WSC分解成WS(W,S),WC(W,C), WS∈4NF,WC∈4NF。
关系模式规范化的基本步骤 1NF ↓ 消除非主属性对码的部分函数依赖 消除决定因素 2NF 非码的非平凡 ↓ 消除非主属性对码的传递函数依赖 函数依赖 3NF ↓ 消除主属性对码的部分和传递函数依赖 BCNF ↓ 消除非平凡且非函数依赖的多值依赖 4NF
数据依赖的公理系统
模式的分解
模式分解的三个定义
分解的无损连接性保持函数依赖性
模式分解的算法
数据库设计
数据库设计概述
数据库设计特点
数据库设计方法
数据库设计的基本步骤
数据库设计过程中的各级模式
需求分析
需求分析的任务
需求分析的方法
数据字典
概念结构设计
概念模型
E-R模型
扩展E-R模型
UML
概念结构设计
逻辑结构设计
E-R图向关系模型转换
数据模型的优化
设计用户子模式
物理结构设计
数据库物理设计内容和方法
关系模式存取方法的选择
确定数据库的存储结构
评价物理结构
数据库编程
嵌入式SQL
嵌入式SQL的处理过程
嵌入式SQL语句与主语言之间的通信
不用游标的SQL语句
使用游标的SQL语句
过程化SQL
过程化SQL的块结构
变量和常量的定义
流程控制
存储过程和函数
存储过程
函数
过程化SQL中的游标
ODBC编程
ODBC概念
ODBC API基础
ODBC工作原理
OLE DB
JDBC编程
系统篇
关系查询处理和查询优化
关系数据库系统的查询处理
查询处理步骤
实现查询操作的算法实例
关系数据库系统的查询优化
查询优化概述
一个实例
代数优化
关系代数表达式的等价变换规则
查询树的启发式优化
物理优化
基于启发式规则的存取路径选择优化
基于代价估算的优化
查询计划的执行
数据库恢复技术
事务的基本概念
数据库恢复概述
新技术篇