数据库基础知识梳理

【数据】描述事物的符号记录。【数据库(简称DB)】存贮介质、长期储存、有一定组织形式、可共享。特点:数据按一定的数据模型组织、描述和存储,可为各种用户共享、冗余度较小、数据独立性高、易扩展||概括应用系统建立一个或多个数据库,每个数据库由多个表(关系)。表由多个元组(记录)组成,元组由多个字段(数据项)组成,字段是最基本的数据单位。【数据库系统(DBS)】由一个互相关联的数据的集合和一组以访问这些数据的程序组成。DBS的主要目标是为人们提供方便,高效的环境来存储和检索数据。【数据库管理系统(DBMS)】是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,介于用户与操作系统之间的数据管理软件系统。作用:为数据库的建立、运行和维护提供统一管理和控制,提供定义数据和操纵数据接口,保证数据的安全性、完整性、并发使用及发生故障后的系统恢复。【数据库用户】无经验的用户;应用程序员;老练的用户;专门的用户。【数据库管理员(DBA)的五种作用】模式定义:DBA通过用DDL书写的一系列定义来创造最初的数据库模式。存储结构及存取方式定义。模式及物理组织的修改:由DBA对模式及物理组织进行修改,以反映组织的需求变化,或者为提高性能选择不同的物理组织。数据访问授权:通过授予不同的权限,DBA可以规定不同的用户各自可以访问的数据库的部分;日常维护:定期备份数据库、确保正常运转时所需的空余磁盘空间、监视数据库的运行。【管理信息系统】MIS)办公系统、决策系统、生产系统和信息系统面向数量的执行系统、面向价值的核算系统、报告监控系统,分析信息系统、规划决策系统数据独立性是指应用程序与DB数据结构之间的相互独立。物理独立性是指数据的物理结构的改变,修改模式/内模式映象,不影响数据库的逻辑结构,从而不致引起应用程序的变化。逻辑独立性是指数据库逻辑结构的改变,修改外模式/模式映象,不需要修改相应的应用程序。【数据库系统如何实现数据独立性】 数据独立性是由DBMS的三级模式和二级映像来实现的。数据库系统通常采用外模式、模式和内模式三级结构,数据库管理系统在这三级模式之间提供了外模式/模式和模式/内模式两层映像。当整个系统要求改变模式时,由DBMS对各个外模式/模式映像作相应的修改,使外模式保持不变,从而使基于外模式的应用程序保持不变,从而保证了数据的逻辑独立性。当数据的存储结构改变时,由DBMS对模式/内模式映像进行修改,可以使模式保持不变,从而使应用程序也不必改变,保证了数据的物理独立性。||数据视图数据库给用户提供数据的抽象视图物理层(内模式)磁盘存储方式中物理结构的描述,是DBMS设计人员看到的数据形式逻辑层(模式或数据模式)数据库全体数据的逻辑结构和特征的描述。DBA看到 视图层(外模式子模式)数据库部分数据的逻辑结构和特征的描述,用户看到,是模式的一个局部  简述数据库系统三级模式结构及其同数据独立性之间的联系:为了提高数据的物理独立性和逻辑独立性,使数据库的用户观点,即用户看到的数据库,与数据库的物理方面,即实际存储数据库区分开来,数据库系统模式是分级的,美国数据系统语言协会提出模式、外模式、存储模式三级模式的概念。三级模式之间有两级映像:存储结构改变时,修改模式/内模式映像,使模式保持不变,从而应用程序可以保持不变,成为数据的物理独立性;当模式改变时,修改外模式/模式映像,使外模式保持不变,从而应用程序可以保持不变,称为数据的逻辑独立性||【数据管理发展的三个阶段】人工管理阶段(没有相应的文件系统,数据不共享,数据不具独立性),文件系统阶段(操作系统中有了文件系统,打开、读、写和关闭操作。查询、修改、排序等处理都须编程解决。不支持并发访问。数据缺少统一管理,数据仍是面向应用的),数据库系统阶段DBMS统一管理,减少冗余;并发访问数据并一致性,数据安全性,故障情况下数据一致性的恢复)【DBMS组成】1数据定义语言(DDL)是说明数据库模式和数据的其他特性的语言,提供了定义关系模式、删除关系和修改关系模式的命令。2数据操纵语言(DML)是使得用户可以访问和操纵数据的语言,包括查询语言以及往数据库中插入元组、删除元组和修改数据库中元组的命令3数据库运行控制程序(DCL)初始化安全性控制完整性检查并发控制事务管理运行日志管理等/实用程序, 数据转储恢复程序性能监测数据库重组数据转换通信等  DBMS功能部件查询处理器(DML编译器DDL解释器查询求值引擎)存储管理器(权限及完整性管理器事物管理器文件管理器缓冲区管理器数据字典数据文件索引)【数据模型】是一种描述数据,数据联系,数据语义以及一致性约束的概念工具的集合。概念数据模型:现实世界的数据抽象,描述一个单位的概念化结构,与DBMS无关,如 E—R模型 。逻辑数据模型DBMS层面上的数据形式。如层次模型、网状模型、关系模型。 物理数据模型:数据存储结构,如物理块、指针、索引方式。【四种主要的数据模型】关系模型,实体-联系模型,基于对象的数据模型、半结构化数据模型数据模式数据模型下对数据的逻辑结构的描述模式是指它的逻辑设计,实例是指它在特定时刻的内容ER模型、层次模型、网状模型、关系模型和面向对象模型的主要特点:】ER模型直接表示实体类型及实体间联系与计算机系统无关充分反映用户的需求用户容易理解|层次模型的数据结构为树结构,记录之间联系通过指针实现查询较快但DML属于过程化的操作复杂|网状模型的数据结构为有向图记录之间联系通过指针实现查询较快并且容易实现M:N联系但DML属于过程化的语言编程较复杂关系模型的数据结构为二维表格容易理解记录之间联系通过关键码实现DML属于非过程化语言,编程较简单面向对象模型能完整描述现实世界的数据结构具有丰富的表达能力能表达嵌套递归的数据结构但涉及的知识面较广用户较难理解。【与传统的关系模型相比,对象关系模型有哪些扩充】1 在定义语言上有三个扩充:数据类型的扩充(引入复合类型);在类型一级和表一级实现继承性;使用“引用类型”。2 在查询语言方面,用户需记住属性值是单值还是多值。在多值时,需定义新的元组变量。DBS 中有哪些类型的故障?哪些故障破坏了数据库?哪些故障未破坏数据库,但使其中某些数据变得不正确】DBS 中DB故障主要有三类:事务故障、系统故障和介质故障。前两类故障未破坏DB,但使某些数据变得不正确,此时只要利用日志撤消或重做事务。介质故障将破坏DB,只能把DB 备份拷贝到新的磁盘,再利用日志重做事务对DB的修改。【什么是无关属性】对于函数依赖集F及F中函数依赖α→β,1)属性A在α中是无关的,如果A∈α,并且F├ ( F - {α→β})∪{(α- A) →β};2)属性A在β中是无关的,如果A∈β ,并且 ( F - {α→β})∪{α→(β - A) } ├ F。【完整性约束(作用:保证授权用户对数据库的修改不会破坏数据的一致性)视图的作用:】简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作安全性通过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。1.域完整性约束属性值应是域中的值,属性的值能否为null,由语义决定。在确立关系模式时规定的,由DBMS负责检查 2.实体完整性约束每个关系应有一个主码,主码的值不能为null3.引用完整性约束不同关系之间或同一关系的不同元组间的约束。若关系R中有一个外码(相对于关系S),则R中每个元组的外码的值必须满足:(1) 或者取空值 (2) 或者等于S中某个元组的主码值。R与S可以是同一个关系4.用户定义的完整性约束用户定义的完整性约束是针对某一具体数据库的约束条件,由具体应用要求决定。【关系实例】表示一个关系的特定实例,也就是所包含的一组特定的行,关系实例对英语程序设计语言中变量的值的概念;关系模式对英语程序设计语言中类型定义的概念,关系模式由属性序列及个属性对应域组成;数据库模式是数据库的逻辑设计;数据库实例是给定时刻数据库中数据的一个快照

