




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(1) 第二章数据模型(2) 实体和属性,数据模型中的实体不一定特指现实世界中存在的实体,主要是指,在模型中可以独立的个体,比如一次比赛也可以作为实体,是可以被属性确切描述的抽象;(3) 属性,是用来描述实体的,它不能独立存在,是要依赖在实体上存在的,也就是说属性是实体的若干性质。(4) 实体间的联系,现实世界中联系有两种,一种是事物的内在联系,一种是事物之间的联系,事物内在联系就是指实体与属性间的联系,而事物之间的联系就如字面意思。(5) 联系分为一对一,一对多,多对多,这些都是特指事物之间的联系,与属性是完全没有关系的,实体间的联系我们也抽象为函数供应零件工程供应商(6) (4)多个实体间的联系和多个实体两两之间的联系,我们可以通过语义的不同来区分,首先多个实体间的联系,是 如下的多个是实体间的联系,它能表示出来某个供应商供应那些零件给 工程,但是实体间的两两联系却不能表示出来这种关系,两两之间只能表示出来 哪些工程需要哪些零件,那些零件可以由哪些供应商提供。 Mi. Mb) N p (7) (5)在ER模型中实体间的联系原因写在另行的对话框内部,联系的原因也可以用属性来描述。在ER模型中我们提供了1:1 1:n m:n,这些联系约束我们成为基数比约束,在这里面我们有一类实体是需要依附于其它实体存在的,我们称之为弱实体,而它所依赖的那个实体我们相应的称之为强实体,弱实体我们是双边对话框表示并且实体间的联系我们用双线来连接,我们在ER模型中我们有一种称为子类和超类的,子类可以继承超类所有的属性并且还可以继承超类的所有联系关系。超类是所有子类的公共部分的合集,而子类是在超类基础上又有自己的扩展延伸。(8) 关系模型,关系模型是继层次模型和网状模型之后新的一种模型,关系模型机就是一种二维表,一张二维表我们称之为一个关系。(9) 1关系是一张二维表,石油多个行和列组成的。一个关系可用来描述一个实体集i. 2属性一个关系可以由多个列,每一个列表示一个属性;(10) 3域,一个属性对应这一个值的集合,即域是属性的取值范围,一个属性只能对应一个域,但是不同的属性可以对应一个相同的域,在现实中我们不能确定的属性值,我们用NULL来表示。(11) 4元组,关系是元组的集合,一个元组对应着一个关系中的一个实体(12) 5键,(key)是由一个属性或者是由几个属性组合在一起的,它能够唯一的标识元组,在一个关系中可能有多个属性可以唯一的标识一个元组,我们称这些可以唯一标识元组叫做候选键。 1. (8)关系模式,如下表示,关系名(属性名1,属性名2,) 2. 关系数据库是由若干的关系模式组成的,关系模式之间的联系我们用不同关系中的同名属性来联系关系,在关系数据库中我们为了维护数据库数据的统一性,我们引入完整性约束,主要有实体完整性约束,参照约束,自定义约束。3. (9)关系模式主要有以下几种有事,数据结构简单、一体化的数据子语言、数据独立性高、,面向集合的存取方式、坚实的理论基础、有利于展开其他应用。(13) (10)层次数据库中,层次数据库是用树来表示的,有且只有一个节点没有双亲,一个双亲节点可以由多个子节点,但是一个子节点只能有一个双亲节点,没有子节点的节点我们叫做叶子节点,这样如果我们执行插入操作的时候,因为子节点不能独立于双亲节点独立存在吗,我们在没有相应的双亲的节点的时候我们就没有办法插入子节点,对应删除的时候如果我们删除的是双亲节点时候,我们级联删除对应的子节点,这样的数据库对我们的管理就有诸多的不足了。而且层次数据库很难表示M:N的关系,如果我们要处理这个问题我们就要引入指针,这样就会造成大量的数据冗余,但是层次数据库意识有优点的,他能清晰直观的表示出现实世界中不同个体之间的联系。(14) 网状数据库,网状数据库中允许一个节点有多个双亲节点,同时也允许多个节点没有双亲节点,没有层次的限制能够更好的描述现实事物之间的复杂联系,一般采用指针,存储效率较高,缺点是结构太复杂,随着数据量不断的增减,表示起来越来越繁琐,数据定义语言和数据操控语言不容易掌握,访问数据是必须自己制定路径,复杂的导航机制增加了程序工作的困难。第三章关系数据库(1) 在关系数据库中我们可以把元组抽象成数学表达式中的笛卡尔积,在关系数据库中其中的实体就是一个元组,每个元组可以对应多个列,列,代表着属性,关系这个二维表示不可以在分的,不能出现表中嵌套这表,我们要遵守以下的原则:1每一列中的值同类型的来自同一个域。2不同的列可以来自于同一个与,每一列有对应的标识符,用属性名来标识。3列的次序是无关紧要的。4元组的每个分量是原子的,是不可再分的。5元组的次序是无关紧要的。6个元组是不同的,即关系中不可以出现相同的元组。(2) 关系数据库中分为“型”和“值”,型就是我们定义的关系模式,它需要定义关系名字,属性名字,属性的类型和取值范围,而值是我们所说的确切元组,由于现实世界是在不断变化的,所以值是可以随着时间改变的,但是模式不同,模式已经定义基本就是固定的,除非对模式从新定义,否则模式是不随时间改变的,我们将关系模式和关系值公共成为关系。(3) KEY,我们在候选键中选择一个叫做主键,其余的候选键我们称之为隐含键或者候补键。如果键时候多个属性组成的我们称之为联合键。在极少的情况下,需要所有的属性才能唯一标识元组,如果出现了我们称之为全键。在关系中存在着这么一些属性,可以是本体键的一部分也可以只是一般的属性,但是在另一个关系中,是那个关系的键,这样的属性我们称之为外键。有一个超键的定义,如果针对我们选定的键不能再度细化分,我们就称这个键叫做超键。(4) 完整性约束,分为实体完整性约束,主要是针对主键的约束,因为主键是唯一区分元组的标识,而元组又是与实体相对应的,在现实意义下空个体是没有任何实际意义的,所以我们要定义主键非空;参照完整性约束主要是针对外键的,如果外键是以普通属性存在的,那么这个属性可以取两个取值一个是空值,一个数对应那个表中的值,如果这个外键也是本体键的一部分,那么取值范围只能是非空的,并且与那个相对应。其它约束,主要是我们真正的应用程序要对数据有哪些约束,是一种用户的自定一约束条件。(5) 专门的关系运算,1选择运算,f其中f为布尔表达式,主要是对于选择要满足的条件进行一个严格的限制,只有在table中满足条件的元组才会被最终选择出来,选择运算是一种一元运算操作符,选择是针对行的运算2投影操作x是针对列而实施的,主要是选取x代表的那一个属性列。3连接操作,这是一个二元操作,针对不同的表,连接分为条件连接和自然连接AB我们主要是是连接操作的过程中要满足这个条件,也即是分别去取两个不同的元组,在元组t1的属性A上和元组t2的属性B上要满足的关系,这里的关系可能是大于小于或者等于,我们最常使用的是等于的关系,我们称之为等值连接,我们特指两个关系上在同一属性上采用的等值连接叫做自然连接,注意特别是同一属性。4除法,这个是一种二元运算,是针对两个不同的表的,要求执行除法的两个要有公共的属性集,R/S 这个结果是出除去公共属性后的其他属性,并且在元组的选择方面上也要遵循有公共属性的那些元组作为新的关系的元组。针对连接操作我们大多数采用的都是内连接,还有一种连接叫做外连接,外连接里面分为左连接还有内连接,还有完全连接,这中连接方式就是将不满足要求的元组也一同连接起来,左连接就是针对左面设定的,以此类推。完全连接就是将左连接和右连接的结果集并在一起的结果。(6) 关系演算,在关系代数中变量是属性和表,而在关系演算中,变量是针对元组的,在关系演算中我们还会用到全称量词和存在量词,并且析取合取我们也会使用到。(7) (7)关系运算的安全性,首先关系是集合论中的内容,而针对集合论而言,关系是无限的,但是关系数据库中的内容是针对现实世界抽象出来的,我们得保证和现实世界想匹配的数据是有意义的数据,所以在关系数据库中我限定了关系是有限的,这样我们还要保证关系运算后的结果集仍然是有意义的,我们将在关系运算中能产生有限集的称之为安全运算表达式。关系数据库标准化语言(1) SQL语言是一种具有关系代数和关系演算特点的结构化查询语言,SQL的基本功能可以分为,数据定义、数据操控、数据控制、嵌入式SQL,数据定义主要是定义基本表,视图和索引;数据操控主要是针对插删修改还有查询;数据控制主要是针对权限的一种控制机制;嵌入式SQL主要是嵌入到更加高级的宿主语言中实现对数据库中数据的高级处理。(2) SQL中支持三级模式,并且在SQL中我们称表为基本表,在前面的定义中我们规定了表是不可以有重复元组的出现,但是在SQL中表是可以出现重复元组的,为了区分,所以规定为基本表,每一个基本表在物理存储中对应一个相应的存储位置。针对于视图,视图并不在物理中真正的存储,视图是我们用户所看到的表,这些元组是重基本表中提取出来的,所以说这个是一种逻辑上的表。在SQL中支持模式的定义,第一了一个模式就相当定义了一个域名空间,我们先定义模式的名字,权限标识符,权限标识符就是模式属于谁的,在以后的时候再对模式中的元素进行扩充。如果不指定模式的名字,则默认为模式名字为用户的名字。(3) 基本表的定义,删除和修改。CREAT TABLE(表级完整性约束)这是创建一个表需要的全部东西,其中表名是由用户指定的,并且一个表中要包含多个属性列,这些属性列我们还可以限制定义其中的存储类型,在每个相应的属性列后面就可以定义列级的完整性约束,在我们表结束的时候我们还可以相应的定义表级的完整性约束,这些东西定义完成之后都会被放入DBMS中当我们使用的时候就会检查是不是符合我们定义的内容。一般在表创建的时候,对应的数据模式都被隐含的指定了,我们也可以显示的指定我们定义的表属于哪个数据库的模式,只要在CREAT的时候写上模式名字加点作用域的符号再写表的名字就可以显示的指定了。(4) CONSTRAINT这个是在定义表的时候用的约束关键字。(5) ALTER TABLEADDDROP CASCADE|RESTRICTALTER ;ADD用于增加新的列,包括列名,属性类型,完整性约束。DROP用于删除我们已经存在列,CASCADE是一种级联删除标志,会删除引用了这一列的索引还有视图,如果是RECRICT表示如果没有在这个属性列建立索引和视图的时候才能删除。ALTER用于修改我们存在的列,可以修改数据类型,和列的宽度。如果使用了ADD新加的属性列相应的属性值是空的,所以我们不能定义NOT NULL这个约束。(6) 基本表的删除DROP TABLE CASCADE|RECTRICT CASCADE删除表的同时也删除表上存在的视图和索引,RECRITCT是表中不存在视图和索引的时候才允许删除表,还包括了不能被其他表作为参照约束的引用。一般缺省的时候默认为RESTRICT.(7) 索引的建立CREAT UNIQUECLUSTER INDEX ON (.)次序的选择上我们可以填入ASC升序DESC降序UNIQUE代表着唯一性,如果我们选择填入了这个,如果在插入的时候插入了重复的元组,系统将拒绝行为CLUSTER代表聚集索引,所谓聚集索引就是和物理地址一一对应,显然聚集所以在一张表上只能建立一个。删除索引DROP INDEX。索引的更新和维护是由DBMS自动完成的。索引的引用是由DBMS自动引用的,用户不必也不能选择索引。有些DBMS会自动在PRIMARY AND UNIQUE上自动的建立缩影。在使用UNIQUE的时候如果表中已经存在着重复的元组的时候,UNIQUE也同样不能建立。建立索引的好处可以提高检索的效率,如果要做连接操作,也会提高连接操作的效率,但是带有索引的表需要更大的存储空间,并且针对索引的插删修改,也要额外的计算代价,并且索引的维护也是需要额外的内存计算代价。所以我们建立所以的时候要权衡利弊,应该确保在性能上面的提高要大于对系统的额外开销损耗!(8) SQL数据操控,有GROUPBY 在使用分组的时候除了分组属性可以出现在目标表中,其他的属性均不可以出现。但是可以出现聚集函数,增加聚集函数并不影响GROUPBY的使用。(9) 我们在用SQL做连接的时候只要将同名属性在SQL表示成相等,这样就会自动的对两个表做连接操作。在做查找的时候我们要做字符的模糊查找用%来表示要模糊的字符,%可以表示单个的字符,也可以表示一组字符串。(10) 我们在使用SELECT查找的时候,我们后面的属性名字可以是算数表达式,字符串常量,聚集函数,别名的引用。如果我们使用别名的引用的时候,在我们看到的表中,属性名字就会引用我们起的别名!DISTINCT可以消去重复的元组,DISTINCT要紧跟在SELECT的后面,SELECT中的WHERE的表达式后面可以使用比较大小,=还可以使用范围调教BETWEEN.AND 或者NOT BETWEEN . AND,使用为此IN NOT IN或者 字符串的匹配LIKE,当我们真正的要使用%的时候我们要进行字符的转换ESCAPE来打出真正的字符。当查询的时候涉及到控制的时候要使用短语 IN NULL。HAVING AND WHERE,在WHERE中不能使用聚集函数,聚集函数都是针对分组后使用的,在HAVING 中是可以使用的,而且两者作用域也是不一样的,HAVING是作用在分组上的WHERE是作用在基本表上的,在不同的表上使用连接操作,只要引入比较运算符就可以了。怎么区分是自然连接还是一般的连接?首先不同的连接我们称之为广义的笛卡尔积,如果我们针对多个表,两个表名我们都在SELECT的选择属性列中写出来,并且我们要显示出包含了两个不同表的相同的属性,在WHERE中我们使用什么样的比较运算符,就是什么样的连接操作。如果我们把相同的属性列覆盖掉,只显示一个属性列的时候,而且我们还使用等值连接的是就代表这种连接的方式是自然连接。一个表是可以和自身做连接操作的,我们必须要为同一个表起不同的别名,来通过别名引用我们定义的表,我们有相应的内连接操作,和外连接操作,内连接引用INNERJOIN外连接包括的那三个LEFT/RIGH/FULL OUTER JOIN.(11) 嵌套查询,嵌套查询分为不相关子查询和相关子查询。不相关子查询是指,子查询的条件不依赖于父查询中引用的表,不相关子查询是由内到外进行查询的,子查询的结果是作为父查询的条件形式出现的。相关子查询正好相反,内部的查询需要引入外部的查询条件,现在外部查询中取得一个元组,放入到内部查询中,如果满足条件,就将这个元组拿出来,然后重新的执行这个过程。ANY AND ALL,ANY 在使用的时候代表任意一个可用聚集函数MAX或MIN来代替,而ALL则是全部,可以用MAX 或者MIN。在嵌套子查询中还可以使用EXIST AND NOT EXIST,子查询中SELECT后面直接跟*就好了,因为我们并不确切的要求得到某一个元组,只是为了验证存在性。(12) 集合查询中,两个查询结果的集合中采用第一个集合的属性,所以就要求两个集合的属性类型必须是一样的了,集合查询中会自动的删除重复的元组,ORDERBY不能出现在个子的SELECT中只能,跟在整个集合查询的最后面!(13) 插入,插入有两种方式的插入,一种是插入单个元组 采用INSERT INTO属性列VALUE 常量.如果不写属性列,那么插入的值要与表中的数据相对应,如果写属性列的时候,属性列不要求和表中的一一对应,只需要VALUE中的和你写的属性列完全对应就好了。另一种一次可以插入多个元组,是使用SELECT语句如果写属性列,写了部分其他没写的就直接置为空值,如果没有写那就要插入整条的元组,所有的属性都要给出。(14) 修改UPDATE SET =数值或者表达式.WHERE 后面是学则要更新的元组的条件,修改表中数据的时候不能够破坏表中的完整性约束。(15) 删除,DELETE FROM WHERE后面跟的是选择条件,选择要删除的元组。(16) 数据操控对数据完整性的破坏,在对数据进行操作的时候必须保证完整性不能够被破坏,例如级联删除就是一种保证措施,保证了数据的一致性,删除母表上的某个元组的时候也级联的删除子表的元组。(17) 相对于视图而言,视图相当于外模式,对于视图而言DBMS只存放视图的定义,不会存视图内部的数据,所以数据还是基本表上的,那么对于视图的操作就相当于对基本表的操作CREAT VIEW AS WITH CHECK OPTION。对于SELECT语句,DBMS只是存储,并不执行,视图的列名可以省略的,如果省略了那么相应的属性列就和SELECT中的相同。但是有以下几种的情况是不能省略的(1)目标列包含聚集函数或者表达式(2)视图列表中包含多个表中相同的列(3)需要为表中某个属性启用更加合适的名字。WITH CHECK OPTION是要DBMS检查对视图的操作是不是满足子查询中的完整性约束。利用SELECT*查找的结果,对于扩充起来有很大的限制,所以要尽量的避免。、(18) 删除视图DROP VIEW(19) 建立在视图上的查询,在视图上的查询有两种方式,一种是视图的实体化,一种是消解法。视图实体化法:有效性检查,先检查视图的定义是不是在DBMS中存在。执行视图的定义将视图生成临时表,查询视图将转化为查询临时表上的操作,一旦查询操作完成,就删除临时表。消解法:先检查有效性,检查查询表和视图是否存在,如果存在,从数据字典中取出对视图的定义,将视图的查询和用户的查询进行合并,转换成对基本表上的查询。视图消解法的查询容易存在歧义,在某些情况下试图消解法不能产生正确的查询结果,采用视图消解法DBMS会限制一些查询。(20) 视图的更新,对于视图,更行是受一定限制的,我们最好写上WITH CHECL OPTION这样DBMS会自动检查不符合插入条件的语句,然后选择错误报告,例如我们插入基本表中不存在的,就像聚集函数导出的属性列。还有的更新操作不能够唯一的有意义的转化为对基本表的更行操作的时候。(21) 对于视图更新的限制,不可更新的视图:经过理论证明,这一类视图是不可更新的。不允许更新的:实际的数据库系统不支持更新操作,但是理论上是可以执行更新操作的。仅仅在一个表上取其行列值,并且列值包含了候选键,这样的视图是可以更新的,这类的视图成为“行列子集视图”。出了行列子集视图外,其他的是图对于更新都有限制。(22) 更新限制有。由两个,或者两个以上到处的视图是不允许更新的,如果视图的字段是来自于字段表达式,或者是常字段,则不允许更新。查询中有聚集函数,或者GTOUPBY或者DISTINCT的时候视图不允许更新。在包含有嵌套查询的时候,内层嵌套的表也是导出该视图的基本表的时候,则此类的视图是不允许更行的。还有就是,定义时候一个不允许更新的视图,在定义过后不能够执行更新操作。(23) 视图有很多的优点,视图在一定的基础上保持了数据的逻辑独立性,当数据库进行更改的时候,由于对数据的变动不是很大,只要重新的定义视图,是用户使用的外模式不用改变,这样数据的控制和操作对于用户来说就带有一定的透明性了。简化了用户的视图角度,视图使得用户将注意力专注在自己想要的数据上,简化了用户看到的数据,在一定的基础上保证了数据的安全性,DBA可以限制用户只能观看一定的数据,这样是要在建立视图的时候限定用户就可以了。并且我们还有WITH CHECK OPTION,这样还可以保证数据在一定程度上保持了一致性,不会产生数据歧义。(24) 数据库的权限控制,DBA和表的建立者有着表上的所有权限,可以通过GRANT AND REVOKE来对全新进行控制。授权语句GRANT 权限。 ON 对象类型,也就是表 TO 用户.WITH GRANT OPTION,如果存在着WITH GRANT OPTION就代表被授予用户被授予权限的同时也授予了授予权,用户的那一栏可以用PUBLIC则代表,授予所有的用户REVOKE 权限。 ON 对象类型,也就是表 FROM 用户.CASCADE|RETRICT CASCADE代表这级联收回,如果被授予用户曾经把权限授予给过别人,那么在收回用户权限的同时,曾经授予的权限也会一并收回的。RETRICT只有用户没有把权限继续授予别人的时候才可以收回。(25) 嵌入式SQL,SQL是一种高度结构划的语言,但是有一些处理过程是要过程化的,所以有了嵌入式SQL,嵌入式的SQL是要嵌入到宿主语言中进行使用,可以以预编译的形式,先对SQL预编译成宿主语言能识别的代码,为了进行交互的行为,寻在这数据通讯区。SQL communicate area简称为SQLCA。在嵌入式的SQL中有输入变量,还有输出变量。输入变量是由宿主程序进行输入赋值,然后和SQL进行交互。输出变量是由从SQL中获取查询结果。主变量可以出现在SQL中任何一个能使用表达式的地方,主变量要先说明,后使用。主变量的说明方式EXEC SQL BEGIN DECLARE SECTION主变量的声明EXEC SQL END DECLARE SECTION。宿主语言是面向记录的,但是SQL是面向集合的。所以包含了是否使用游标。 如果查询的结果是单条的记录,那么就不需要使用游标,如果查询的结果是一个大集合,这样我们就要引入游标的概念,对于要使用游标的嵌入式,要先定义游标,然后打开游标,推动游标,关闭游标 EXEC SQL DECLARECURSOR FOR FOR UPDATE OF 。EXEC SQL OPEN 。 EXEC SQL FETCH INTO 功能是把取游标本位的数据并且把游标推进到下一位,如果最后游标走到空的时候SQLCODE就会返回一个代码。最后游标使用完成了,就要关闭游标EXEC SQL CLOSE 。(26) 有一种类型是CURRENT形式的游标 EXEC SQL UPDATE SET =某个表达式或者值 WITH CURRNET OF,这是更新的定义EXEC SQL DELETE FROM WITH CURRNET OF(27) 嵌入式的SQL包含了动态的和静态的,静态的SQL:在所有的进行之前,操作啊,主变量的个数就已经都确定了第五章查询处理和查询优化(1) 关系数据库的查询可以分为五个阶段,分别为:查询分析,查询检查,建立查询的内部表示,查询优化,查询执行。(2) 查询是数据库中最常用的技术,在SQL中基于存储路径的不同,所以不同的查询方法会产生不同的查询效率,并且DBMS中有很多的查询优化的方式,至于选择哪种才能是查询的效率达到最高这是我们要研究的问题。查询的方式主要有两种,解释方法和编译方法。解释方法就是:在执行的过程中,每个语句顺序的执行,内存中并不保留查询的代码,查询完成就直接的返回相应的结果, 这样的查询方式,灵活多变,但是系统的花销比较大,适合那种偶然不重复的查询方式。还有一种就是编译的方法:在执行查询之前先对查询语句进行预编译,将查询的代码保存在内存中,当查询的时候直接调用查询呢代码,但是一旦数据库的数据进行更新的变化的时候就要重新的编译,这样可以提高查询的效率,系统开销较小。(3) 建立查询的时候先进行的是查询分析,查询分析:语义分析,词义分析,语法分析,主要是检查,我们使用的查询语句是不是符合SQL的语义规则。查询检查:安全性,完整性,有效性,根据数据字典对查询的数据库对象查看是不是有效的,并且检查用户的权限问题和相对应完整性约束。查询的建立和内部表示:将查询的语句转化为数据库内部查询的方法,比如建立查询的语法树和语法图。查询优化:比如进行代数优化,路径优化,和代价的估算,从而找到一个效率比较高的查询算法。查询的执行:根据前面确定的查询策略对表进行查询处理,并且输出查询的结果。(4) 关系操作的基本实现方法。选择:1顺序扫描方法,主要是对基本表进行顺序的扫描,如果对应的元组满足条件,就将元组拿出,作为输出。此种方法简单实用,不需要特殊的存储路径支持,适用于任何的关系,主要是针对目标元组占用的比例比较大的时候。算法简单通用,但是效率比较低。2二分查找:主要就是采用二分算法来进行查找,二分算法的执行条件是数据要经过排序的处理,是有序的数列才能实用二分查找的方法,所以在数据库中要求,数据的物理存储是要有序的,一般适用于等值的查找,效率比较高,但是我个人认为,实现的可能机会很大,毕竟不是所有的查找都是包含key这个属性列的。3索引查找:索引查找,就是针对索引进行查找,首先索引是一种有序的指针序列,当找到了满足条件的索引的时候再根据索引指定的物理地址去提取真正的目标元组。4合取查找:1组合索引的查找:如果在查找的合取属性上有组合索引,那是最好的情况,可以直接通过索引指针提取目标元组。2使用单索引,如果合取的查找方式只有一个或者若干个有索引,那么就先针对有索引的那个属性进行查找,然后再检查其他的属性条件是不是满足要求,满足要求的元组直接就可以提取了。3合取查找,首先查找选择性小的元组,所谓选择性就是目标元组占所有元组的比例。再有点比较背的时候,所有的条件属性都没有索引啊。的时候就只能用顺序扫描,看所有的元组了。5析取查找:如果多个都有索引的时候就可以直接用索引查找的方式查找,然而一旦有一个条件属性没有索引的时候就只能使用顺序查找,因为析取查找中是只有有一个条件属性满足的时候就是目标元组(5) 连接操作的实现。连接操作是花销很大一种查询,可能会产生很大的中间结果集。实现方法主要有嵌套循环,索引嵌套,排序合并,hash也就是散列的方式。1嵌套循环法:嵌套循环的思想就是,在外层循环中取一个ts再在内层取一个kr,当tA=KB的时候就提取出来,这种方法的形式和顺序扫描的思想很是接近,不需要特殊的物理路径支持,使用于各种形式的关系,但是选择哪个作为外层循环也是很重要的,一般选择元组数目比较小的作为外层循环的控制,效率比较高。2还有就是索引的嵌套扫描。如果在某个上面有索引,那么就可以代替内层循环,避免了顺序的扫描方式,只要在外层循环中得到一个元组,就可以针对内层循环中的索引去查找是否有满足的元组。3在有一种就是排序合并发,在要连接的属性列进行排序处理,然后用归并的思想,同时扫描两个关系,进行连接。4再有就是散列,对两个关系使用同一个散列函数,先将关系较小的那个,使用散列函数进行划分,完成散列分布之后,再去取另一个关系中的元组,运用散列函数,将其放入到相应的HASH中,进行匹配,匹配过程可以使用嵌套循环的方式。(6) 投影操作,投影是对元组的纵向划分,如果是针对候选键的那种投影操作,就可以直接提取,否则还要进行重复的消除。重复消除有两种方法,排序消除,对投影的那一列进行排序,这样相同的元组就是相邻的了,再采用双指针顺序扫描,消除重复的元组。再一种就是HASH的消除方法,散列使用的过程和连接匹配比较相似,如果后放入的元组属性已经存在散列的HASH桶中,就可以删除重复的元组。(7) 广义笛卡尔积的使用,就是简单的采用嵌套循环的方法,一般笛卡尔积的中间结果会非常的大,所以笛卡尔积是一种代价很高的操作。(8) 查询优化技术。每一种查询方式可以由多种的表示方法,表示的方法不同就会产生不同的效率,所以实际应用中会针对不同的应用进行分析,使得实际的效率达到最高。由于SQL是一种高度的结构划的语言,所以终端的用户一般不会考虑每种语句对实际查询效率的影响,所以,在DBMS中就要有相应的查询优化处理模块。由DBMS做查询优化有很多的好处,一般程序员做优化总是存在局限性,但是DBMS可以做出数百种的选择,并且随着数据库内部的数据的改变,DBMS随时都能针对改变做出新的优化过程来。(9) 优化技术分为,代数优化,物理优化,还有代价估算的优化。代数优化只是改变查询操作的顺序,并不涉及底层的存储方式,是通过等价代换来做到查询优化的。而物理优化是要考虑底层存储方式的,包括数据的分布形式。代价估算优化,就是有多可以选择的方法,至于用哪一种,先进行代价的估算,选择估算结果最小的那一种方式。代数优化:主要就是依据等价变换,利用等价代换,对查询的操作进行一定的先后顺序的修改。(10) 代数优化:代数优化要遵循启发式规则。1)选择操作要尽可能早的执行,可以有效的减小中间结果的产生。2)投影操作和选择操作要尽可能的同时进行,这样就能避免重复的扫描关系3)投影操作和前后的二元操作尽可能的同时进行,减少重复性。4)把选择操作和笛卡尔积进行合并,做成链接操作,减小中间结果的产生。DBMS在进行优化的时候先将查询转化为语法树。输入一个语法树,输出一个优化语法树,首先是分解运算,然后将选择,投影移动到叶子节点部分,合并投影和选择,减少扫描的重复(11) 基于存储路径的优化策略,启发式的贵规则1)对于小的关系直接使用顺序扫描,即使,在这个属性上有相应的索引。2)对于针对主键上的等值查询,可以利用主键上的索引,一般DBMS都会在主键上建立相应的索引,结果最多就是一个3)对于非主键上的等值查询,如果有索引,那么估算一下大概有多少如果=密级的时候才能对数据进行访问。只有许可证级=密级的用户才能对数据进行更新的写入操作。(6) 自主存取控制:主体,是指一个提出要求和请求的实体可以是真正的用户,也可以是进程,作业。客体,是指接受实体的动作的被动受体,客体可以使文件,记录,还有视图。控制策略,主要是指主体对客体发出的动作。自主控制模型主要是用存储矩阵来进行控制,列代表这主体,行代表这客体,行列的交叉元素代表这控制策略。主体按着存储矩阵对客体进行控制,当主体申请某个动作的时候,DBMS就会核查存储矩阵,看看是不是在权限范围内,访问控制矩阵是可以被改变的,定义存储权限的时候称之为授权。授权的精细度成为粒度,粒度越精细则需要的开销越大,所以要根据实际情况对粒度进行控制,防止小号过多的资源,为了方便授权的进行,我们引进了角色,角色是一组权限的集合。我们先创建角色,然后给角色进行授权,最后再吧角色授予给用户。(7) 强制存储控制:和自主控制差不多,也分为主体和客体。在强中控制中安全级别的更改只能有特定的管理员进行修改,一般安全级别一旦定下来也就固定了,安全级别不能用户之间进行授权。(8) 视图机制的控制,视图在一定的程度上保证了数据的安全性,一般对用户进行视图的限制,用户只能在一定的表上进行查看和操作,还可以使视图看起来就像一张表一样,可以限制提供聚集信息。(9) 数据加密,为了防止敏感信息的泄露所以要对数据进行加密处理,一般采用两种策略,一种是替换法,和置换法,替换法是将里面的一些字符进行替换,变成别的字符,置换方法是改变字符的顺序,为了提高加密的破解难度,都是混合使用多次使用以上两种策略。(10) 数据库审计,主要是记录用户对数据库内部数据的操作,分为用户审计,和系统审计,用户审计是在自己建立的表或者视图上建立审计,记录其他人对这个表的所有操作,用户审计一般,表的拥有者就能建立。系统审计是由DBA建立的,是对整个数据库进行监控,一般审计很消耗资源,可以在人为可疑的时候进行数据库的审计工作。数据库完整性(1) 数据完整性约束,包括实体完整性,参照完整性,用户自定义完整性,主要就是为了约束数据库中数据的有效性,正确性,相容性。正确性是指数据的合法,有效性是指数据属于所定义的有效范围,相容性是指同一事实的两个数据应该相同。还有一类是利用触发器进行更加复杂的约束条件,并且可以利用程序的逻辑性多数据库内部的数据进行更加复杂的处理形式。触发器常常用于强制业务规则。(2) 数据的完整性是一种语义概念,是加在数据库中对数据的逻辑进行一种限制的语义概念,在数据库中有DBMS进行语义的检测,完整性约束的对象包括,元组,属性列,关系。(3) 列级约束,列级约束主要是针对,列的数据类型,数据格式,精度,取值范围。元组约束主要是针对一个元组中的不同属性列之间的约束条件。关系约束,主要是针对一个关系中的不同元组之间,和多个关系之间的约束,比如参照关系约束就是一种关系。还有函数约束,统计约束等。(4) 数据库的完整性约束功能是DBMS的基本功能之一,其中由一块叫做完整性子系统对完整进行控制。DBMS对完整性的控制必须提供,完整性的定义,完整性的检测,违约的处理方式(拒绝执行,按照完整性控制策略进行处理)。(5) 关系数据库中,对完整性的方式有默认值,规则,约束,触发器和存储过程。默认值:如果插入的时候没有指定值,那么插入的时候对列进行自动的添加的值。规则:是数据库提供的一种向后兼容的模式,一般单独定义,然后绑定到列上。约束:约束是允许列中存储的值,是通过强制控制机构完成的,优先于默认值,规则,触发器。触发器:是一种复杂的控制方式,用编程的方式实行强制的业务规则和约束。(6) 实体完整性:实体完整性,主要是针对主键的一种约束,因为主键要唯一的区分元组的,所以对主键有唯一性的约束。所以对于主键的约束包括唯一性和非空。对于主键的设定可以通过三种方式进行设定,第一种,在创建表的时候进行列级约束的时候进行说明,第二种就是,创建表的时候进行表级约束的时候进行先打那个,还有一种是利用 ALTER语句中的ADD进行附加,在对属性列进行PRIMARY限制的时候,必须保证已有的数据具有唯一性否则这执行失败,一般为了强制性的限制唯一性,都会在主键的属性列上建立唯一的索引。数据的检查和违约处理,如果对该表进行插入和修改的时候会检查唯一性,和主键的值是否为空,如果不符合就拒绝执行,检查的时候一般采用全表扫描和索引扫描。(7) 参照完整性,参照完整性主要是针对参照表和被参照表进行限制的。参照性约束刻画了不同关系之间的联系,在参照关系中外键要么为空,要么引用被参照关系中的值,利用FOREIGN KEY AND REFERENCE,一般含有外键的表叫做参照表,另一个是被参照表,在参照关系中外键是不是能去控制要看,参照表中外键的属性是不是包含在本表的属性中,要是包含了就不能取空,要是不包含就可以进行取空。(8) 有如下几种情况可能引起参照性的破坏,第一种:对参照表进行插入元组,由于被参照表中并不存在相应的元组,也就代表不存在着相应的实体,这样就破坏了现实的关系。第二种:对参照表中的元组进行修改,修改后的外键属性并不在被参照表中存在。第三种是对被参照关系中进行删除,这样参照关系中还存在着这样的数据。第四种对被参照关系进行修改主键,参照关系中就会造成数据的不一致。对以上问题的解决方案,1在参照关系中插入元组1 受限插入,如果在被参照关系中不存在这样的数据的时候就不允许进行插入。2递归插入,先对被参照关系进行元组的插入,让主键的值和参照关系中的外键的值相同。2在参照关系中进行元组的修改。可以按着先删除再插入。处理的方式和上一种可以一样了。3在被参照关系中进行元组的删除,尽管外键是对相应存储表的一种限制策略,但是还是可以控制主键表中的数据。1级联删除,就是吧参照表中的数据一起删除。2受限删除,只有被参照表中的主键不对应任何被参照表中的数据的时候才能删除。3制空删除,就是删除被参照表中的数据,并且把参照表中引用的数据进行制空处理。4在被参照表修改主键的值,不光要考虑在被参照表中的主键的唯一性和非空性,还要检查在参照表中是不是存在着要被修改的主键值的元组。(9) 用户自定义约束,根据对需求的限制,一般用户会对数据进行一定的自定义的限制,通常包括唯一性,非空性,默认值,取值范围。(10) 触发器,触发器有如下的优点,可以实现复杂的业务规则,可以实现比CHECK更加复杂的数据约束,比较数据修改前后的状态,维护非规范的数据。首先要定义触发器CREAT TRIGGER BEFOR |AFTERON FOR EACH ROW|STATEMENT WHEN 只有表的创建者才有权利在表上定义触发器,表名是触发器要作用的表,当目标表上进行更行,插入,删除等操作的时候触发器就会自动的执行,触发事件是在目标表上执行什么操作的时候才进行触发,触发时间是指在动作钱还是动作后BEFOR就是动作前,AFTER就是动作后,如果触发事件因错误而失败,包括违反约束和语法的错误,触发器就不会执行。触发类型是指元组的触发器还是语句级别的触发。触发条件就是要在什么条件的情况下才会激活触发器的主体。触发动作体就是真正的代码部分,要进行的操作。(11) 触发器的使用。一个表上面可以定义多个触发器,执行顺序是按着,先执行BEFOR在激活SQL语句然后执行AFTER,如果SQL语句违反了约束条件那么AFTER不会执行。当不需要某个触发器的时候可以对触发器进行删除,它所基于的数据不会受到任何的会影响,如果删除了作用表,那么表上的触发器会自动的执行,表的拥有者才拥有删除触发器的权利。(12) 在执行数据控制的过程,会创建两个临时表INSERTED AND DELETED ,INSERTED保存着 新插入的数据和UPDATE后的数据,DELETED保存着DELETE操作中的数据和UPDATE中更新前的数据,这样的临时表方便我们对动作前后的状态进行监控和比较。数据库恢复技术(1) 事物:事物是数据库用户定义的一系列的操作,具有原子性,不可再分,事物是指令的集合,要么全部做完,要么什么都不执行。格式是CREAT TRANSACTIONCOMMITROLLBACK(2) 一个事物一般具有原子性、一致性、隔离性、和持久性。原子性是指事物是数据库操作的逻辑工作单位,是不可再分的。一致性:是指事物执行的结果从一个状态转化为另一个状态的时候保持一致,所谓保持一致性就是在事物提交的时候,保存一致性的结果,当出现掉电,和以一些其他的事情的时候,事物只执行到了一部分的时候,这个时候,数据就具有了不一致的特性,这个时候要进行回滚,撤销所作的所有的动作策略。隔离性:隔离性就是指事物在执行的时候不会影响另一个事物,保持了内部与外部的一种隔离的特性,特别是针对并发执行的时候要保持事物之间不会进行相互的形象,从而导致了数据库的不一致的问题。事物的持久:是指事物一旦完成了进行提交后的结果,数据的修改就是永久有效的结果了,事物是并发控制和恢复技术的基本单位。保证这些问题是保证事物处理的重要的任务。(3) 失败状态部分提交活动状态中止状态提交状态事物分为活动状态:初始化状态,事物执行的时候处于活动状态。部分提交状态:事物执行完毕了最后一条语句,但是数据还是保留在数据缓冲区内部,如果这时候出现系统的故障还是会导致数据的损失。失败状态:还没有打到最后的一条就中止了进入到失败状态,处于局部提交的状态遇到故障也进入到失败状态,处于失败状态很可能也对数据库产生了一定的永久性影响,为了保证事物的原子性,应该进行回滚。提交状态:事物是正常结束的,提交到数据库中,也就是完成COMMIT在日志文件中写入一条记录标识这事物的正常结束。中止状态:也就是夭折状态,这时候数据库已经进行了回滚,回到了原来的状态了,事物的取消分为不同的情况,如果是内部的逻辑错误就直接进行取消的操作,但是如果是由硬件原因引起的,可以选择重新进行。(4) 对于事物状态的转换,从活动事物开始,如果在其中直接出现了问题,那么就直接进入到失败状态,如果正常的结束了最后一条语句,就进入到了部分提交状态,但是数据仍然保存在缓冲区内部,如果系统出现故障,那么还是会进入到失败状态的,如果部分提交状态的时候,数据安全的写入到了存储设备,那事物就完成了,进入到了提交状态,在失败状态进行回滚处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林火灾知识培训课件
- 物业公司薪酬体系实施方案
- 2025年初高中体育与健康课程教师招聘考试运动技能测试模拟题集
- 桥梁监控课件
- 高血压护理业务学习试题及答案
- 《机械员》考试题库含答案(培优b卷)
- 2025年工业节能减排技术专家招聘笔试模拟题详解及备考指南
- 2025年碳足迹评价师中级实操面试题及操作指南
- 2025年碳汇计量评估知识体系梳理与高级模拟题实战训练
- 2025年审计招聘笔试实战模拟题集及解析
- 2025年内江市总工会公开招聘工会社会工作者(14人)笔试模拟试题及答案解析
- 2025云南辅警笔试题目及答案
- 2025四川内江市总工会招聘工会社会工作者14人笔试备考试题及答案解析
- 2025年三支扶陕西试题及答案
- 2025年行政执法证考试必刷题库与答案
- 基孔肯雅热防控知识考试试题含答案
- 低钾血症护理常规业务学习
- 2025年职业指导师(四级)考试模拟试题汇编与模拟试题解析
- 2025年新修订《治安管理处罚法》
- 【政治 云南卷】2025年云南省高考招生统一考试真题政治试卷(含答案)
- 测听讲课的课件
评论
0/150
提交评论