数据库期末总结.docx
《数据库期末总结.docx》由会员分享,可在线阅读,更多相关《数据库期末总结.docx(30页珍藏版)》请在冰豆网上搜索。
数据库期末总结
一基本概念(BasicConcepts)
1、数据库系统开发生命周期(databasesystemdevelopmentlifecycle)
1.Databaseplanning
2.Systemdefinition
3.Requirementscollectionandanalysis
4.Databasedesign
5.DBMSselection(optional)
6.Applicationdesign
7.Prototyping(optional)
8.Implementation
9.Dataconversionandloading
10.Testing
11.Operationalmaintenance.
2、数据库设计的三个主要步骤(threemajorstepsofthedatabasedesign)
1、概念设计
是整个数据库设计的关键,通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型
2、逻辑设计
将概念结构转化为某个DBMS所支持的数据模型,对其进行优化
3、物理设计
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
3、C/S和B/S
c/s客户端/服务器
b/s浏览器/服务器
c/s般适合于软件开发对客户端计算机配置要求比较高
客户端也需要安装软件典型事例:
qq
b/s般适合于网站开发客户端只要安装浏览器完成操作
客户端基本上需要加载对于服务器端配置要求比较高
典型事例:
网站erp系统
Two-TierClient/ServerArchitecture(两层客户机/服务器体系结构):
客户机/服务器结构将应用一分为二,由服务器提供应用(数据)服务,多台客户机进行连接。
1)“Fat”客户端,需要大量的资源在客户端进行高效运行
2)重要的客户端管理开销。
Three-TierClient/ServerArchitecture:
在三层客户机/服务器结构中,由于数据访问是通过功能层进行的,因此客户端不再与数据库直接建立数据连接。
也就是说,建立在数据库服务器上的连接数量将大大减少。
不需要昂贵的硬件,集中维护,修改不影响其他人,将业务逻辑与数据库函数使其容易实现负载平衡。
很自然地映射到Web环境。
4、标识数据项(IdentifytheDataItems)
二SQL
1、查询(Query)
2、安全(Security)
3、索引(Index)
4、视图(View)
三高级ER(AdvancedER)
1、
(1)关系理论(RelationalTheory)
关系模型是最简单也是最直观的数据模型,模型基于表的行和列,表被称作关系,因此使用属于关系模型。
等价项(EquivalentTerms):
Table=Relation
Column=Field=Attribute
Row=Record=Tuple
实体关系:
一对多,多对多
主键:
一个主键唯一地标识表中的每条记录。
唯一,最小限度,非空,不能更新。
外键:
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
根据存储模型划分,数据库类型主要可分为:
1、树状数据库(HierarchicalDatabase)、
2、网状数据库(NetworkDatabase)、
3、关系数据库(RelationalDatabase)、
4、面向对象数据库(Object-orientedDatabase)等。
关系数据库的优点:
1、依赖于逻辑,而不是物理的、相关记录之间的联系
2、使用第四代语言
3、允许高度的数据独立性
(2)概念设计(ConceptualDesign)
构建ERD的5个步骤:
1、实体表示为表
2、确定关系
3、列表字段
4、确定键(主键)
5、确定数据类型
(3)规范化(Normalization)
非规范化设计导致问题:
例:
MEMBERVISIT(userID,password,fistName,LastName,phone,dateTimeIn,dateTimeOut)
1、更新:
当某用户有多条租借记录时,个人基本信息(如password)会被重复插入,当更新该用户的password时,不是所有的password都会被更新。
2、插入:
当某用户没有租借记录时,他的信息就不能插入到数据表中。
3、删除:
若某用户只有一次租借记录,删除该记录时,用户基本信息也会被删除。
第一范式:
无重复的列。
数据库表的每一列都是不可分割的原子数据项。
实体中的某个属性有多个值时,必须拆分为不同的属性。
第二范式:
属性完全依赖于主键。
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
第三范式:
属性不依赖于其它非主属性。
一个表中没有非主键字段决定其他非主键字段。
若有则分成两个表。
BCNF:
若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。
规范化处理:
2、弱实体(WeakEntity)
弱实体:
在现实世界中,有时某些实体对于另一些实体有很强的依赖关系,即一个实体的存在必须以另一实体的存在为前提。
前者就称为“弱实体”,后者称为“强实体”。
比如在人事管理系统中,职工子女的信息就是以职工的存在为前提的,子女实体是弱实体,子女与职工的联系是一种依赖联系。
关联表:
关联表是多对多关系中两个父表的一个子表。
3、派生属性(Derivedattribute)
属性分为:
简单或复合,单值或多值,派生属性。
派生属性:
从一个或一系列相关属性派生出的值,在相同的实体中不是必要的。
例如:
total_salaryas(salary+bonus)
4、递归关系(recursiverelationship)
递归联系是实体集内部实例之间的一种联系,通常形象地称为自反联系。
例如:
在“职工”实体集中存在很多的职工,这些职工之间必须存在一种领导与被领导的关系。
5、复杂关系(complexrelationship)
符合度(Multiplicity)是在一个n元实体关系中其他n-1个值固定时,实体可能的值或范围。
聚集:
聚集是一种抽象,通过它联系被作为高层实体集
实体集A与B以及它们的联系可被看成实体集,并与另一实体集C发生联系
6、ER图中的问题(problemsinanERmodel)
连接陷阱:
误认为不存在联系的两个实体间存在联系,从而通过这种“联系”获得错误的信息。
包括扇形陷阱(fantraps)和深坑陷阱(chasmtraps)。
扇形陷阱(fantraps):
当用模型来表示实体间的联系时,某些特殊实体的实例出现间的通路(pathway)是不明确的。
当一个实体与其他实体间存在俩个或更多的一对多联系时,可能存在扇形陷阱。
深坑陷阱(chasmtraps):
一个模型显示实体间存在关系,但是在实体间通路并不存在。
7、超类型/子类型层次结构(Supertype/SubtypeHierarchies)
超类实体(SupertypeEntity):
一般实体的共同领域。
子类实体(SubtypeEntites):
专业实体的特殊领域。
局部特殊化(PartialSpecialization):
超类型的实例不属于一个子类型。
全体特殊化(TotalSpecialization)超类型的实例必须属于一个子类型。
不相交的规则(Disjointrule):
超类可能属于最多一个子类。
重叠规则(Overlaprule):
超类可能属于多个子类。
四文件组织(FileOrganization)
1、列举计算机上通常使用的物理存储媒介(Listthephysicalstoragemediaavailableonthecomputersyouuseroutinely.)
易失性存储(volatilestorage):
电源关闭时丢失内容。
持久性存储(non-volatilestorage):
关闭电源内容不丢失,包括二级存储和三级存储,
物理媒介:
1、缓存:
最快和最昂贵的形式存储;易失性存储;被计算机系统的硬件管理
2、主存:
快速存取;通常太小(或过于昂贵)来存储整个数据库;易失性存储,如果出现电源故障或系统崩溃主存储器的内容会丢失。
3、闪存:
停电数据不丢失;数据只可以在一个位置写一次,但位置可以抹去重新写入;读取速度大致和主存的一样快;但是写入慢,消除慢;广泛应用于嵌入式设备,如数码相机、手机和USB密钥。
4、磁盘:
数据存储在磁盘;主要是用于数据的长期存储媒介,通常存储整个数据库;数据必须从磁盘移到主存储器访问,在写回到存储;直接访问,可以在磁盘上按任何顺序读取数据,不像磁带;能达到1.5TB存储;断点和系统崩溃不丢失数据。
5、光存储器:
非易失性、从一个旋转的磁盘使用激光读取数据;CD-ROM(640MB)和DVD(4.7to17GB)最广泛格式;蓝光光碟27GB到54GB;WORM(Write-one,read-many)光碟用于档案存储;读和写是慢于磁盘;自动点唱机(Tapejuke-boxes)系统中,有大量的可移动磁盘,几个驱动器,和自动加载/卸载机制可用的磁盘存储大量的数据。
6、磁带:
非易失性,主要用于备份(从磁盘故障恢复),和归档数据;顺序访问,比磁盘慢得多,非常高的性能(40300GB磁带可用);磁带可以从驱动删除,比磁盘存储成本更便宜,但驱动器是昂贵的;磁带自动点唱机(Tapejuke-boxes)能存储大量数据。
存储层次:
主存(primarystorage):
最快的媒介但是不稳定,缓存、主存(cache,mainmemory)。
二级存储(secondarystorage):
下一个水平层次结构,非易失性,适度快速访问时间,也叫联机存储(on-linestorage),闪存、磁盘(flashmemory,magneticdisks)。
三级存储(tertiarystorage):
最低水平层次结构,非易失性,慢速时间,也叫脱机存储(off-linestorage)。
磁带,光存储(magnetictape,opticalstorage)。
2、磁盘的总容量
记录盘面数*每记录盘面的磁道数*每磁道的扇区数*每扇区的字节数
扇区:
扇区是磁盘寻址的最小单位,其大小通常是512字节
3、磁盘的性能指标:
磁盘的容量,存取时间,数据传输速度,可靠性
存取时间(Accesstime):
从发出读或写请求到数据传输开始。
1、寻道时间(Seektime):
将磁头移到柱面的时间:
约2~30ms。
2、旋转等待时间(Rotationallatency):
扇区到磁头下方的时间,约10~20ms。
总时间:
10~40ms
数据传输速度(Data-transferrate):
从磁盘得到或存储数据的速度。
可靠性:
平均失效时间(Meantimetofailure(MTTF)):
磁盘运行平稳没有失败的平均时间。
一般3到5年。
随着磁盘使用年限的增加,MTTF会减少。
4、定长记录和变长记录(Fixed-LengthRecordsvsvariable-LengthRecords)
定长记录:
存储记录i首地址:
n*(i-1),n是每条记录的大小
记录访问简单但是记录可能会穿过块。
修正:
不允许记录穿过块的边界。
删除记录:
所有记录上移一个;最后一个记录移到删除记录位置;不删除记录,将空闲记录加到空闲列表。
变长记录:
槽的标头包括:
记录实体的数量;空闲空间的结尾;每条记录的位置和大小。
记录在文件中的组织方式:
1、堆存储(Heap):
记录可以被存储在文件的任何空闲的位置。
2、连续存储(Sequentia):
存储记录是顺序的,基于每条记录查找关键字的值。
3、哈希存储(Hashing):
用哈希函数计算每条记录的一些属性,结果指定文件记录应该被存放在哪。
4、每个关系的记录可能存储在一个单独的文件中。
五查询处理和查询最优化(QueryProcessingandQueryOptimization)
查询处理的基本步骤:
1、解析和翻译(Parsingandtranslation)
将查询转化为其内部形式,然后翻译成关系代数;解析器检查语法,验证关系。
2、优化分析(Optimization)
3、评估(Evaluation)
查询执行引擎获取查询评估方案,执行方案,返回结果到查询。
RDBMS(关系型数据库干礼系统)查询处理阶段:
1.查询分析
2.查询检查
3.查询优化
4.查询执行
例子:
SelectB,D
FromR,S
WhereR.A=“c”S.E=2R.C=S.C
1、SQL
怎样执行查询:
做笛卡尔积;选择元祖;投影
2、代数表达式(algebraicexpressions)
关系代数表达式可能会有很多等价的表达
每个关系代数操作可以使用几种不同的算法进行评估
带注释的表达式指定的详细的评价策略被称为评估方案(evaluation-plan)
3、代数表达式树(algebraicexpressiontree)
评估整个表达式树的选择:
Materialization(物化执行):
产生一个表达式的结果,他的输入是关系式或已经经过计算的,物化(存储)到磁盘上,重复。
Pipelining(流水线):
传递元祖到父操作即使一个操作已经被执行了。
4、选择操作(SelectionOperation)
1、简单的全表扫描方法
对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元组作为结果输出
适合小表,不适合大表
2、索引(或散列)扫描方法
适合选择条件中的属性上有索引(例如B+树索引或Hash索引)
通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组
排序:
原因:
SQL查询可以指定对输出进行排序
关系运算的某些操作,如连接运算,排序后实现高效
对于可放进内存的关系,使用如快排序之类的技术。
对不能放进内存的关系,使用外排序
第一阶段,建立多个排序的归并段文件
第二阶段,对归并段文件进行归并
5、连接操作(JoinOperation)
几种不同的算法来实现连接(选择基于成本估计):
(1)嵌套循环方法(nestedloop)
(2)块嵌套循环连接
(3)索引嵌套循环连接
(4)排序-合并方法(sort-mergejoin或mergejoin)
(5)HashJoin方法
各种连接策略比较:
1、如果一个连接输入很小(比如不到10行),而另一个连接输入很大而且已在其连接列上创建索引,则索引嵌套循环是最快的连接操作
2、如果两个连接输入很大,并已在二者连接列上排序(连接列上有索引),则合并连接是最快的连接操作
3、哈希连接可以处理很大的、未排序的非索引输入
4、如果两个连接输入都很大,而且这两个输入的大小差不多,则预先排序的合并连接提供的性能与哈希连接相似。
然而,如果两个输入的大小相差很大,则哈希连接操作通常快得多
5、合并连接和哈希连接只能用于等值连接,对于非等值连接,只能用嵌套循环连接
多表连接:
N个表可能的连接种类有N!
个
SQLServer对少于或等于4个的表连接采用验证全部组合的方法,对于超过4个的表连接,以4个表为一组进行验证
6、措施的查询成本(MeasuresofQueryCost)
查询优化(QueryOptimization):
在所有的等价的评估方案中选择成本最低的。
成本(Cost)使用数据库信息的统计信息进行评价。
成本通常是测量作为应答查询的总运行时间。
磁盘访问,CPU,甚至网络通信会影响成本。
通常磁盘访问是主要的成本,估计也相对容易。
方法:
查询(平均查询成本)、读取块(平均读取块成本)、写入块的数量(平均写入块成本)。
写入块的成本大于读取块的成本,数据在写入后会被回读保证写入是成功的。
tT–传输一个块的时间
tS–一次查询的时间
b个块的传输和S次的查询:
b*tT+S*tS(忽略cpu成本,真正的系统考虑CPU成本)
一些算法通过使用额外的缓冲区空间可以减少磁盘IO,实际可用内存缓冲量取决于其他并发查询和操作系统进程,只知道在执行时才能知道。
所需的数据可能已被缓存,避免磁盘I/O,但很难考虑成本估算。
7、最优方案(optimumplan)
关系查询优化是影响RDBMS性能的关键因素。
查询优化的总目标:
选择有效的策略
求得给定关系表达式的值
使得查询代价最小(实际上是较小)
实际系统的查询优化步骤:
1.将查询转换成某种内部表示,通常是语法树
2.根据一定的等价变换规则把语法树转换成标准(优化)形式
3.选择低层的操作算法
对于语法树中的每一个操作
计算各种执行算法的执行代价
选择代价小的执行算法
4.生成查询计划(查询执行方案)
查询计划是由一系列内部操作组成的。
代数优化策略:
通过对关系代数表达式的等价变换来提高查询效率
关系代数表达式的等价:
指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
两个关系表达式E1和E2是等价的,可记为E1≡E2
代数优化改变查询语句中操作的次序和组合,不涉及底层的存取路径物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划。
选择的方法:
基于规则的启发式优化
基于代价估算的优化
两者结合的优化方法
8、典型的启发式规则
典型的启发式规则:
1.选择运算应尽可能先做。
在优化策略中这是最重要、最基本的一条
2.把投影运算和选择运算同时进行
如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系
3.把投影同其前或其后的双目运算结合起来
4.把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算
5.找出公共子表达式
如果这种重复出现的子表达式的结果不是很大的关系并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算的
当查询的是视图时,定义视图的表达式就是公共子表达式的情况
6.在执行连接操作前对关系适当进行预处理
按连接属性排序
在连接属性上建立索引
六索引(Indexing)
1、主索引,聚类索引,非聚类索引,次索引(primaryindex;clusteringindex;non-clusteringindex;secondaryindex)
索引机制加速访问所需数据。
主索引/聚类索引:
在一个连续的有序文件中,搜索键指定文件的索引。
主索引的搜索键通常但不一定是主键。
该索引中键值的逻辑顺序决定了表中相应行的物理顺序。
聚集索引确定表中数据的物理顺序。
聚集索引类似于电话簿,按姓氏排列数据。
由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。
但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
次索引/非聚类索引:
搜索键指定的顺序不同与文件的顺序的索引。
一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
汉语字典的正文本身就是一个聚集索引。
索引序列文件(Index-sequentialfile):
具有主索引的顺序文件。
2、稠密索引和稀疏索引(DenseindexvsSparseIndex)
稠密索引:
索引记录每条搜索键在文件中的值。
稀疏索引:
索引记录部分搜索键的值。
和稠密索引相比,插入和删除占用更少的空间和维护开销,定位记录一般比稠密索引慢
权衡(Sparsevs.DenseTradeoff):
稀疏索引:
每条记录更少的索引空间
可以保存更多的索引在内存上
稠密索引:
不需要访问文件就能知道任何记录是否存在
稀疏索引适用于插入,稠密索引需要次索引。
3、B+树索引,插入删除查询(B+-TreeIndex(insert;delete;query))
B+-TreeInsertion:
B+-Treebeforeandafterinsertionof“Lamport”
B+-TreeDeletion:
Beforeandafterdeleting“Srinivasan”
Deleting“Srinivasan”causesmergingofunder-fullleaves
4、哈希(Hashing)
哈希索引组织搜索键,与它们相关的记录指针,到一个散列文件结构。
严格地说,哈希索引总是次索引。
七事务—并发和恢复(Transaction—ConcurrencyandRecovery)
1、事务的ACID属性(ACIDpropertiesofaTransaction)
事务(Transaction)是DBMS的单个逻辑工作单元,一个事务内的所有语句被作为一个整体执行。
在事务的执行过程中,如果遇到错误,则可以回退事务,取消该事务所作的全部改变,从而保证数据库数据的一致性和可恢复性。
即一个事务要么其中的语句全部正确执行,要么全部语句不起作用。
原子性(Atomicity):
一个事务中的所有操作要么全部成功,要么全部失败。
原子性由恢复机制实现。
一致性(Consistency):
事务完成后,所有数据处于应有的状态,所有内部结构正确,能够准确反映事务所作的工作。
基于隔离性实现。
隔离性(Isolation):
一个事务不会干扰另一个事务的进程,事务交叉调度执行的结果与串行调度执行的结果是一致的。
隔离性由并发控制机制实现。
持久性(Durability):
事务提交后,对数据库的影响是持久的,即不会因为系统故障影响事务的持久性。
持久性由恢复机制实现。
2、隔离级别(IsolationLevel—serializable,repeatableread,readcommitted,readuncommitted)
serializable:
一个调度的执行必须等价于一个串行调度的结果
repeatableread:
只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其它事务不能对该记录进行更新
readcommitted:
只允许读取已提交的记录,但不要求可重复读(SQLServer默认级别)。
readuncommitted:
允许读取未提交的记录
也称为读未提交(ReadUncommitted):
允许脏读取,但不允许更新丢失。
如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。
该隔离级别可以通过“排他写锁”实现。
也称为读提交(ReadCommitted):
允许不可重复读取,但不允许脏读取。
这可以通过“瞬间共享读锁”和“排他写锁”实现。
读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访