概念
- 简称
简写 | 英语 | 实义 |
---|---|---|
DB | Database | 数据库 |
DBMS | Database Management System | 数据库管理系统 |
DBAS | Database Application System | 数据库应用系统 |
DBA | Database Administrator | 数据库管理员 |
DBO | Database Owner | 数据库所有者 |
DCL | Data Control Language | 数据库控制语言 |
DDL | Data Definition Language | 数据库模式定义语言 |
DFD | Data Flow Diagram | 数据流图 |
DSS | Decision Support System | 决策支持系统(分析型数据) |
CPU | Central Processing Unit | 中央处理器 |
- INT
1 bytes = 8 bit
当符号位为0时,00000000到01111111对应了数轴上从0到127这些数字;
当符号位为1时,10000000到11111111对应了数轴上从-128到-1这些数字。
FLOAT
float(10,2)
10代表整数部分和小数部分加起来总共10位,2代表有两位小数
float:占4个字节
double: 占8个字节
VARCHAR(M)
M代表的是字符数。
eg: M=10,存10个汉字或者存10个英文字母。
数据模型 包括数据结构、数据操作和完整性约束三部分。
需求分析阶段
性能指标
①数据操作响应时间,或数据访问响应时间;
②系统吞吐量,即指系统在单位时间内可以完成的数据库事务或查询的数量;
③允许并发访问最大用户数;
④每TPS(Price per TPS)代价值。(用于衡量系统性价(性能价格)比的指标)
TPS:表达系统处理能力的性能指标,每秒处理的消息数(Transaction Per Second)。
数据库完整性约束条件的作用对象分为列、元组和关系三种级别。
- 数据库应用系统设计(四个层次)
①表示层;
②业务逻辑层;
③数据访问层;
④数据持久层(物理设计阶段,包括索引)。
内容:
DBAS体系结构
软硬件选型和配置设计
应用软件总体设计
业务规则初步设计
数据库应用系统设计包括概念设计、逻辑设计、物理设计3个步骤。
逻辑结构设计阶段
SQL Server中有五种约束类型,分别是主键约束、外键约束、唯一性约束、缺省约束和检查约束。物理结构设计阶段
磁盘存储系统: RAID10 比 RAID5 在写数据上更稳定、速度更快。
Raid5:需要 3 块硬盘,并把数据和相对应的奇偶校验信息存储到组成raid5的各个磁盘上。其中任意N-1块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此可用空间为N-1。
Raid10:需要 4 块硬盘,存储容量的利用 50%。
为了提高系统的性能,应该根据应用情况将数据的易变部分和稳定部分、经常存取部分和存取频率较低的部分分开存放。
将关系模式转换为具体DBMS平台支持的关系表。
数据库物理设计并不包括文件和数据库的具体实现细节。
如果数据库中的一个基本表中的数据量很少,且插入、删除、更新等操作频繁,该基本表最佳采用的文件结构是堆文件(无序文件) 。在堆文件中,记录随机地存储在文件物理空间中,新插入的记录存储在文件的末尾。
- 数据库实施阶段
- 数据库的运行和维护阶段
数据库管理员
数据库空间使用情况;
数据库缓冲区命中率情况;
数据库中索引使用情况。
操作系统管理员
数据库服务器网络是否通畅。
内容
①数据库的转储和恢复;
②数据库安全性、完整性控制;
③数据库性能的检测和改善;
④数据库的重组和重构。
数据库维护过程中,管理员应定期对数据库进行重组,即对数据库进行整理回收碎块,重新安排数据的存储,重建索引等操作。
- 数据库性能调优
数据库性能优化中,存储优化包括建立物化视图和聚集。
物化(索引)视图不是在使用时才读取基本表,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了读取速度。
现阶段数据库性能优化一般以数据库本身的优化为主要调优手段;
当数据库服务器磁盘IO出现瓶颈时,可以考虑使用高速磁盘存储常用数据,低速磁盘存储不常用数据。
服务器性能调优
(1)表结构优化:重新优化数据库设计结构,数据库逻辑设计的规范化;设计主键和外键;设计合适大小的字段。把数据、日志、索引放到不同的I/O设备上,增加读取速度,数据量(尺寸)越大,提高I/O越重要。把I/O操作分散到不同的物理硬盘,提高并发能力。I/O吞吐量小,形成瓶颈效应。
(2)硬件优化:硬盘RAID5、RAID10(基于硬件的RAID能够提供更佳的性能),用以提高数据库响应速度;增加服务器 CPU(计算能力)个数;扩大服务器的内存。
(3)索引优化:
对经常作为条件查询的列设计索引,查询经常用到的列上建立非聚簇索引;
在频繁进行范围查询、排序(ORDER BY)、分组(GROUP BY)的列上 建立聚簇索引;
有频繁进行删除、插入操作的表不要建立过多的索引。
(4)采用视图:合理使用视图和分区视图,在需要更新和删除操作不多、查询操作频繁的表上建立索引视图。
(5)SQL语句优化:选择运算应尽可能先做,并在对同一个表进行多个选择运算时,选择影响较大的语句放在前面,较弱的选择条件写在后面,这样就可以先根据较严格的条件得出数据较小的 信息,再在这些信息中根据后面较弱的条件得到满足条件的信息;
对查询进行优化,应尽量避免全表扫描;
应避免使用相关子查询。把子查询转换成联结来实现;字段提取按照"需多少,提多少"的原则,避免"SELECT * "。"SELECT * "需要数据库返回相应表的所有列信息,这对于一个列较多的表无疑是一项费时的操作;尽量避免在 where 子句中使用!=或<>操作符;
尽量避免使用游标,因为游标的效率较差;
采用存储过程,使用存储过程提高数据处理速度。
- 数据库的重构
数据库的重构需要在原来的数据库设计的基础上做适当的扩充或修改,也尽量避免应用程序的改动。
tempdb 是SQL Server的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。
增加冗余列指的是在多个表中添加相同的列,这样虽然增加了数据库服务器存储的负担,但可以减少查询过程中的JOIN操作,而非UNION(行级)操作。
在IDEF1X数据建模方法中,直角矩形框用于表示独立实体集,圆角矩形框用于表示从属实体集。
UML
- UML语义的四层建模概念框架分别是:元元模型层、元模型层、模型层和用户模型层 。
- 在UML中,聚集是一种特殊形式的关联,它表示类之间是整体与部分的关系。
UML九种图概述(活用组队撞累邪布什)
类图
组合菱形指向组合对象。
组合是部分与整体共存,如果整体不存在,部分也会消失;
聚合关系是整体与部分的关系,且部分可以离开整体而单独存在。
协作图(通信图)(交互图)
表达对象之间的联系以及对象间发送和接收消息的图。
顺序图/时序图 主要用于描述系统内对象之间的消息发送和接收序列。它有两个坐标轴:纵向表示时间的持续过程,横向表示对象,每一个对象用矩形框表示,纵向的虚线表示对象在序列中的执行情况。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。
活动图:用于描述系统、用例和程序模块中逻辑流程的先后执行次序,并行次序。(程序模块)
用例图
- 用例模型由 用例、系统和角色 三部分组成,是外部用户所能观察到的系统功能的模型图。(角色)
- 用例图用于描述系统与外部系统及用户之间的交互。
- 用例图属于用例视图,描述系统功能。
- 用例之间的关系包括扩展、使用和组合三种。
行为视图包括顺序图、交互图和状态图,描述系统的活动。
- 数据流图(Data Flow Diagram) 是便于用户理解系统数据流程的图形表示。
四种基本元素构成:它们是数据流、处理、数据存储和外部项。
- DFD建模方法的核心是数据流,它能精确地在逻辑上描述系统的功能、输入、输出和数据存储等。
- 数据流图是系统逻辑模型的重要组成部分,具备抽象性及概括性。
- DFD图采用自顶向下逐步细化的结构化分析方法。
数据字典 是对系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果,通常包括 数据项、数据结构、数据流、数据存储、处理过程 5个部分。
关系数据语言(非过程化的集合操作语言)
- 关系代数语言
- 关系演算语言
- 兼具两者双重特点的语言
- 连接查询操作语句
- 等值连接和非等值连接操作
- 自身连接操作
- 外部连接操作
- 函数依赖
- 完全依赖(Full)
- 部分依赖(Part)
对模式进行分解时,既要保证分解具有无损连接性,又要保证分解保持函数依赖。
- 无损连接:指分解的若干连接重组时可以精确恢复到原来的数据表,数据记录既没有增加也没有减少;
- 保持函数依赖:指原关系模式含有的属性之间的隐含关系在分解后不能丢失。
-
关系范式
1NF:列不可分,每一列都是不可分割的基本数据项;
2NF:1NF基础上,非主属性完全依赖于码,不可部分依赖;
3NF:2NF基础上,非主键列必须直接依赖于主键,不能传递依赖;
BCNF:3NF基础上,主键列之间不存在依赖,即不存在关键字段决定关键字段的情况。 事务概要设计阶段任务:把事务中对数据库数据的查询、插入、删除、修改操作用与具体DBMS平台无关的两个元操作read、write抽象表示。
事务特性
- 原子性:事务是数据库的逻辑工作单位;
- 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态;
- 隔离性:一个事务的执行不能被其他事务干扰,并发执行的各项事务之间不能互相干扰;
- 持续性/永久性:事务一旦提交,它对数据库中数据的改变为永久性。
多个事务的调度必须保持每个事务的操作在事务中的执行顺序不变。
- 事务并发操作带来的数据不一致问题
主要原因:没有保证事务的隔离性。
1 .丢失修改: T1 和 T2 读入同一数据并进行修改,T2 结果覆盖 T1 结果导致丢失;
2 .不可重复读:
T1 读取某一数据后, T2 对其进行修改。校验出错;
T1 读取某一数据记录后,T2 删除或插入记录。再次读取出错。
3 .读“脏”数据
T1 修改某一数据后撤销,T2 读取的数据为修改的错误数据。
- 锁的类型
排他锁 / 写锁 / 独占锁(X):若事务T对数据对象A加X,则只允许T读取和修改A;其他事务不能读取和修改A,且无法对A加任何类型的锁;排他锁则限制了数据的共享,降低了并发度。
共享锁 / 读锁(S):若事务T对数据对象A加S,其他事务只能再对A加S,不能加X。
- 封锁协议 P269
一级封锁协议:T 在修改数据前必须对其加 X,结束释放。(丢失修改问题)
二级封锁协议:T 在修改数据前必须对其加 X,结束释放;对要读取的数据必须加 S,结束释放 。(+读“脏”数据问题)
三级封锁协议:T 在修改数据前必须对其加 X,对读取的数据必须加 S,结束才全部释放 。(+不可重复读问题)
不同级别的封锁协议P269
- 封锁问题解决方法
预防死锁的方法
- 一次封锁法
- 顺序封锁法:事务按同一顺序访问资源(应用程序设计过程)
- 将大事务切分成若干个小事务(应用程序设计过程)
- 使用绑定连接(应用程序设计过程)
保证并发调度可串行性的封锁协议:两段锁协议
一次封锁法遵守两段锁协议;遵守两段锁协议的事务可能发生死锁。
- 数据库管理系统一般通过周期性检查 事务等待图 来实现死锁检测。(检测死锁:包括超时法)
事务等待图是一个有向图G=(T, U),T为结点的集合,每个结点表示正在运行的事务;U为边的集合,每条边表示事务等待的情况。若事务T1等待事务T2,则T1、T2之间有一条有向边,从 T1 指向 T2。如果发现图中存在回路,则表示系统中出现了死锁。
- 故障的种类
1 . 事务内部故障(软)
eg(非预期故障):运算溢出、并发事务内部死锁、被选中撤销、违反了某些完整性限制
预期的事务内部故障是指可以通过事务程序本身发现的。
恢复操作:事务撤销(UNDO)
2 . 系统故障 (软)
指造成系统停止运转的任何事件,从而使得系统必须重新启动。
eg:硬件(CPU)故障、操作系统故障、DBMS代码错误、数据库服务器出错、停电
- 故障时,一些未完成的事务部分结果已送入物理数据库。强行撤销(UNDO)所有未完成任务;
- 故障时,有些已完成事务部分留在缓冲区。除 UNDO 外,执行重做任务(REDO)。
3 . 介质故障(硬故障)
指物理设备、外存故障。
eg:磁盘损坏、磁头碰撞、瞬时磁场干扰
4 . 计算机病毒
5 . 用户操作错误
SQL Server配置管理器中服务介绍
分布式数据库系统
分布式数据库最基本的三个特征是:非集中式管理、高可用性、本地自治。
分布式数据库系统由局部数据库管理系统 、全局数据库管理系统GDBMS、全局数据字典、通信管理四部分组成。
特点
- 物理分布性:数据分别存储在不同的计算机
- 逻辑相关性
- 区域自治性
- 数据节点之间通过通信网络进行联系
数据分布策略
- 集中式:所有数据均安排在一个场地上;(全局)
- 分割式:全局数据有且只有一份,它们被分割成若干片段,每个片段被分配在一个特定场地上;(部分)
- (全)复制式:在每个站点上都有全局数据的复制样本,数据的冗余性最大;
- 混合式:全局数据被分为若干个数据子集,每个子集被安排在一个或多个不同的场地上,但是每个场地未必保存所有数据。
分布透明性
分布式数据库中的分布透明性包括分片透明性、位置透明性、局部数据模型透明性,其中分片透明性是最高层次的透明性。
- 分片透明性:用户或应用程序只对全局关系进行操作而不必考虑关系分片的情况,位于全局概念模型和分片模型之间;(1)
- 位置透明性:用户或应用程序只需了解数据分片情况,而不必了解片段的存储场地。(2)
- 局部数据模型透明性:用户或用户程序必须了解全局数据的分片情况,还需了解各片断的副本复制情况及各片断和它们副本的场地位置分配情况,不必了解局部场地上使用的是哪种数据模型。
分片模式是描述每个数据片断以及全局关系到片段的映像;
分配模式是描述各片断到物理存放场地的映像。
分布式数据库分片类型:
① 水平分片:按一定的条件把全局关系的所有元组划分成若干不相交的子集,每个子集都是关系的一个片段。
② 垂直分片:把一个全局关系的属性集分成若干子集,并在这些子集上作投影运算,每个投影称为垂直分片。
③ 导出分片:又称为导出水平分片,即水平分片的条件不是本关系属性的条件,而是其他关系属性的条件。
④ 混合分片:以上三种方法的混合。
对于一个全局关系中的任意数据,不允许其不属于任何一个片段,也不允许某些数据同时属于不同的片段。
在分布式数据库中,采用半连接操作可以减少场地之间的数据传输量。
- 数据在网络中传输时,则是以整个关系(也可以是片段)传输,显然这是一种冗余的方法。在一个关系传输到另一场地后,并非每个数据都参与连接操作,因此,不参与连接的数据或无用的数据不必在网络中来回传输。采用半连接操作即可在网络中只传输参与连接的数据。
- 位置透明性 :不必知道它所用的数据在什么场地
- 复制透明性:数据重复存放在不同的场地
Google的云数据库是一个分布式的结构化数据存储系统,称为 Bigtable。
- 游标
游标机制用于解决SQL查询结果为集合而主语言处理方式为记录方式的矛盾。
- 游标经常会和全局变量 @@FETCH_STATUS (fetch 取得)与 WHILE循环 来共同使用,以达到遍历游标所在数据集的目的。@@FETCH_STATUS 为用于判断游标数据提取状态的全局变量。
- 在执行一条fetch语句后,必须在对另一游标执行另一fetch语句前测试。
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。
使用游标会占用较多的系统资源,尤其对于大规模并发量的情况下,很容易使得系统资源耗尽而崩溃,而使用临时表能够加速查询。
- 分割表
水平分割表:
当多个过程频繁访问数据表的不同行时,水平分割表,并消除新表中的冗余数据列;
当主要过程要重复访问部分行时,最好将被重复访问的这些行单独形成子集表(冗余储存)。
垂直分割表:
垂直分割表可以达到最大化利用Cache(快速缓冲贮存区)的目的。
- ADO(ActiveX Data Objects)对象模型中RecordSet对象常用方法:
① AddNew,创建一条新记录;
② Delete,删除一条记录或一组记录;
③ Cancel,撤销一次执行;
④ MoveNext,把记录指针移动到下一条记录;
⑤ Close,关闭一个 RecordSet。
在SQL Server 2008中,主要数据文件必须建立在主(PRIMARY)文件组中。
云计算包含互联网上的应用服务及在数据中心提供这些服务的软硬件设施,通常包括软件即服务、平台即服务、基础设施即服务。
SaaS是Software as a Service(软件即服务)的简称。
将经常一起使用的多个表中的数据行按照其公共列值存储在一起,这种表存储方法为聚集。
在数据仓库的导出数据或物化视图(实视图)的维护策略中,只在用户查询时发现数据已经过期才进行更新的策略称为延时维护策略。