【关系模型介绍】关系模式的非形式化标准1关系模式的设计应尽可能只包含有直接联系的属性,不要包含有间接联系的属性。2 关系模式的设计应尽可能使得相应关系中不出现插入、删除和修改等操作的异常。如果出现任何异常,则要清楚的加以说明。并确保更新数据库的程序正确操作。3 关系模式的设计应尽可能使得相应关系中避免放置经常为空的属性。4 关系模式的设计应尽可能的使得关系的等值连接在主键和外键的属性上进行,并且保证连接以后不会生出额外的元组关系代数:给予集合运算表示表的操作,过程化(交并差广义笛卡儿积、选择投影连接除更名赋值)|t∈r表示t是r的一个元组;tr⌒ts:  元组的连接, tr∈r, ts∈s ,  r为n目,s为m目 , tr⌒ts为n+m目的元组,  前n个值属于r, 后m个值属于s |集合运算:并(都为n目,相当于插入操作);差(都为n目,相当于删除);(都为n目,相当于找到共同元组r∩s=r-(-s))笛卡儿积(m+n目,r×s ≡ {tr⌒ ts|tr∈r ∧ ts∈s},区别同属性加表名为前缀)|专门运算:选择(σF  (r) ≡{t|t∈r ∧ F(t)=“真”},找出满足条件的元组);投影(ΠA( r)={t[A]|t∈r,找出满足条件的属性组成新的关系);自然连接(r ∞s={tr⌒ts[ Ø B]|tr∈r∧ts∈S∧tr[B]=ts[B]}共同属性(B)的元组保留,R+S-S.共同属性,r ∞s={tr⌒ts[ Ø B]|tr∈r∧ts∈S∧tr[B]=ts[B]});条件连接(r∞s AθB ={tr⌒ts|tr∈r∧ts∈s∧tr(A)θts(B) };r∞s AθB =σAθB(r×s));(象集:R=(X,Y),X,Y为R的属性组,当t[ X]=x时,x在r中的象集Yx={t[Y]|t∈r∧t[X]=x},每给一个具体x都有一个象集Y(一行或者多行),也可能是空);更名(ρ x(A1,A2,…,An)(e),中间表e赋名x,属性更名为A1,A2,一般为同表,找出表中最大);赋值广义投影聚集(sum (属性名),avg(属性名),min(属性名),max(属性名),count(属性名),count-distinct(属性名);ɡ聚集函数(属性as属性名(e));分组聚集(学号ɡavg(成绩)as平均成绩(选课));删除r←re);插入(r←r∪e);更新(广义投影+赋值)

Π学号,课程号(选课)÷Π课程号(课程)选修了所有课程的学生的学号

Π姓名(学生∞(Π学号(学生)-Π学号(选课)))找出不选修任何课程的学生姓名

Π姓名(学生∞ (Π学号(选课 (Π课程号(σ学号=“98001” (选课))))))至少选修了98001所选修的一门课的学生姓名

Π学号,课程号(选课)÷Π课程号(σ课程名=“操作系统”  V  课程名=  “数据结构” (课程)) 至少选修了操作系统和数据结构课程的学生学号

Πs1.学号(σs1.课程名=“数据结构”∧ s2.课程名=“数据库”(ρs1(课程∞选课∞ρs2(课程∞选课))s1.学号=s2.学号) 选修数据库和数据结构的学生学号

关系演算:给予谓词逻辑表示表的操作,非过程化|公式的等价性P1 ÙP2  Û ┑(┑P1 Ú ┑P2)" tÎr  (P(t)) Û ┑$t Îr  (┑P(t))P1 Þ P2  Û  ┑P1 ÚP2|元组关系演算与关系代数的等价性r∪S=t t∈r ∨ t∈s};r-S=t  t∈r∧┑t∈s};σF(r)=tt∈r ∧F′(F′F在谓词演算中的表示形式) ΠAi1Ai1,…,Aik(r)={t$u∈r (t1=uAi1t2=uAi2…∧tk=uAik]}结果元组有k个分量;r×s=t$u∈r ($v∈s (t[1]=u[1]…∧tn=untn+1=V1…∧t(n+m)=Vm))并、差、选择不用量词,投影、笛卡儿积用量词表示

t$u∈学生("v∈课程($ w ∈选课(t[姓名]=u[姓名]t[成绩]=w[成绩]∧u[学号]=w[学号v[课程号]=w[课程号])))}求选修了所有课程的学生

t$u∈学生($v∈选课($w∈选课(t[姓名]=u[姓名]u[学号]=v[学号]u[学号]=w[学号]v[课程号]=’5’ ∧ w[课程号]=’3’)))}求选修了课程号为5’3’的课程的所有学生的姓名

SQL概述:数据查询(select)定义(create,alter,drop)操作(insert,update,delete)控制(grant,revoke)域定义char(n)固定长度的字符串;varchar(n)可变长字符串;numeric(p,d)定点数,小数点左边p-d位,右边d位基本表的定义:修改(ALTER)格式:alter table 表名 add子句(增加新列)】【drop子句(删除列)】【modify子句(修改列定义)】|撤销(drop)格式:drop table表名|索引:create  [unique/distinct]  [cluster]  index  索引名on  表名 (列名 [asc/desc]  [ , 列名asc/desc]])索引的删除drop index 索引名|更名:as(属性更名+关系更名)| Unique(子查询)用在where unique如果子查询中没有重复元祖,返回true字符串操作:列名【notlike字符串%匹配零个或多个字符_匹配任意单个字符escape“\”,定义\作为转义字符like’ab\%cd%’escape‘\’匹配所有以“ab%cd”开头的字符串元组显示顺序order byDNAME asc,PNAME按系名升序DNAME,同一系中降序PNAME集合操作:并union交intersect差except(minus)自动去重,相容性操作分组命令group by   列名  [having   条件表达式]集合成员资格表达式[not]in子查询 (A1,A2,,ANIN (SELECT A1,A2,,ANFROM R WHERE)集合之间比较all(所有都) some(至少有一个)集合基数测试:【notexists(子查询)判断子查询的结果中是否有任何元组存在;A是B的超集,则NOT EXISTS ( B EXCEPT A )true,B EXCEPT A,表示B中存在但A中不存在的记录

列出选修了全部课程的学生姓名所求学生的选课集合为所有课程集合的超集select SNAME from Swherenot exists( (select    CNO from Course)EXCEPT(select CNO from SC where SC.SNO = S.SNO))不存在任何一门课程,所求学生没有选之select SNAME from Swhere not exists(select CNOfrom Course where not exists(select*fromSCwhereSC.CNO=C.CNOand SC.SNO=S.SNO ))学生学号与任一课程的组合不全包含在SC中selectSNAMEfrom SwhereSNO NOT IN (select SNOfromCourse , Swhere(SNO,CNO) NOT IN(selectSNO,cNOfromSC)

派生关系select SNAME,AVG_GRADEfrom(select SNAME ,avg(GRADEfrom S,SC where SC.SNO = S.SNOgroup by SC .SNO ,SNAME)as result(SNAME,AVG_GRADE )where AVG_GRADE  >=  60插入insert into表名[(列名[,列名])](子查询)插入子查询中若干条元组insert into 表明[(列名[,列名])]values(值删除deletefrom 表名  [where  条件表达式]删除指定元组更新update表明set 列名=表达式|子查询  …[where条件表达式]

【中级SQL】SQL视图是可更新如下条件:from子句中只有一个数据库关系;select子句中只包含关系的属性名,不包含任何表达式、聚集或distinct声明;任何没有出现在select子句中的属性可以取空值,即这些属性上没有not null约束,也不构成主码的一部分;查询中不含有group by或having子句

Checkcreate table section(course_id varchar(8),primary key(course_id),check(course_id in(‘ ‘,’’,’’))定义主码、check可用于域约束等

foreign key(dept_name)references(department),外码约束,约束dept_name在department表中的dept_name域中

check子句中的谓词可以是包含子查询的任意谓词(开销大,涉及的子查询都需要检测)断言:一个断言就是一个谓词,它表达了我们希望数据库总能满足的一个条件。只有不破坏断言的数据库修改才被允许。形式create assertion<assertion-name>check授权grant 表级权限//select等 (属性) on {表名 | 视图名} to {用户 |public} [with grant option](with grant option允许获得权限的用户将表授予其他用户)回收权限revoke 表级权限 on {表名 | 视图名} from {用户| public}多级授予,一并收回角色:在数据库中建立一个角色集,可以给角色授予权限,就和给每个用户授权的方式完全一样。每个数据库用户被授予一组他有全扮演的角色(也可能是空的)

【高级SQL】执行过程:主语言+嵌入SQL|预处理|主语言+函数调用|主语言编译器、执行动态SQL与嵌入式SQL动态sql:通用程序设计语言可以通过函数或者方法来连接数据库服务器并与之交互。利用动态sql可以在运行时以字符串形式构建sql查询,提交产寻,把结果存入程序变量中,每次一个元组。动态sql的sql组件允许程序在运行时构建和提交sql查询。嵌入式sql:提供了另外一种使程序与数据库服务器交互的手段。嵌入式SQL必须在编译时全部确定,并交给预处理器。预处理程序提交sql语句到数据库系统进行变异和优化,然后将sql语句替换成相应代码和函数,最后调用程序语言的编译器进行编译。【嵌入式SQL中,什么情况下的DML语句不必涉及到游标操作】INSERT、DELETE和UPDATE语句;对于SELECT语句,若已知查询结果肯定是单值时。【触发器】是一条语句,当对数据库做修改时,它自动被系统执行。【作用】示警;满足特定条件时自动执行某项任务。设置触发器的要求:指明什么条件下执行触发器,它被分解为一个引起触发器被检测的事件和一个触发器执行必须满足的条件;指明触发器执行时的动作ODBC】开放数据库相连JDBC】Java程序数据库连接API】应用程序接口【游标】实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制游标充当指针的作用declare  游标名 cursor for select语句[for update [of列表名]];open游标名;将游标移到特定行,并取出该行数据放到相应的宿主变量中fetch游标名into[宿主变量表];close游标名【触发器】

【数据库设计和E-R模型】实体对应表中一个元组(记录)属性对应表中一个字段(数据项)实体集对应一个表

角色:实体在联系中的作用称为试题的角色,当同一个实体集不止一次参与一个联系集时,为区别各实体的联系的方式,需要显示指明其角色(ER如中在线上加上说明性标注区别不同的角色存在依赖:y被删除,x也要被删除弱实体集:一个实体集的所有属性都不足以形成主码;弱实体集与其拥有者之间的联系称作标识性联系弱实体集必然存在依赖于强实体集,弱实体集与强实体集之间是一对多的联系分辨符:弱实体集中用于区别依赖于某个特定强实体集的属性综合;弱实体集主码由该弱实体集所存在以来的强实体集的主码和该弱实体集的分辨符组成;低层实体集所对应的关系包括高层实体集的码强实体集将每个强实体集直接转换为一个关系,实体的码作为关系的码,实体的属性作为关系的属性

【关系数据库设计】插入异常、删除异常、数据冗余、更新异常(码:能够唯一确定一个元组的最小属性集;候选码:一个关系的每个码)第一范式R的所有属性都是不可分的基本数据项(不满足第一范式的数据库不能称为关系数据库函数依赖:如果t1[x]=t2[x],则t1[y]=t2[y]Y依赖于X,X函数确定Y函数依赖类型平凡依赖(如果Y Í X ,按定义,则X→Y,称平凡函数依赖,否则为非平凡函数依赖 );完全依赖与部分依赖;传递函数依赖如果X→YY-\→XY→Z,则称ZX传递函数依赖||多值依赖与函数依赖区别 函数依赖规定某些元组不能出现在关系中,也称为相等产生依赖  多值依赖要求某种形式的其它元组必须在关系中,称为元组产生依赖   对于X→→Y,如果Y是X的子集或X∪Y=U,称X→→Y成立,称为平凡多值依赖  设R=(U),D是R上的函数依赖和多值依赖集,如果D的每个X→Y,  X→→Y ,X必是R的超码,那么R属于4NF主属性:所有候选码中的属性第二范式:属于1NF+每个非主属性都完全依赖于R的码题型属性闭包的求解算法X+F;候选码的求法(仅在左边的一定在候选码中,将左边的属性不同组合求属性闭包);函数依赖集的等价(检查F中的每个函数依赖X→Y,检查Y是否属于X+G;检查G中的每个函数依赖X→Y,检查Y是否属于X+F);正则覆盖(每个函数依赖的右端是一个属性;函数依赖集没有多余的依赖;每个函数依赖左端决定因素没有多余属性<极小化处理>1.把函数依赖右端变成单属性F1;2.G=F1-{X→A},若A∈X+G  ,将X→AF1中去掉,得F2;3.F2中左端是多属性的函数依赖X→A, X=B1,B2,…,Bm,若A∈(X-Bi)+F2,则将BiX中去掉

第三范式:每个非主属性都不部分依赖也不传递依赖于码P62判断是否属于3NF,主要是确定候选码,然后判断部分依赖,判断传递依赖;R没有非主属性时R3NF

BCNF如果关系模式R=(U)的所有非平凡函数依赖α→β α部分都包含R的一个候选码,则称R属于BC范式,记作R∈BCNF;主属性对码的部分依赖或传递依赖。如果R∈3NF,检查所有决定因素是否都包含候选码,若是,R∈BCNF

分解算法:分解既保持函数依赖,又具有无损连接性||矩阵判断无损;分解为两个子模式的无损连接判断算法定理 ρ={R1=(U1),R2=(U2)},则ρ为无损分解的充要条件为 (U1∩U2)→(U1-U2)∈F+(U1∩U2)→(U2-U1)∈F+;保持函数依赖分解判断:定义F在子模式Ri=Ui)上的投影为:Π Ri (F)={X→YX→Y∈F+∧XY属于Ui}注意:从F +中找(定义  ρR的一个分解,FR的函数依赖集,如果G= ΠR1(F)∪ΠR2(F)∪…Π Rk(F)|G>FF中的每一函数依赖X→Y,检查Y是否包含在X+G中, 若都满足,ρ是保持依赖的分解)

3NF的分解:判断第几范式(求码,部分依赖,传递依赖),按FC分解R1R2Rn(+R码),判断保持依赖和无损分解,满足则为3NF(证明:(1)算法的关键是求Fc(2 算法产生了一个保持函数依赖且化为3NF的分解。证:因为FcF等价,Fc的每个依赖都在一个子模式中,他们的并集是逻辑蕴涵Fc ,所以保持依赖十分明显。用反证法,设Ri=(X Ai)不是3NF,则FcRi上的投影必含有函数依赖Z→B , Z不是Ri的候选码,B是非主属性,分两种情况:(1) B = Ai, ZX的一部分,既然Z→Ai 存在,按极小函数依赖集的定义,应由Z→Ai代替X→A,这与Fc是极小函数依赖集矛盾。 (2) B≠AiZB都属于X,因B是非主属性,X不是Ri的候选码,设Ri候选码为K,故KX的真子集,按极小函数依赖集的定义,K→Ai应取代X→Ai,这与Fc是极小函数依赖集的假设矛盾。因此Ri属于3NF, 证毕)

BCNF无损连接分解(1) 初始化ρ={R}(2) 如果ρ中所有关系模式均已是BCNF(4),否则,从ρ中找出非BCNF的关系模式S,在S中必有X→A, X不包含S的码,A也不在X中。将S分解为S1=(XA)S2=(Us-A)UsS的属性组(3)在ρ中以{S1,S2}代替S,转(2)(4) 结束,输出ρ注意,函数依赖的选择,不限于F,应在F+范围内选择

4NF:设R=U),DR上的函数依赖和多值依赖集,如果D的每个X→Y,  X→→Y ,X必是R的超码,那么R属于4NFR1,R2都属于4NF3NF Ì 2NF反证:若RÎ3NF, 但RÏ2NF,则按2NF定义,一定有非主属性部分依赖于码设X为R的码,则存在X的真子集X′,以及非主属性Z(Z     X′),使得X′®Z于是在R中存在码X,属性组X′,以及非主属性Z(Z   X′) ,使得X®X′, X′®Z,X′®X成立,这与RÎ3NF矛盾。 所以RÎ2NF||BCNF Ì 3NF反证:若RÎBCNF, 但RÏ3NF,则按3NF定义,一定有非主属性对码的传递依赖,于是存在:R的码X ,属性组Y,以及非主属性Z(Z     Y),使得X®Y, Y® Z,Y®X成立 。由Y®Z,按BCNF定义,Y含有码,于是Y®X成立,这与Y®X矛盾。 所以RÎ3NF||一个全是主属性的关系模式一定可以达到第3范式;一个全码的关系模式一定可以达到BCNF||定理  R属于4NF,必属于BCNF。证明:假设R属于4NF,但不属于BCNF,那么有X→A存在且X不是超码,如果XA=U,显然X是超码;如果XA<>U, 根据X→A成立,有X→→A成立,此时X不是超码,违反了4NF条件。因此R必是BCNF

【事务管理】丢失修改、不可重复读、读脏数据 事务是构成单一逻辑工作单元的操作集合,要么完整的执行,要么全不执行并发执行可串性化调度的方法:基于锁的协议;基于事件戳的协议串行调度:一个事务运行完后,运行下一个事务,时间上不交叉、不重叠; 并发执行的可串行化调度:几个事务的并行执行的结果,与这几个事务任一种串行调度的结果相同冲突可串性化:冲突操作;非冲突操作:Ti, Tj 对不同数据的读写操作,Ti, Tj 对同一个数据Q的读操作Ri(Q)Rj(Q), Rj(Q)Ri(Q)||冲突可串性化的优先图判断法:如果 Ri(Q)之后有Wj(Q),Wi(Q)之后有Rj(Q) ,或 Wi(Q)之后有Wj(Q), TiTj之间加有向边Ti→Tj冲突可串性化!=视图可串性化ACID特性:原子性(保证事务的所有影响在数据库中要么全反映要么根本不反映一致性(保证事务必须是使数据库从一个一致性状态变到另一个一致性状态隔离性(保证并发执行的事务相互隔离.一个事务内部的操作及使用的数据对并发的其它事务是隔离的持久性(保证是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的视图可串性化:对不同数据项的初值,两个调度是同一个事务读。事务Ti读取的Q,在两个调度中,都是由同一个事务产生的。Q的终值,两个调度是同一个事务写入优先图(举例)

锁的类型X锁(排它型锁,不能加任何锁,释放前不可读不可写)S锁(其他事务可以对数据对象Q再加上S锁(非X锁),释放前,可以读取但不能更改)||一级封锁协议:事务T在修改数据Q之前必须先对其加X锁,直到事务结束才释放,可防止丢失不能保证可重复读和不读脏数据||二级封锁协议:事务T在修改数据Q之前必须先对其加X锁,直到事务结束才释放。事务T在读取数据Q之前必须先对其加S锁,读完后即释放S锁。二级封锁协议可防止丢失修改,防止读“脏”数据,但不能保证可重复读||三级封锁协议:事务在修改数据Q之前必须先对其加X锁,直到事务结束才释放。事务在读取数据Q之前必须先对其加S锁,直到事务结束才释放S||两阶段封锁协议:对任何数据读写之前,先要获得对该数据的封锁,释放一个封锁之后,事务不再加任何锁||所有事务都遵守两阶段协议,并发调度是可串性化的。(充分条件,不是必要条件)。事务不遵守两阶段协议,并发调度可能是可串性化的,也可能不是||“活锁”问题:系统可能使某个事务永远处于等待状态,得不到封锁的机会。解决方法:采用“先来先服务”的策略,也就是简单的排队方式。如果运行时,事务有优先级,那么很可能使优先级低的事务,即使排队也很难轮的上封锁的机会。此时可以采取“升级”方法来解决,也就是当一个事务等待若干时间还轮不上封锁时,可以提高其优先级别,这样总轮的上封锁。时间戳事务启动时间记为 TS(Ti)W-TS(Q)所有执行了写Q操作的事务中最年轻事务的时间戳(值最大)。R-TS(Q)所有执行了读Q操作的事务中最年轻事务的时间戳(值最大)。时间戳协议Ti 读数据Q时(1)若TS(Ti)< W-TS(Q),撤消Ti并重新启动(2)若TS(Ti)> W-TS(Q),执行读操作,R-TS(Q)= MAX(R-TS(Q),TS(Ti ))Ti 写数据Q时(1)若TS(Ti)< R-TS(Q),撤消Ti并重新启动(2thomas 写规则)若TS(Ti)< W-TS(Q),撤消Ti并重新启动。若TS(Ti) <  W-TS(Q),撤消Ti并重新启动(3) 其它情况,执行写操作,W-TS(Q)=TS(Ti)

【数据仓库与数据挖掘】

分类方法的评估标准:准确率、速度、健壮性、可伸缩性、可解释性训练集:创建分类器的过程开始于数据样本聚类的概念:是在要划分的类未知的情况下,将数据对象分成不同的类 ,无指导学习。

决策树分类器(从根结点遍历直到找到对应的叶结点,信息增益最大的为根结点)、神经网络分类器、贝叶斯分类器、支持向量机分类器属性信息增益(互信息)计算 I(U,V)=H(U)- H(U/V)=类别熵 – 条件熵其中,U为类别集合,{N,P} V为属性的值集合|类别熵(先验熵)的计算:H(U)= ∑P( ui ) log2(1/ P( ui ))=-∑P( ui ) log2( P( ui ))| P( ui )=属于ui 类的样本数/全体样本数||条件熵(后验熵的计算:H(U/V)= ∑P( vj ) ∑ P( ui︱vj )log2(1/ P( ui vj )))| P( vj )=属性取值为vj 的样本数/全体样本数| P( ui︱vj )=属性取值为vj 的样本中属于ui类的样本/属性取值为vj 的样本数!!树:按根结点的三个值建分支得到F1F2F3,然后根据信息增益求子树,得出决策树朴素贝叶斯分类算法:设X是未知类的样本,H是X属于C的一个假定,X的分类问题变为求P(H︱X),即给定X,H成立的概率;P(H︱X)称为条件X下H的后验概率:P(H︱X) = P(X︱H) P(H)/ P(X)其中: P(X︱H)称为条件H下X的后验概率;P(H)是H的先验概率,独立于X; P(X)是X的先验概率;P(X|H)P(H)进行比较,将X分配到计算结果较大的H中自含语言宿主语言自含语言一种是独立的交互使用数据查询、数据更新等操作另一种是嵌入到某种高级语言中,作为高级语言的一种扩充,是程序员编程时既可使用数据库语言又可使用常规的程序设计语言,这时高级语言叫宿主语言关联规则可信度(AÞ B)=包含A和B 的元组数/包含A的元组数;支持度(AÞB)=包含A和B的元组数/元组总数;(可信度=L支持数/AB支持数)Apriori算法:频繁集的子集必须是频繁的I文档频率倒数,出现词条tj的文档占整个文档集合的倒数的对数,定义为: Log(N/nj)N是文档总数, nj是出现词条tj的文档数||TF-IDF= tfj(Di)* Log(N/nj)TF越大说明该词条在文档中出现越多越重要nj越大,说明tj出现的文档越多,越不重要(“的”)IDF取对数的目的是使权对N变化不敏感

【基于对象的数据库】有结构的类型和集合体类型

继承:(类型继承(超类型<父类型>+子类型<但类型继承+多重类型继承>)+表继承)类型继承:每个实体必须恰好有一个最明确类型(通过as来消除冲突);表级继承:允许一个实体同时存在于多余一个的表中,使得一个对象可以拥有多个类型引用:类型引用:类型的属性可以是对属于指定类型的对象的应用;表引用:用表的主码或元组的标识符来实现对元组的引用解除嵌套将一个嵌套关系转换成具有更少(或没有)一关系为值的属性的形式的过程称为解除嵌套嵌套将一个1NF关系转化为嵌套关系的过程

你可能感兴趣的:(数据库基础知识梳理)