




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fezz整理 21数据库三级模式两级映像三级模式:内模式(存储模式/物理模式),模式(逻辑模式),外模式(子模式)内模式:又称存储模式,是数据的物理结构及存储方式模式:所有用户的公共数据视图,是数据库中全体数据的全局逻辑结构和特性的描述外模式:用户的数据视图是数据的局部逻辑结构,模式的子集两级映像:外模式/模式映象:定义某一个外模式和模式之间的对应关系,映象定义通常包含在各外模式中模式/内模式映象:定义数据逻辑结构与存储结构之间的对应关系数据的逻辑独立性与物理独立性的含义当模式改变时,修改外模式/模式映象,使外模式保持不变,从而应用程序可以保持不变,称为数据的逻辑独立性存储结构改变时,修改模式/内模式映象,使模式保持不变,从而应用程序可以保持不变,称为数据的物理独立性数据库系统的组成l 数据库、硬件、软件、人员数据定义、数据操纵、数据控制的含义数据定义:定义数据库的结构,般数据定义语言DDL (create,alter,drop,declare) 数据操纵:检索和修改数据,般数据操纵语言DML(select/insert/delete/update)数据控制:数据控制语言DCL数据空值:值未知或值不存在数据定义语言(DDL):用于定义数据模式(结构)、访问方式、一致性约束等。例如,某个表里有多少个字段,它们的 昆山空调维修 宫颈糜烂的治疗方法 字段名、类型、长度、是否为空等。数据操纵语言(DML):用于访问和操纵具体的数据内容。例如对某个表的记录进行插入、删除、更新,以及查询。关系的定义及性质定义:一系列域上的笛卡尔积中有意义的子集1关系的一列是属性,属性必定有名字(属性名)2关系的一行是元组3分量是行和列的交叉。或者说,分量是某个元组的某个属性(值)性质:1列是同质的,即每一列中的分量来自同一域,是同一类型的数据。如TEACH(T, S, C)=(t1 , s1 , c1), (t1 , t2 , c1)是错误的。2不同的列可来自同一域,每列必须有不同的属性名。如P=t1,t2 , s1,s2 ,s3,C= c1,c2,则TEACH不能写成TEACH (P, P, C),还应写成TEACH(T, S, C)。3行列的顺序无关紧要。4任意两个元组不能完全相同(集合内不能有相同的两个元素)。5每一分量必须是不可再分的玻璃清洗机 昆山搬家公司 数据。满足这一条件的关系称作满足第一范式(1NF)的。关系语言的特点、过程化语言比非过程化语言的差别用户只需提出“做什么”,无须说明“怎么做”为非过程语言关系演算和SQL是非过程化的,关系代数是过程化的。关系模式和关系实例的关系模式是数据库的结构。实例是数据库在特定时刻的内容(数据集合)。模式与实例是两个对立的概念。a) 模式强调结构,例如表有哪些字段。b) 实例强调内容,例如表有哪些记录。c) 动态 vs 静态:对于一个数据库,它的结构(模式)相对稳定,而内容(实例)则会随时间而变化。 关系模式:关系的结构,如student (student-no, name, sex)关系实例:在某一特定时刻上关系的内容,如student-nonamesex1JonesMale2SmithMale比较:关系模式比较稳定,很少变化;关系实例随时间而变化,原因是实例中的元组不断插入/删除/更新。关系代数中选择、投影、连接的含义选择:在关系R中减肥产品排行榜 迷宗蟹 选择满足给定条件的元组(从行的角度)sF(R)=t | t R F(t)F是选择的条件,t R, F(t)要么为真,要么为假F的形式:由逻辑运算符连接算术表达式而成逻辑表达式:,算术表达式:X q YX,Y是属性名、常量、或简单函数q是比较算符,q , , , , = , 举例:sAGE20 SEX=男(S)投影:从关系R中取若干列组成新的关系(从列的角度)PA(R) = tA | tR ,AR投影的结果中要去掉相同的行举例:PSN, AGE(S)q连接:从两个关系的广义笛卡儿积中选取给定属性间满足一定条件的元组A,B为R和S上度数相等且可比的属性列,q为算术比较符,为等号时称为等值连接自然连接:从两个关系的广义银杏树 防锈油 笛卡儿积中选取在相同属性列B上取值相等的元组,并去掉重复的行关系代数(选择、投影、连接、更名、差集)表达查询(选择条件左边的数字)并运算:蹭网卡 热血江湖外挂 所有至少出现在两个关系中之一的元组集合RS = r | rR rS (R和S必须是相容的)举例:S#(sC#=01(SC)S#(sC# =02(SC)差运算:所有出现在一个关系而不在另一关系中的元组集合R-S = r | rR rS (R和S必须是相容的)S#(sC#=01(SC)-S#(sC# = 02(SC)笛卡尔积:两个关系R/S,其度分别为n/m,则它们的笛卡尔积是所有这样的元组集合:元组的前n个分量是R中的一个元组,后m个分量是S中的一个元组RS的度为R与S的度之和, RS的元组个数为R和S的元组个数的乘积更名运算:给一个关系表达式赋予名字rx(E)返回表达式E的结果,并把名字x赋给Erx(A1, A2 , , An )(E)返回表达式E的结果,并把名字x赋给E,同时将各属性更名为A1,A2, ,An S.姓名(sR.成绩S.成将军牌钻孔机 绩R.课程=数学S.课程=数学R.姓名=王红(RrS(R)交运算:所有同时出现在两个关系中的元组集合RS = r | rR rS S#(sC# =01(SC)S#(sC# =02(SC)除运算:包含短语“对所有的”的查询rs的含义:设r(R)和s(S)为两个关系,且RS。则rs为R-S上的关系,假如对于s上所有的元组ts存在一个tR-S,使得该tR-S,ts为r上的元组,则该tR-S为rs上的元组。rs= R-S(r)- R-S(R-S(r)s)-R-S,S(r)赋值运算:temp1 PX(R) temp2 PX(temp1 PY(S) - R)result temp1 - temp2广义投影: PF1 , F2 , , Fn (E)(F1 , F2 , , Fn 是算术表达式)PP# , SAL*5/100 (PROF)聚集函数:一般形式:G1 , G2 , . , Gn GF1A1 , F2A2 , , FmAm(E) Gi是用于分组的属性, Fi是聚集函数, Ai是属性名。举例: S#GsumSCORE,avgSCORE(SC)种类:sum(求和)/avg(求平均)/count(计数)/max(求最大值)/min(求最小值)去除重复:如果想去除重复值,可以用连接符-将distinct附加在聚集函数名后,如count-distinctP#(PC)自然连接运算在两边关系没有同名属性情况下相当于笛卡儿积关系的外连接方法左外连接 = 自然连接 + 左侧表中失配的元组右外连接 = 自然连接 + 右侧表中失配的元组全外连接 = 自然连接 + 两侧表中失配的元组其中失配的元组用NULL来匹配,符号见课本P38*插入、删除、更新:用赋值操作SQL语言的特点a) 1. 一体化i. 功能一体化: 提供数据定义、操纵和控制功能,集DDL、DML和DCL等语言于一体ii. 操作对象单一化:都是对关系进行操作b) 2. 高度非过程化i. 用户只需提出“做什么”,而无须说明“怎么做”,不必介入具体的操作实现过程c) 3. 面向集合的操作方式i. 一次一集合:每次操作的对象和结果都是关系 (记录集合)ii. 与之相反的是“一次一记录”: 每次操作只能处理一条记录,要通过循环等手段才能处理一个记录集合d) 4. 两种使用方式,统一的语法结构i. 自含式SQL:数据库管理系统自带,供用户与数据库联机交互使用。ii. 嵌入式SQL:嵌入到高级语言里面,供程序员开发程序时使用。e) 5. 语言简洁,易学易用交互式与嵌入式SQL的差别在终端交互方式下独立使用的SQL称为交互式SQL嵌入到程序设计语言中(即宿主语言)使用的SQL称为嵌入式SQLSQL的主要功能,这些功能由哪些语句实现SQL功能操作语句备注数据定义CREATE,ALTER,DROP数据查询SELECT数据查询与数据修改又合并称为数据操纵数据修改INSERT,UPDATE,DELETE数据控制GRANT,REVOKE, 空值及含空值表达式的处理方法(语句)空值测试is not null除is not null之外,空值不满足任何查找条件如果null参与算术运算,则该算术表达式的值为null如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknown如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null聚集函数对空值和重复值的处理除了count(*)之外,其他的聚合函数都是忽略空值的可以使用all关键字指明对所选列中的所有数据进行处理,使用distinct关键字指明对所选列中的非重值数据进行处理SQL查询(Like实现模糊查询|选择、投影、连接|不在 NOT IN|更名运算、前缀|子查询|事务的定义|带子查询的插入删除操作)Like实现模糊查询: 列名 not like “字符串” 找出满足给定匹配条件的字符串其中:%匹配零个或多个字符;匹配任意单个字符;escape定义转义字符,如如escape “”则可用%去匹配%.举例: 列产品编号中含有4个字符以上,且倒数第3个字符是d,倒数第2个字符是_的产品的所有信息 select * from PRODUCT where P# like %d ESCAPE 选择、投影、连接Where(相当于选择运算):where SAL between 2500 and 2800Select(相当于投影):缺省为保留重复元组,也可用关键字all显式指明。若要去掉重复元组,可用关键字distinct或unique指明From(相当于笛卡尔积): 当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系,否则必须加上关系名作为前缀 not in(不在):判断表达式的值是否在子查询的结果中,格式为表达式 not in (子查询)更名运算、前缀: old_name as new_name举例:1 select PNAME,SAL*0.05 as taxi,SAL*0.95 as incoming 2 select P1.PNAME,P1.SALFrom PROF as P1,PROF as P2,DEPT子查询in子查询(集合成员资格)some/all子查询: 表达式 比较运算符q some (子查询) 表达式的值至少与子查询结果中的一个值相比满足比较运算符q 表达式 比较运算符q all (子查询) 表达式的值与子查询结果中的所有的值相比都满足比较运算符qnot exists (子查询)判断子查询的结果集合中是否有任何元组存在not unique (子查询)如果子查询结果中没有重复元组,则返回true事务的定义:事务有查询个更新语句序列组成事务的开始: Begin transaction事务的提交:commit work,将该事务所做的更新在数据库中持久保存事务的回滚:rollback work,撤销该事务中所有SQl语句对数据库的更新带子查询的插入删除操作1 insert into account select loan_num,branch_name,200 from loan where branch_name=Perryridge2 delete from account where branch_name in (select branch_name from branch where branch_city=New York)关系的外部码约束的三种形式:CASCADE、RESTRICT、 SET NULL CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行SETNULL:从父表删除或更新行,并设置子表中的外键列为NULLRESTRICT:拒绝对父表的删除或更新操作视图的定义:视图是命名的、从基本表中导出的虚表,它在物理上并不存在,存在的只是它的定义,视图中的数据是从基本表中导出的,每次对视图查询都要重新计算,视图之上可以再定义视图.创建视图create view v as ,删除视图drop view v物化视图(实化视图):视图的计算结果被实际存储起来物化视图可以看成是数据库的cache查询物化视图比重新计算视图要快许多,需要进行物化物化视图是将视图在某个时刻的内容保存起来,有真正的存储数据。视图的本质是:有名字的查询视图的优点:简化用户的操作对于同一数据,不同用户可以从不同角度观察增强安全性提供模式(逻辑模式)/外模式(子模式)映射和逻辑独立性三类完整性的含义及要求(哪些插入删除是不允许的)实体完整性 a) 规则:元组在主码的每个属性上取唯一值,且不能为空b) 意义:在实体映射为元组后,靠主码区分不同的元组/实体。保证每一元组/实体,可与其它元组/实体是可区分的。参照完整性 c) 规则:如果关系R的外部码对应关系S的主码,则R每个元组在外部码上的取值必须满足:i. 要么等于空值ii. 要么等于某个对应的主码值(S某个元组的主码值)d) 意义:元组/实体的外部码,说明跟另外哪一个元组/实体(的主码)相联系的。保证这一联系有意义,不会联系不存在的元组/实体。 用户定义完整性 e) 规则:用户根据具体的应用环境定义i. 例如1. 年龄的取值范围为0到200,性别只能是“男”或“女” 2. 职工编号是4位整数f) 意义:i. 保证元组/实体的属性取值是合理的,反映现实世界的真实情况反映了程序编制的要求SQl定义约束(见下面)数据库安全性和完整性措施含义,及包含的内容实体完整性:关系对应到现实世界中的实体集,元组对应到实体,实体是相互可区分的,通过主码来唯一标识,若主码为空,则出现不可标识的实体,这是不容许的。参照完整性:如果关系R2的外部码Fk与关系R1的主码Pk相对应,则R2中的每一个元组的Fk值或者等于R1 中某个元组的Pk 值,或者为空值。意义:如果关系R2的某个元组t2参照了关系R1的某个元组t1,则t1必须存在。用户定义的完整性:用户针对具体的应用环境定义的完整性约束条件。安全性控制保护数据库以防止不合法的使用所造成的数据泄露和破坏。其基本措施是存取控制l 物理级l 人际级l 操作系统级l 网络级l 数据库系统级l 授权命令:grant 表级权限 on 表名 | 视图名 to 用户 ,用户 | public with grant optionl 回收权限:revoke 表级权限 on 表名 | 视图名 from 用户 ,用户 | public完整性(数据的正确性和相容性)措施包括:l 完整性检查: DBMS必须提供一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据是正确的,避免非法的不合语义的错误数据的输入和输出所造成的无效操作和错误结果l 完整性子系统功能: 监督事务执行,检查是否违反完整性规则,如有违反现象,采取相应措施(拒绝、报告、改正)。l 完整性规则:完整性规则集、规则的构成、规则的分类l 四种约束:主码约束、外码约束、属性值上的约束、全局约束l 主码约束:S# CHAR(4) PRIMARY KEYl 外码约束:FOREIGN KEY (S#) REFERENCES S(S#) ON UPDATE CASCADE|SET NULLl 非空约束:SNAME CHAR(8) NOT NULLl 基于属性的检查子句:CHECK(AGE15)l 域约束子句l 全局约束:全局约束涉及多个属性间的或多个关系间的联系数据库设计的阶段以及每个阶段的工作第一阶段:用户需求分析 l 与应用领域专家,数据库用户广泛地交流,获得用户预期的数据和功能需求l 结果:得到用户需求说明第二阶段:概念设计 l 将用户需求转化为选定的某种概念模型(常见是E-R模型)l 结果:得到数据库的概念模式第三阶段:逻辑设计 l 将概念模式转化为选定的某种数据模型(常见是关系模型)l 结果:得到数据库的逻辑模式第四阶段:物理设计 l 在上阶段得到逻辑模式的基础上,补充定义数据库的物理特征。比如内部存储结构,文件组织方式等l 结果:得到数据库的物理模式第五阶段:数据库实施第六阶段:数据库运行和维护实体、联系、域的概念实体:现实世界中可区别于其他对象的”事务”或”对象”.*实体集:相同类型的实体集合*属性:实体集中每个成员所拥有的描述性性质.联系:是指多个实体间的互相关联.*联系集:同类联系的集合.域:属性的取值范围能绘制E-R实体集:矩形属性:椭圆联系集:菱形实体集连接联系集或属性连接实体集:线段多值属性:双椭圆派生属性:虚椭圆表示一个实体集全部参与到一个联系集:双线*弱实体集(没有足够的属性形成主码):双矩形什么时候需要标注实体集的角色?a) 如果实体集仅参与联系集一次,那么它只有一个角色且隐含在名字中,不用特别说明b) 如果实体集参与联系集两次或以上,那么相应地,它有两个或以上的角色。这时单靠实体的名字无法区分这些角色,需要单独说明每次以什么角色参与*映射基数一对一映射: 一对多映射: 多对多映射:E-R模型转化成关系模式的方法,能分析出主码、外码强实体集:loan=(loan_number,amount) 加下划线的为主码。联系集:l 对于多对多的二元联系,主码是参与实体集的主码属性的并集。l 对于一对一的二元联系集,任何一个参与实体集的主码都可以作为联系的主码。l 对于一对多的二元联系集,主码应该是联系集中”多”那一边的实体集的主码。l 对于n元联系集,如果连接到它的边中没有箭头,则主码是所有参与实体集的主码属性的并集。l 对于n元联系集,如果连接到它的边中有一个箭头,则除去”箭头”那一边的实体集的主码属性,其他参与实体集的主码属性的并集为联系的主码。对于每个与联系集R相关的实体集Ei,建立一个关系R上的外码约束,该约束表明R中来自Ei主码属性的那些属性参照关系Ei的主码。现有实体集A、B以及从A到B的多对一的联系集AB,若A在该联系里是完全参与的,则可以将A和AB的模式合并为一个包含了两个模式所有属性的并集的模式。其主码是A的主码。在一对一联系的情况下,联系集的关系模式可以跟参与联系的任何一个实体集的模式进行合并。复合属性、派生属性、多值属性及处理转换方法复合属性:可以划分为更小的属性,将每个组合属性作为复合属性所在实体的属性.如:实体集有属性学号/生日/姓名,其中生日为复合属性,生日由年/月/日组成,则转换为:学生(学号,姓名,年,月,日)。多值属性:某个特定的实体在该属性上的有多于一个的取值.多值属性的转换:新的关系+所在实体的码. 实体集有属性学号/选课/姓名,其中选课为多值属性,则转换时建立新的联系集”选课(学号,所选课程号)”来表示多值属性。派生:可以从其他相关的属性或实体派生出来的属性值。一对多联系:将单方参与一方实体的码作为多方参与实体的属性。多对多联系:将联系定义为新的关系,属性为参与双方的码。一对一联系:若联系双方均部分参与,则将联系定义为一个新的关系,属性为参与双方的码。若联系一方全部参与,则将联系另一方的码作为全部参与一方的属性。平凡的函数依赖、部分函数依赖、传递函数依赖函数依赖:设R(U)是属性集U上的关系模式,X , Y U, r是R(U) 上的任意一个关系,如果成立对t , s r,若tX = sX,则tY = sY那么称“X函数决定Y”,或“Y函数依赖于X”,记作XY称X为决定因素如学号 姓名,(学号,课程号) 成绩两个概念:满足依赖的关系:依赖在模式的某个关系实例上成立模式上成立的依赖:依赖在模式的所有关系实例上都成立平凡函数依赖(在所有的关系上都是满足的):如果X Y,但Y X,则称其为非平凡的函数依赖,否则称为平凡的函数依赖如(学号,姓名) 姓名 是平凡的函数依赖完全函数依赖:其中S#为学号,C#为课程号,G为成绩,SN为姓名传递函数依赖:不良依赖可能产生的问题-信息的不可表示问题:插入异常:如果没有职工具有8级工资,则8级工资的工资数额就难以插入。删除异常:如果仅有职工赵明具有4级工资,如果将赵明删除,则有关4级工资的工资数额信息也随之删除了。-信息的冗余问题:数据冗余:职工很多,工资级别有限,每一级别的工资数额反复存储多次。更新异常:如果将5级工资的工资数额调为2620,则需要找到每个具有5级工资的职工,逐一修改。超码、候选码、主码的概念超码:能唯一标识一个元组的一组属性候选码:关系中的一个属性组,其值能唯一标识一个元组。若从中去掉任何一个属性,就不具有这一性质了,该属性组称候选码(任何一个候选码中的属性称作主属性)主码:进行数据库设计时,从一个关系的多个候选码中选定一个作为主码*外码:关系R中的一个属性组,它不是R的码,但它与另一个关系S的码相对应,则称这个属性组为R的外部码会根据函数依赖集求候选码属性集的闭包如果包含本关系的所有属性,则是超码。在符合是超码的情况下,如果该属性集的任意一个真子集的闭包都没有包含所有属性,则是候选码。超码():设K为R的属性或属性组,若K U,则称K为R的超码候选码:设K为R的超码,若K U,则称K为R的候选码主码:若R(U,F)有多个候选码,则可以从中选定一个作为R的主码主属性:包含在每一个候选码中的属性,称作主属性全码:关系模式的码由整个属性组构成,如SPJ外码产生及出现的几种情况联系集弱实体集多值属性*求F+算法:F+=F repeat for each F+中函数依赖f 在f上应用自反律和增补律 将结果加入到F+中 for each F+中一对函数依赖f1和f2 if f1和f2可以使用传递律结合起来 将结果加入到F+中 until F+不再发生变化*属性闭包的求法:在函数依赖集F下有a函数确定的所有属性的集合为F下a的闭包,记为a+,其求法为:result:=a; while(result发生变化)do for each 函数依赖 bc in F do begin if b子集于result then result:=resultc; end*函数依赖的推理规则:a、b、c、d为属性集,A、B、C为单个属性,用ab表示aUb自反律:若b属于a,则ab增补律:若ab,则cacb传递律:若ab以及bc,则ac合并律:若ab且ac,则abc分解律:若abc,则ab且ac伪传递律:若ab以及cbd,则acd掌握属性集闭包的计算。并能够以此判定一个函数依赖是否成立。开始: a+ := a; while (a+ is changed ) do for F中每个函数依赖 b g begin if b a+ then a+ := a+ g end举例说明:R (A, B, C, G, H, I)F = CG H, CG I, A B, A C, B H (AG)+ 开始. (AG)+ = AG 1. (AG)+ = ABCG (A B, A C) 2. (AG)+ = ABCGHI (CG H, CG I) 3. (AG)+ = ABCGHI (无变化) l 思考:能推导出AG BCI么? 能,因为(BCI) (AG) +第一范式定义:如果某个域的元素被认为是不可再分的单元,那么这个域就是原子的。如果一个关系模式R的所有属性域都是原子的,我们称关系模式R属于第一范式(1NF)。第二范式若R1NF,且每个非主属性完全依赖于码,则称R2NF。化为2NF即消除非主属性对码的部分依赖。第三范式具有函数依赖集F的关系模式R属于3NF的条件是,对于所有F+中形如ab的函数依赖(a属于R且b属于R),下面至少一个成立:l ab是平凡的函数依赖(即,b属于a)l a是模式R的一个超码l b-a中的每个属性A都包含在R的一个候选码中3NF :关系模式R中,若不存在这样的码X,属性组Y及非主属性Z(ZY),使得下式成立,XY , YZ , YX,则称R3NF,即不存在函数依赖。化为3NF即消除非主属性对码的传递依赖。BCNF范式(Boyce-Codd) F+表示F集合的闭包,也就是从给定F集合能够推导出的所有函数依赖的集合。具有函数依赖集F的关系模式R属于BCNF的条件是,对于所有F+(如果没有分解过则用F即可)中形如ab的函数依赖(a属于R且b属于R),下面至少一个成立:l ab是平凡的函数依赖(即,b属于a)l a是模式R的一个超码(a+是否包含R中所有属性)*对R的分解Ri的判定:对于Ri上的属性的所有子集a,确保a+(F下a的属性闭包)要么不包含Ri-a的所有属性,要么包含Ri的所有属性BCNF :关系模式R中,对于属性组X,Y,若XY且YX时X必含有码,则R BCNF如STC BCNF,因为T# C#,而T#不含有码3NF到BCNF:消除主属性对码的传递函数依赖BCNF到4NF:消除非平凡的多值依赖各级别范式的包含关系1. 一个全是主属性的关系模式一定可以达到3NF。2. 一个全码的关系模式一定可以达到BCNF。3. 一个二目关系模式一定可以达到4NF。能判断范式级别,给出原因第一范式:要求关系的每个属性都是原子的第二范式要求1关系在1NF中2每个非码属性都完全函数依赖于候选码判断是否属于2NF:检查候选码的每个真子集,有否蕴涵某个非码属性?有,不属于,否则属于。第三范式要求:1关系在1NF中2每个非码属性都非传递依赖于候选码判断是否属于3NF:检查每个非码属性, 是否只依赖于超码(包含候选码)。如果有依赖于非超码,不属于,否则属于。注意, 因为任何属性集都函数依赖于候选码(KU),所以非码属性A依赖于某个非码B的同时,也就传递依赖了候选码K (KBA) BC范式要求:1关系在1NF中2对每个非平凡的函数依赖a b,a一定是超码(具有唯一性)判断是否属于BCNF:检查每一个(非平凡的)函数依赖,左边都是超码?有一个不是,不属于;全部都是,属于。 小结图:检查每个函数依赖: a b 结论a 非码 非BCNFa 非码, b 有非码属性 非3NFa 是候选码的一部分,b有非码属性非2NFp.s.一些术语和解释:特别区别非码和非码属性!l 例子关系l R(ABCDE)。候选码只有一个ABC,所以也是主码。l 码属性l 一个属性,出现在某个候选码中l 例如:A, B, Cl 非码属性l 一个属性,不出现在任何一个候选码中l 例如:D, El (候选码)码的一部分l 就是候选码的真子集。l 例如,AB, BC, AC, A, B, C等等l 超码l 具有唯一性的属性集。l 超码里面如果有多余的属性,那么去除后剩下的就是候选码。所以直观上看,超码含有或等于候选码。l 例如:ABC, ABCD, ABCE, ABCDE都是超码l 非码l 非超码,也就是超码以外,不具有唯一性的属性集。l 直观上看,非码不含有候选码l 例如:AC, AD, CD, BD等都是非码规范化到BCNF或3NF的方法(掌握两个算法)首先了解无损连接:不会丢失信息的分解判定“一分二”是否无损连接分解的充分必要条件将关系R分解为R1和R2 。则当以下两个函数依赖之一能够成立时,这种是无损的:R1 R2 R1R2R1 R2 R2R1规范化到1NF:非1NF的关系变为1NF的关系方法:将关系中每个非原子的属性转化成原子的复合属性的处理:转化成相应的多个原子属性多值属性的处理:移出去生成一个新关系,同时还包含原来的主码(新关系的主码为这两者的和)规范化到3NF:1NF关系分解为3NF关系的算法输入 : R(属于1NF), F(R满足的函数依赖集合)输出 : R1, R2, R3Rn(都属于3NF)第一步:n=0; (n是输出关系个数)for F 中每一个a b do if ab已经在某个输出关系Ri (1 i n)中 then什么也不做else if a是某一个输出关系Ri (1 i n) 的主码 then Ri := Ri + b; else n := n+1; Rn := ab ; (增加一个新关系,a 作为主码) end if 第二步: if R每个候选码都不出现在输出关系Ri (1i n) 中 then n := n+1; Rn := R的任何一个候选码举例:输入: R(A, B, C, D, E), F = (AB, CD, D E)候选码: AC1. R1(AB)2. R1(AB), R2(CD)3. R1(AB), R2(CD), R3(DE)4. R1(AB), R2(CD), R3(DE), R4(AC)Output: R1(AB), R2(CD), R3(DE), R4(AC)规范化到BCNF:1NF关系分解为BCNF关系的算法 输入 : R1(属于1NF), F(R1满足的函数依赖集合)输出 : R1, R2, R3Rn(都属于BCNF)n=0; for F 中每个ab dofor 每个关系Ri doif ab在Ri中但a不是Ri的超码 then Ri = Ri b if a是另一个输出关系Rj (1 i n) 的主码 then Rj := Rj + b; else n := n+1; Rn := ab ; (增加一个新关系,a 作为主码) end ifend if举例说明:输入: R1(A, B, C, D, E, F), F = (ABD, CE, AB C, CF)候选码: AB1. R1(ABCDF), R2(CE) 处理CE2. R1(ABCD), R2(CEF) 处理CFOutput: R(ABCD), R1(CEF)p.s. 规范化到BCNF得到的关系问题更少,但是可能丢失某些函数依赖(在原来的关系上成立,但在分解后的关系上不成立)。规范化到3NF得到的关系可能不是很好,但往往已经足够好了。而且不会丢失任何函数依赖 无损连接的证明方法如果R1交R2为R1或R2的超码,则R上的分解为无损分解。可用属性闭包证明。事务的定义、开始、结束定义:事务是由一系列访问和更新操作组成的程序执行单元。这些操作要么都做,要么都不做,是一个不可分割的整体事务以Begin transaction语句开始(SQL Server是Start Transaction),以Commit 或Rollback 语句结束Commit 语句:提交事务。此时事务正常结束,事务所做的修改操作都必须永久地写入数据库Rollback语句:回滚事务。此时事务非正常结束,事务所做的修改操作都必须撤销(Undo,数据改回旧值)。数据库回退到事务开始前的状态,就好像事务从来没有发生过一样。如果事务还没有来得及执行Commit之前,就因某种原因(故障)而终止了,那么系统就要自动地回滚这个事务判断:如果SQL语句处于某个事务的Begin transaction和Commit /Rollback之间,那么它就属于这个事务;如果以上不成立,那么这个SQL语句本身构成一个事务。事务的ACID性质及分析应用(单条语句本身就是一个事务)事务的ACID性质分别由什么机制保证l 原子性 (Atomicity) :事务中包含的所有操作(特指修改操作)要么全部做,要么全不做例如某个转帐事务:对帐户A扣除50,对帐户B增加50。这两个操作要么都做,要么都不做原子性由恢复机制实现l 一致性(Consistency) :独立执行一个事务(无其它事务同时并发执行)的结果必须保证数据一致性。即事务开始前,数据满足一致性要求;事务结束后,数据虽然变化了,但仍然满足一致性的要求。(这里的数据一致性要求是指应用的要求,应根据具体现实而定)例如在银行系统中,转帐事务的一致性要求是前后两个帐户的金额总和不变。假如一个事务为帐户A减去100,为帐户B加上50,那么这个事务就违反了一致性。保证单个事务的一致性,由编写事务的应用程序员来负责,并借助完整性机制来协助实现。也就是说,如果有数据一致性要求,应该将其定义成某些完整性规则。l 隔离性 (Isolation) :任何一对事务T1、T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1结束以后再开始执行 (T2对数据库的修改,T1要么全部看到,要么全部看不到)例如两个事务T1、T2同时对帐户A、B操作。若T1读取的A是T2修改前的A,而读取的B是T2修改后的B,就违反了隔离性,并可能导致数据错误 隔离性通过并发控制机制(第16章)实现l 持久性(Durability) :任何事务一旦提交了,它对数据库的影响就必须是永久性的。无论发生任何故障,都不能取消或破坏这种影响例如一个事务将50元从帐户A转到帐户B,那么事务一旦提交,这种交易是无法“悔改”的即便发生故障,也不能把这50元”还”回去 持久性通过恢复机制(第17章)实现三类不一致性问题如何产生丢失修改的产生a) 并发调度两个事务T1、T2b) T1与T2从数据库中读入同一数据后分别修改。假设T1先提交,而T2后提交c) 则T2提交的修改覆盖了T1提交的修改,导致T1的修改丢失不可重复读的产生d) 事务T1读取某些数据(记录)后,e) 事务T2对这些数据(记录)做了某种修改操作f) 当T1再次读取该数据(记录)时,得到的是与前一次不同的值l 不可重复读又分为三种情况在事务T1两次读取之间,l 另一事务T2更新了记录。则当T1第二次读取时,得到与前一次不同的记录值l 另一事务T2删除了部分记录。则当T1第二次读取时,发现其中的某些记录神秘地消失了l 另一事务T2插入了一些记录。则当T1第二次按相同条件读取时,发现地神秘地多了一些记录 (后两种不可重复读有时也称为幻影现象)读“脏”数据的产生l 事务T1修改某一数据,并写入数据库,但尚未结束(提交)l 事务T2读取同一数据,得到的是T1修改后的新值l 事务T1由于某种原因被撤消,则数据库中的数据恢复为修改前的旧值l 事务T2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据 其它事务修改后但又被撤销的数据。广义的“脏”数据l 凡是另一事务修改过但是还没有提交的数据,对本事务来说都是“脏”的。l 读这种广义的“脏”数据是件冒风险的事情:可能会正确如果最后对方事务提交了这种修改;也可能会出错如果象前面的例子一样,对方事务最后把这种修改撤销了l 所以在严格要求正确性的场合,读“脏”数据是不允许的并发控制的目的:系统对并发事务之间的互相作用加以控制从而保持事务的隔离性。并发控制的任务是什么:保证事务的并发调度是正确的(保证隔离性/可串行化效果上等价于某个串行调度),最后不会破坏数据一致性锁的相容性a) X锁,又称写锁,或排它锁i. 一个事务对数据对象A进行修改(写)操作前,给它加上X锁。ii. 加上X锁后,其它任何事务都不能再对A加任何类型的锁,直到X锁被T释放止b) S锁,又称读锁,或共享锁i. 一个事务对A进行读取操作前,给它加上S锁。ii. 加上S锁后,其它事务可以A加更多的锁:当然,只能是另外一个S锁,而不能是X锁。直到S锁被T释放为止三级封锁协议解决三类不一致性问题几种封锁协议一级封锁协议二级封锁协议三级封锁协议两段锁封锁协议 一级封锁协议 c) 若事务对数据对象A做的是修改操作时,必须首先对其加X锁(第一次read/write之前),且直到事务结束才能释放X锁(commit或rollback后)d) 若事务对A做的是读取操作,则没有任何要求(加锁/不加锁都可以)一级封锁协议可解决丢失修改的问题原因:两个事务无法“分别修改”同一个数据。二级封锁协议l 一级封锁协议l 若事务对A做读取操作, 则读操作(read)前要求对其加S锁,读操作后可在任意时刻释放S锁二级封锁协议可解决读脏数据的问题 原因:没有事务能够读取其它事务正在修改,还未提交的数据三级封锁协议l 一级封锁协议l 若事务对A做的是读取操作, 则要求首先对其加S锁(第一次read之前),且直到事务结束才能释放S锁(commit或rollback后)三级封锁协议可解决不可重复读的问题 原因:没有事务能够修改其它事务正在读取的数据两段封锁协议l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年区块链在跨境支付中的应用挑战与应对策略报告
- 新型建筑保温材料行业政策导向与市场前景报告
- 伶官传序教学课件
- 2025年文旅地产项目乡村旅游开发与文化旅游融合研究报告
- 2025-2030家政企业连锁化经营模式与区域市场扩张战略研究报告
- 普惠金融背景下2025年金融科技应用对中小企业融资效果评估
- 2025-2030口腔种植机器人定位误差补偿算法与临床效果评价
- 2025年静脉治疗护理理论知识考核试题及答案
- 2025年传染病病人的护理试题及答案
- 京版二下数学试卷
- 二衬台车行走安全专题报告
- 村级妇幼专干培训课件
- A-冷却水管道系统安装施工方案
- 派出所综合指挥室工作流程图
- 医疗领域中手工艺术的疗愈作用研究
- 农光互补项目建设可行性研究报告
- 供应商账户管理制度
- 八年级上册语文课内现代文阅读题
- GB/T 7573-2025纺织品水萃取液pH值的测定
- 2025安徽大学辅导员考试题库
- 眼科质量与安全工作制度
评论
0/150
提交评论