计算机三级数据库技术

第一章 数据库应用系统开发方法

数据库应用系统生命周期

软件工程与软件开发方法

瀑布模型 快速原型模型 螺旋模型

DBAS生命周期

DBAS生命周期:项目规划、需求分析、系统设计、实现与部署、运行与维护

规划与分析

可行性分析:经济可行性、技术可行性、操作可行性、开发方案选择

需求分析

数据字典:数据项、数据结构、数据流、数据存储和处理

功能需求分析:数据处理需求分析(事务规范、数据流图)、业务规则需求分析(应用程序)

性能需求分析:操作响应时间、系统吞吐量(单位时间内完成的数据库事务数量)、允许并发访问最大用户、每TPS代价值

其他需求分析:存储需求、安全性需求、备份和恢复需求

系统设计

概念设计:数据库概念模型设计(需求规格说明书)、系统总体设计

逻辑设计:数据库逻辑结构设计、应用程序概要设计、数据库事务概要设计(read和write)

物理设计:数据库物理结构设计、数据库事务详细设计、应用程序详细设计

实现与部署

建立数据库结构、数据加载、事务和应用程序的编码及调试、系统集成,测试与试运行

系统部署

运行管理与维护

日常维护、监控与分析、性能优化调整、系统进化

三层浏览器/服务器结构:浏览器服务器、应用服务器(业务规则)、数据库服务器

第二 章需求分析

需求分析

需求获取的方法

面谈 实地观察 问卷调差 查阅资料

需求分析过程

标识问题 建立需求模型 描述需求 确认需求

需求分析方法

DFD需求建模方法

计算机三级数据库技术_第1张图片

 

IDEF0需求建模方法

IDEFO图基本元素是矩形和箭头矩形方框代表功能活动

计算机三级数据库技术_第2张图片

ML用例模型

UML方法采用面向对象思想建模,由用例图组成。

用例图由系统、角色、用例三种模型元素及关系构成。

第三章 数据库结构设计

数据库概念设计

明确建模目标  定义实体集    定义联系

建立信息模型  确定实体集属性    对信息模型进行集成与优化

IDEF1X建模方法

IDEF1X侧重分析、抽象和概括应用领域中的数据需求。

独立实体集:一个实体集的每一个实例都能被唯一地标识而不决定于它与其他是集体的联系

从属实体集:实体集的一个实例的唯一标识依赖于该实体集与其他实体集联系

计算机三级数据库技术_第3张图片

 

标定型联系:子女实体集中的每个实例都是由它与双亲的联系而确定的  

(学生,课程) 成绩--->完全函数依赖--->n:1

非标定型联系:子女实体集中的每一个实例都是被唯一地确认而无需了解与之相联系的双亲实体集的实例   (系) 学生--->1:n

分类联系:两个或多个实体集之间的联系,每一个实例都恰好与一个且仅一个分类实体集的一个实例相联系 (月薪职工,计时职工) 职工

非确定联系(多对多):两个实体集之间,任一实体集的一个实例都将对应另一实体集的0个、1个或多个实例;可通过引入第三个实体集将非确定关系转化为确定关系

学生(课程)--->m:n

ER建模方法

实体或实例:客观存在并可互相区分的事务

实体集:同型实体的集合

属性:实体所具有的某一个特性,一个实体可由若干个属性刻画,每个属性的取值范围为域

:实体集中唯一标识每一个实体的属性或实体组合,一个实体集中任意两个实体在主码上的取值不能相同

联系:描述实体之间的相互关系,可以有属性;一对一,一对多,多对多

ER图表示方法

实体集:矩形框

联系:菱形框

属性:椭圆或圆角矩形   

数据库逻辑设计

函数依赖

R(U,D,DOM,F)

R:关系名

U:组成该关系的属性名集合

D:属性组U中的域

DOM:属性到域的映射

F:属性组U上的一组数据依赖

R 当且仅当U上的一关系R满足

数据依赖:关系内部属性与属性之间的一种约束关系

完整性约束的表现形式: X ---> Y  

多值依赖:函数是唯一确定的关系,多值依赖却不能唯一确定

非平凡函数依赖:如果 x-->y ,且y ⊈x

平凡函数依赖:如果x-->y,且y⊆x

:SC(Sno,Cno,Grade)

非平凡函数依赖:(Sno,Cno)-->Grade

平凡函数依赖:(Sno,Cno)-->Sno , (Sno,Cno)-->Cno

f:完全函数依赖  p:部分函数依赖

部分函数依赖:如果x-->y ,但y不完全依赖于x,记作

完全函数依赖:如果x-->y,且对于任何X’ ⊂ x都有,则称y完全依赖于x,记作X--\-->Y

 

推论:如果,且x是单个属性,则

:选课(学号,课程号,课程名,成绩)

完全函数依赖:(学号,课程名)

部分函数依赖:(学号,课程号

传递函数依赖:如果x--->y,y--->z,且y ⊈x,y--\-->x,则称z传递函数依赖于x,记作

例:学生(学号,姓名,系名,系主任)

传递:

 

关系模式规范化分解

数据规范化:把一个低一级的关系模式分解为高一级关系的过程

范式:关系模式满足的约束条件

1NF:如果关系模式R,其所有属性都是不可再分的基本数据项。

 数据库表中的字段都是单一的属性,不可再分

2NF:如果关系模式R∈1NF,且每个非主属性完全函数依赖于主码

 实体的属性完全依赖于主码

3NF:如果关系模式R为2NF,并且R中的每个非主属性不传递依赖于R的主码,R∈3NF

关系模式规范化步骤

1NF

消除非主属性对码的部份函数依赖

2NF

消除非主属性对码的传递函数依赖

3NF

消除主属性对码的部分和传递函数依赖

BCNF

示例:设关系模式R(学号,课程号,成绩,教师姓名,教师地址)规定:每个学生每学一门课只有一个成绩,每门课只有一个教师任教,每个教师只有一个地址,且教师没有同名同姓。

要求:

  1. 写出R的基本函数依赖

(学号,课程号) →成绩     课程号→教师姓名 教师姓名→教师地址

  1. 则将R分解为2NF

R1 (学号,课程号,成绩)

R2 (课程号,教师姓名,教师地址)

(3)将R分解为3NF

R3 (课程号,教师姓名)

R4 (教师姓名,教师地址)

将ER图转化为关系模型

①一个实体型转换为一个关系模式

  实体的属性就是关系的属性,实体的主码就是关系的主码。

计算机三级数据库技术_第4张图片

 

学生(学号,姓名,年龄,性别)

②一个1:1联系转换为一个关系模式

计算机三级数据库技术_第5张图片

职工(职工号,姓名,年龄)

产品(产品号,产品名,价格,职工号)

③1:n联系转换为关系模式

计算机三级数据库技术_第6张图片

 

仓库(仓库号,地点,面积)

产品(产品号,产品名,价格,仓库号,数量)

④m:n联系

计算机三级数据库技术_第7张图片

学生(学号,姓名,年龄,性别)

课程(课程号,课程名,学时数)

选修(学号课程号,成绩)

⑤三个及以上实体间联系

计算机三级数据库技术_第8张图片

 

供应商(供应商号,供应商名,地址)

零件(零件号,零件名,单价)

产品(产品号,产品名,型号)

供应(供应商号件号产品号,数量)

⑥同一实体集联系

1:1(一对一)

1:n(一对多)

m:n(多对多)

(1)将同实体集1:n联系转换为关系模型

计算机三级数据库技术_第9张图片

 

职工(职工号,姓名,年龄,领导工号)

(2)将同实体集m:n联系转换为关系模型

计算机三级数据库技术_第10张图片

 

零件(零件号,名称,价格)

组装(组装件号,零件号,数量)

组装件号为组装后的组合零件号。

数据库物理设计

物理设计概述

物理数据库设计是设计数据库的存储结构和物理实现方法

数据库的物理结构

文件组织、文件结构、文件存取、索引技术

文件:数据库中的一个基本表中的数据量很少,并且插入、删除、更新等非常频繁

顺序文件:基于查找码的顺序访问,快速的二分查找

散列文件:用户查询基于散列域值等值匹配,访问顺序随机

索引

索引技术的关键:建立记录域取值到记录的物理地址间的映射关系

有序索引:数据文件和索引文件(索引记录或索引项的集合)是有序索引技术中的两个主体

散列索引:哈希(Hash)索引机制,利用散列函数实现记录域取值到记录物理地址间的直接映射关系。

聚集(CLUSTERED)索引一个数据文件只可建立一个聚集索引,但可建立多个非聚集索引

稠密索引数据文件中每个查找码都对应索引记录

稀疏索引部分查找码的值对应索引记录

主索引主码属性集上建立的索引

辅索引:非主属性上建立的索引

唯一(UNIQUE)索引:索引列不包含重复值

单层索引:线性索引,每个索引项顺序排列直接指向数据文件中的数据记录

多层索引:大数据量文件中的采用多层树型(B,B+树)索引快速定位

数据库物理设计

数据库逻辑模式描述

面向目标数据库描述基本表和视图、设计基本表业务规则

文件组织与存取设计

数据分布设计

特征划分、时间地点划分、数据划分(水平 垂直)

确定系统配置

提供系统软硬件平台的初始配置信息

物理模式评估

对数据库物理设计结果从时间、空间、维护、代价等方面进行评估

第四章 数据库应用系统功能设计与实施

软件体系结构与设计过程

软件体系结构

构件,连接件,约束

风格类型:分层体系结构、模型-视图-控制器(MVC)体系结构、客户端/服务器体系结构。

软件设计过程

软件开发由设计、实现和测试三个环节组成,设计包括概要设计和详细设计。

原则:软件结构模块化、信息隐藏、抽象、逐步求精。

DBAS总体设计

DBAS体系结构设计

客户/服务器体系结构(C/S) 浏览器/服务器体系结构(B/S)

DBAS软件总体设计

模块结构图:模块、调用、数据、控制、转接。

软硬件选型与配置设计

考虑因素:数据规模、系统性能、安全可靠性、用户需求、项目预算情况。

业务规划初步设计

从系统的角度,规划DBAS的业务流程,使之符合客户的实际业务需要。

DBAS功能概要设计

将DBAS应用软件细化为模块/子模块,组成应用软件的系统-子系统-模块-子模块层次结构,并从结构、行为、数据三方面进行设计。

表示层概要设计

人机界面设计,设计原则:‘自主控制’;反馈及时,上下感知;容错与恢复;界面常规;输入灵活;界面简洁交互及时

业务逻辑层概要设计

设计原则:高内聚低(松)耦合,即构件单一原则;构件独立功能;接口简单明确;构件间关系简单,过于复杂,就细化,分解。

设计内容:结构,行为,数据,接口,故障处理、安全设计,系统维护和保障等(存储过程)

数据访问层概要设计

任务:针对DBAS的数据处理需求设计用于操作数据库的各类事务。

事务概要设计核心在于辨识和设计事务自身处理逻辑,注重流程,不考虑与平台相关、具体操作方法和事务实现机制。

一个完整的事务概要设计包括事务名称、访问的关系表及其数据项、事务逻辑(事务描述)、事务用户(使用、启动、调用该事务的软件模块和系统)。

事务:事务是访问并可能更新数据库中各种数据项的一个程序执行单元,事务的特性ACID。

原子性:一个不可分割的工作单位。

要么做,要么不做

一致性:从一个一致性状态变到另一个一致性状态

如果一个事务执行失败,则已做过的更新被恢复原状,像整个事务从未执行

隔离性:执行不能被其他事务干扰。

一个事务执行过程中,正在访问的数据被其他事务修改,导致处理结果不正确

持久性:永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

某系统运行过程异常,已提交事务所影响的数据未能正确写入磁盘且无法恢复

数据持久层概要设计

负责保存和管理应用系统数据

DBAS功能详细设计

表示层详细设计

人机界面采用原型迭代法合适,三个步骤:

(1)初步设计:设计人机交互命令系统并优化。(总体设计)

(2)用户界面细节设计:如组织形式、风格、彩色,操作方式。(概要设计)

(3)原型设计与改进:(详细设计)

业务逻辑层详细设计

设计各模块内部处理流程和算法、具体数据结构、对外详细接口等。

应用系统安全构架设计

数据安全设计

安全性保护

用户身份鉴别、权限控制、视图机制

完整性保护

设置完整性检查,作用于列(类型、范围、精度、排序)、元组(属性)、关系(集合)

的约束:对其值的类型、范围、精度、排序等约束

元组的约束:对记录中各个属性之间的联系约束

关系的约束:对若干个记录之间(一个关系的各个元组之间)、关系集   合以及之间联系的约束

并发性控制

封锁技术:排它锁(写锁X),共享锁(读锁S)

避免死锁原则:同一顺序访问资源、避免事务交互性、小事务缩短长度和时间、记录级别锁(行锁)、绑定连接

加锁协议规定了事务的加锁时间,持锁时间和释放锁时间

三级加锁协议可以完全保护并发数据事务的一致性

由于死锁导致事务回滚属于数据库故障的事务内部故障

两阶段的加锁协议可以保证事务调度的可串行性

为避免活锁现象的发生,先来先服务策略处理事务的加锁请求

数据库管理系统一般通过周期性检查事务等待图来实现死锁检测

数据备份与恢复

策略:双机热备、数据转储、数据加密存储

数据加密传输

手段:数字安全证书、对称密钥加密、数字签名、数字信封

环境安全设计

漏洞与补丁(查找更新)、计算机病毒防护(杀毒监控)、网络环境安全(防火墙)、物理环境安全(UPS)

制度安全设计

管理层面安全措施

DBAS实施

创建数据库

因素:初始空间 数据增量大小、访问性能

数据装载

步骤:筛选数据——转换数据格式——输入数据——校验数据

编写与调试应用程序

数据库系统运行

功能测试与性能测试

第五章UML与数据库应用系统

DBAS建模

UML由语义和表示法组成;语义用自然语言描述,表示法是可视化标准表示符号。

四层元元模型层、模型层、模型层、用户模型层。

结构图静态结构建模:类图、对象图、复合结构图、包图、组件图、部署图

行为图动态行为建模:用例图、交互图(顺序图、通信图、交互概述图、时间图)、状态图、活动图

DBAS业务流程与需求表达

活动图

箭头线:活动之间的转换 箭头:执行方向 圆角矩形:活动

菱形:分支、判断 标注:执行下一个活动条件 加粗直线:同步条

目的:表达流程规范性,表达明确、简单、逻辑清晰

只能有一个起点,可有多个结束点

                    计算机三级数据库技术_第11张图片

 

用例图

系统功能需求是用户想要的,本质最终是捕捉用户心中的期望

用例模型用例、角色、系统。

系统:长方框表示,系统名字写在方框上或下面。

角色:与系统交互的人或其他实体。

通用化关系:把某些角色共同行为抽取出来作为通用行为,通用行为构成超类。

角色之间:通用化关系用带空心三角形(作为箭头)的直线表示。

用例:一个完整的功能,是所有动作的集合。

用例:椭圆形表示 关联关系:带箭头直线

扩展和使用是继承关系,组合把相关用例打成包。

扩展关系:构造型(sterotype)<>

使用关系:构造型 <>

计算机三级数据库技术_第12张图片

 

DBAS系统内部结构的表达

类图

类图技术是面向对象方法的核心技术。

属性

可见性:公有、受保护、私有,分别用“+”,“#”,“-”表示

名称:表示属性的名称

类型:定义属性的种类

缺省值:属性的初始值

约束性:列出该属性所有可能取值

操作

可见性、名称、参数表、返回类型表达式、约束性

关联关系

两个类之间存在某种语义上的联系

导航关系: 类与类之间的关联是单向的;实线箭头

多重性参与对象的数目上下界限制,“*”代表0~∞,“1”是1..1的简写

如果图中没有明确标识关联的重数,就意味着是1

聚集

共享聚集:部分可以参加多个整体;空心菱形

组成:整体拥有各部分,部分与整体共存,整体不存在,部分也会消失;实心菱形

继承(泛化)关系

元素与特殊元素之间的分类关系;继承表示为一头为空心三角形的连线。

依赖关系

元素Y依赖元素X

精化关系

同一事物的两种描述之间的关系;带空心三角形的虚线表示

     计算机三级数据库技术_第13张图片

 

顺序图

描述系统内对象之间的消息发送和接收序列

横向:对象,用矩形框表示 纵向:时间持续的过程

对象间的通信用对象生命线之间的水平消息表示;

消息线的箭头说明消息的类型,如同步、异步或简单

消息/方法名字:标注在消息线的上面

浏览顺序图的方法:从上到下查看对象间交换的信息

各分支的条件不互相排斥,消息可能会并行发出

条件之间互相排斥,一次只能发送一条消息

当一个对象被销毁时,用一个大“X”标记

计算机三级数据库技术_第14张图片

 

通信图(协作图

对象之间的联系以及对象之间发送和接收的消息 空间

特别表达消息的传递是由哪一个对象到另一个对象

描述对象在空间中如何交互、链接没有时间轴,按序编号

    计算机三级数据库技术_第15张图片

 

DBAS系统微观设计的表达

对象图

概念模型中必须要利用比较抽象的表示法,来同时表达概念在各种不同情况下的呈现

计算机三级数据库技术_第16张图片

 

状态图

某个对象或某一个事件非常复杂的状态转换;只能有一个起始状态

计算机三级数据库技术_第17张图片

 

时间图

当状态持续了多长时间后,就会转移到另一个状态;状态转移中牵涉时间因子

计算机三级数据库技术_第18张图片

 

DBAS系统宏观设计与表达

包图

包与包之间允许建立的关系有依赖、精化和通用化;保证低耦合,高内聚

可见性:私有、保护、公有、实现,缺省的可见性为公有

     计算机三级数据库技术_第19张图片

 

交互概述图

主要元素和活动图完全一致,唯一不同的是交互框用来取代活动图中的活动框

          计算机三级数据库技术_第20张图片

 

复合结构图

最主要元素是部件

部件与外部的部件连接时,必须通过端口,用正方形图示。

供给接口:某个特定的部件提供服务个外部的部件

需求接口:某个特定的部件需要外部的部件提供服务

计算机三级数据库技术_第21张图片

 

DBAS系统实现与部署的表达

组件图

一组组件之间的组织和依赖,用于对源代码、可执行任务的发布、物理数据库等的建模

组件是逻辑设计中定义的概念和功能在物理架构中实现。

典型情况下,组件是开发环境中的实现文件

计算机三级数据库技术_第22张图片

 

部署图

系统中的硬件和软件对的物理配置情况和系统体系结构;结点表示实际的物理设备。

计算机三级数据库技术_第23张图片

 

第六章 高级数据查询

一般数据查询功能扩展

使用TOP限制结果集

语法格式:TOP  n  [percent] [WITH  TIES]

①TOP  n:取查询结果的前n行数据;

②TOP n percent:取查询结果的前n%行数据;

③WITH TIES:表示包括最后一行取值并列的结果

注意:用TOP谓语,与ORDER  BY子句一起使用

  用WITH TIES选项,必须使用ORDER BY子句

使用CASE函数

分情况显示不同数据类型的目的

简单CASE函数

语法格式: CASE  测试表达式

WHEN  简单表达式1 THEN结果表达式1

WHEN  简单表达式2 THEN结果表达式2

......

WHEN  简单表达式n THEN结果表达式n

[ELSE  结果表达式n+1]

END

搜索CASE函数

语法格式: CASE  

WHEN  布尔表达式1 THEN结果表达式1

WHEN  布尔表达式2 THEN结果表达式2

......

WHEN 布尔表达式n THEN结果表达式n

[ELSE  布尔表达式n+1]

END

将查询结果保存到新表中

语法格式: SELECT  查询列表序列  INTO  [# / ##]  <新表名>

  FROM  数据源

... ——其他行过滤、分组等子句

功能:

①查询语句列出的列以及其类型创建一个新表

②执行查询语句

③将查询结果插入新表

局部临时表标识“#”,全局临时表标识“##”。

查询结果的并、交、差运算

并运算 UNION

语法格式: SELECT  语句1

UNION [ALL]

SELECT 语句2

UNION [ALL]

...

SELECT 语句n

JION是垂直合并数据(添加更多的列),UNION是水平地合并数据(添加更多的行)

注意:

①列的个数,语义相同

②列的数据类型与其他列的数据类型隐式兼容

③合并后采用第一个SELECT语句列标题

④结果进行排序,ORDER  BY写在最后一个查询语句

交运算 INTERSECT

语法格式: SELECT  语句1

INTERSECT

SELECT 语句2

INTERSECT

...

SELECT 语句n

交运算返回两个查询结果集中各个列的值均相同,并用这些记录构成交运算的结果

差运算 EXCEPT

语法格式: SELECT  语句1

EXCEPT

SELECT 语句2

EXCEPT

...

SELECT 语句n

差运算将返回在第一个集合中有但第二个集合中没有的数据

相关子查询

子查询进行基于集合的测试 [NOT] IN

WHERE表达式[NOT]  IN(子查询)

注意先执行子查询,然后在子查询的结果基础上再执行外层查询

子查询进行比较测试

WHERE表达式  比较运算符(子查询)

比较运算符:=、<>、<、>、<=、>=

运算结果为True,则返回True;运算结果为False,则为False。

注意子查询先得到聚合函数的结果,再执行外层查询的比较

子查询进行存在性测试 [NOT]  EXISTS

WHERE  [NOT]  EXISTS(子查询)

注意:①先执行外层查询,再执行内层查询

②只返回真或假值,子查询目标列通常用“*

其他形式的子查询

替代表达式的子查询

在SELECT语句的选择列表中嵌入一个只返回一个标量值的语句

例:查询G001顾客姓名、地址以及顾客购买商品的次数

SELECT  Cname,Address

(SELECT  COUNT(*)  FROM  Table_SaleBill  a

JION  Table_Customer  b  ON  a.CardID=b.CardID

WHERE CustomerID=G001)  AS  Totaltimes

FROM  Table_Customer

WHERE  CustomerID=’G001’

派生表

将子查询作为一个表来处理;简化查询,避免使用临时表

SELECT  *  FROM(SELECT  *  FROM  T1) AS  temp

其他一些查询功能

开窗函数

将OVER子句与聚合函数结合使用

语法格式: : : =

OVER  ( [PARTITION  BY  value_expression] )

PARTITION  BY :将结果集划分为多个分区

value_expression:指定对行集进行分区所依据的列

:SELECT Cno,Semester,Credit,

SUM(Credit)  OVER (PARTITION  BY  Semester)  AS  ‘Total’

将OVER子句与排名函数一起使用

语法格式: RANK () OVER  ( [ < partition_by_clause > ]

< order_by_clause> )

partition_by_clause :将FROM子句生成的结果集划分成排名函数使用的分区

order_by_clause :指定应用于分区中的行时所基于的排序依据列

RANK():每行数据在每个分区内的排名;若值有相同的行,则值相同的行具有相同排名

DENSE_RANK()排名中间没有任何间断,该函数返回的是一整个连续的值

NTILE:有序分区中的行划分到指定数目的组中

ROW_NUMBER():返回结果集中每个分区内行的序列号

例:SELECT 列名 RANK()  OVER

(PARTITION  BY 列名  ORDER  BY 列名 [DESC | ASC ] )

FROM 表名 ORDER  BY 列名

公用表达式

将查询语句产生的结果集指定一个临时命名的名字

好处:①定义递归公用表达式

  ②操作数据代码清晰简洁

  ③GROUP  BY子句作用在子查询的标量列上

  ④在一个语句中多次引用共用表达式

语法格式: WITH [...n]

: :=

expression_name [  ( column_name  [...n] )  ]

AS

(SELECT  语句)

expression_name :公用表达式标识符

column_name:公用表达式指定列名

SELECT  语句:指定一个用其结果集填充到公用表达式的SELECT语句

例:WITH  BuyCount(CardID,Counts)  AS

SELECT  CardID,COUNT(*)  FROM  Table_SaleBill

GROUP BY  CardID)

SELECT  CardID,Counts  FROM  BuyCount

ORDER BY  Counts

第七章 数据库及数据库对象

创建及维护数据库

SQL Server数据库概述

master:记录实例的所有系统级信息,包括实例范围。

msdb:代理服务调度报警和作业以及记录操作员时使用

model:实例上创建的所有数据库模板

tempdb:临时数据库

resource::只读数据库

数据库的组成

数据文件包含数据和对象,日志文件包含恢复数据库中的所有事务需要的信息

数据文件

主要数据文件:扩展名 .mdf 只能有一个主要数据文件

次要数据文件:扩展名 .ndf 可以不包含次要数据文件,也可以包含多个次要数据文件

可以建立在一个磁盘上,也可以分别建立在不同磁盘上

在主要数据文件建立之后建立的所有文件都是次要数据文件

事务日志文件

扩展名 .ldf 存放恢复数据库的所有日志信息,必须至少一个日志文件, 也可以多个日志文件

数据存储空间的分配

①数据的分配单位是数据页,一页是一块8KB(8×1024B,用8060B存放数据,另外132B存放信息)的连续磁盘,每MB有128页

不能跨页存储,表中一行数据大小不能超过8060B

③创建用户数据库时,model数据库自动复制到新建数据库中,且复制到主数据文件中

数据库文件组

主文件组:包含主要数据文件和其他数据文件,系统所有页均分配在主文件组中

用户定义文件组:用户可以创建自己的文件组,将数据库文件组织起来,便于管理和数据分配

日志文件不包括在文件组内日志空间与数据空间分开管理

一个文件可以是多个文件组的成员

文件组中有多个文件,在所有文件被填满之前不会自动增长,填满后文件会循环增长

数据库文件属性

文件名及其位置:具有一个逻辑文件名和物理文件名,逻辑文件名必须是唯一。

多个数据文件,建议将文件分散存储在多个物理磁盘上

初始大小:指定主要数据文件的初始大小时,其大小不能小于model数据库

  主要数据文件的大小

增长方式:可指定文件是否自动增,默认配置为自动增长

最大大小:文件增长的最大空间限制,默认是无限制

用T-SQL语句创建数据库

语法格式: CREATE  DATABASE  database_name

[  ON

[ PRIMARY ]   [  [,  ...n]

[ ,   [,  ...n]

[ LOG ON  {  [,  ...n] } ]

]

]

< filespec > : : ={

(NAME = logical_file_name ,

FILENAME={  os_file_name  |  ‘filestream_path’

[ , SIZE = size [ KB | MB | GB | TB ]  ]

[ , MAXSIZE = max_size [ KB | MB | GB | TB ] | UNLIMITED ]

[ , FILEGROWTH= growth_increment [ KB | MB | GB | TB | % ]  ]

) [ ,  ...n] }

< filegroup > : : = {

FILEGROUP  filegroup_name [ DEFAULT ]

< filespec > [ ,  ...n ] }

Database_name:新数据库名

ON:指定数据文件

PRIMARY:指定关联数据文件的主文件组

LOG ON:指定日志文件

:定义文件属性

NAME=logical_file_name:指定文件的逻辑名称

FILENAME= ‘ os_file_name’:指定操作系统(物理)文件名

SIZE = size:指定文件的初始大小

MAXSIZE = max_size :指定文件可增大最大大小

UNLIMITED:指定文件的增长无限制

FILEGROWTH= growth_increment:指定文件的自动增量

growth_increment :每次文件添加的空间量

< filegroup > :文件组属性

FILEGROUP  filegroup_name:文件组的逻辑名称

修改数据库

扩大数据空间

语法格式: ALTER  DATABASE database_name

{ < add_or_modify_files > }

< add_or_modify_files >: : =

{

ADD FILE < filespec > [ ,  ...n ]

[ TO  FILEGROUP { filegroup_name | DEFAULT } ]

| ADD  LOG  FILE  [ ,  ...n ]

| MODIFY  FILE < filespec >

database_name:要修改的数据库名

< add_or_modify_files >:在数据库中添加新的数据库文件

TO FILEGROUP { filegroup_name | DEFAULT }:将指定文件添加到文件组

:文件属性

ADD LOG  FILE:在数据库中添加新的日志文件

MODIFY  FILE:指定要修改的文件

收缩数据空间

收缩整个数据库大小

语法格式: DBCC  SHRINKDATABASE

(‘ database_name’  | database_id | 0 ‘)

[ ,target_percent ]

[ ,{ NOTRUNCATE | TRUNCATEONLY ]

    )

‘database_name’  | database_id | 0 :要收缩的数据库名称和ID;指定0,则表示收缩当前正在使用的数据库

target_percent:数据库收缩后文件所需的剩余空间百分比

NOTRUNCATE:数据库文件保留释放的文件空间;若未指定,则释放给操作系统

TRUNCATEONLY:将文件中任何未使用的空间均释放给操作系统,收缩到最后分配大小

收缩指定文件大小

语法格式: DBCC  SHRINKDATABASE

( ‘file_name’

{ [ ,EMPTYFILE ]

| [ [ ,target_size ] [ , [ {NOTRUNCATE | TRUNCATEONLY  }  ] ]

}

)

file_name:要收缩的文件逻辑名

target_size:指定收缩后目标文件大小

EMPTYFILE:指定将文件中的所有数据迁移到同一个文件组的其他文件中

NOTRUNCATE:数据库文件保留释放的文件空间;若未指定,则释放给操作系统

TRUNCATEONLY:将文件中任何未使用的空间均释放给操作系统,收缩到最后分配大小

添加和删除数据库文件

语法格式: ALTER  DATABASE  database_name

REMOVE  FILE  logical_file_name

database_name:要删除的数据库名

logical_file_name:被删除文件的逻辑名

分离和附加数据库

分离数据库

语法格式: sp_detach_db [ @ dbname= ]  ‘ dbname ’

[ , [ @ skipchecks= ]  ‘ skipchecks ’

[ @ dbname= ]  ‘ dbname ’ :要分离的数据库名称

[ @ skipchecks= ]  ‘ skipchecks ’ :指定跳过还是运行 “更新统计信息”;

  若跳过,则true;若显示运行,则false

附加数据库

语法格式: CREATE  DATABASE  database_name

ON    [ , ...n]

FOR { ATTACH | ATTACH_REBUILD_LOG }

 database_name:要附加的数据库名称

:指定要附加的数据库的主要数据文件

FOR  ATTACH_REBUILD_LOG:指定附加现有的操作系统文件创建数据库

  只限于读/写的数据库;若缺少日志文件,重新生成

架构

定义架构

架构:数据库下的逻辑命名空间,可存放数据库对象

  一个数据库可以包含一个或多个架构,由特定的授权用户拥有。

  同一数据库中架构名必须唯一;一个架构由零个或多个架构对象组成。

  定义架构可同时定义表TABLE、视图VIEW、用户授权GRANT

语法格式: CREATE  SCHEMA  [ <架构名> ]  AUTHORIZATION  <用户名>

若未指定<架构名>,则<架构名>隐含为<用户名>

删除架构

语法格式: DROP  SCHEMA  <架构名>  {  |   }

CASCADE:删除架构的同时将该架构中的所有架构对象一起全部删除

RESTRICT:如果被删除的架构中包含架构对象,则拒绝删除此架构

批处理语句

 BEGIN  TRANSACTION ....... COMMIT   TRANSACTION

分区表

创建分区函数

SQL语句: CREATE  PARTITION FUNCTION  partition_function_name (input_parameter_type)

   AS  RANGE  [ LEFT | RIGHT ]

   FOR  VALUES (  [ boundary_value [ , ...n ] ]  )

   [ ; ]

partition_function_name:分区函数名

input_parameter_type:用于分区的列的数据类型

boundary_value:为每个分区指定边界

...n:提供值的数目,n≦999

LEFT | RIGHT:指定间隔值由数据库引擎按升序从左到右排序;若未指定,则默认为LEFT

说明:

①分区函数的作用域仅限于创建该分区的数据库

②分区列空值的所有行在最左侧;最左侧分区为空分区,NULL值被放置在后面分区中

左分区

例:CREATE  PARTITION  FUNCTION  myRangeF1(int)

AS  RANGE  LEFT  FOR  VALUES(1,100,1000)

分区

1

2

3

4

coll<=1

coll>1  AND  coll<=100

coll>100  AND  coll<=1000

coll>1000

右分区

例:CREATE  PARTITION  FUNCTION myRangeF2(int)

AS  RANGE  RIGHT  FOR  VALUES(1,100,1000)

分区

1

2

3

4

coll<1

coll>=1  AND  coll<100

coll>=100  AND  coll<1000

coll>=1000

创建分区方案

SQL语句: CREATE  PARTITION  SCHEME partition_scheme_name

AS PARTITION  partition_function_name

[ ALL ]  TO ( { file_group_name | [ PRIMARY ] } [ , ...n ] )

[ ; ]

partition_scheme_name:分区方案名

partition_function_name:分区函数名

ALL:指定所有分区映射到file_group_name中提供的文件组

{ file_group_name | [ PRIMARY ] } [ , ...n ]:指定分区的文件组名

创建分区表

CREATE   TABLE   table_name(

列名 数据类型,

...

)

ON schema_name(列名)

索引

创建索引

语法格式: CREATE  [UNIQUE]  [CLUSTERED | NONCLUSTERED]  INDEX  INDEX_NAME

ON    (column  [ASC | DESC ] [ , ...n  ] )

[ INCLUDE  ( column_name [ , ...n  ] ) ]

[ WHERE ]

[ ON { partition_scheme_name ( column_name )

| filegroup_name

| default

}

]

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | “NULL”  } ]

[ ; ]

: :=

{

[database_name. [ schema_name ]. | schema_name. ]  table_or_view_name

}

UNIQUE:为表或视图创建唯一索引

CLUSTERED:创建聚集索引

NONCLUSTERED:默认选项,创建一个非聚集索引

Index_name:索引名

Column:索引所基于的一个列或多列

[ ASC | DESC ]:ASC为升序,DESC为降序

INCLUDE ( column [ , ...n ] ):指定要添加非聚集索引的叶级别的非键列。

WHERE< filter_predicate >:指定筛选条件后系统满足筛选条件的数据行上建立索引

ON partition_scheme_name  (column_name):指定分区方案

ON filegroup_name:指定文件组索引

ON  “ default”:默认文件组索引

删除索引

语法格式: DROP INDEX  { index_name  ON    [, ...n] }

{

[database_name. [ schema_name ]. | schema_name. ]  table_or_view_name

}

视图索引

适合建立视图索引的场合:①很少更新基础数据

②以批处理的形式更新,只读数据进行处理

提高性能:①处理大量行的连接和聚合

  ②许多查询经常执行的连接和聚合操作

不能提高性能:①具有大量写操作的OLTP系统

  ②具有大量更新操作的数据库

     ③不涉及聚合或连接的查询

  ④GROUP  BY列具有高基数度的数据聚合

定义索引视图:①视图只能引用基本表

     ②基本表与视图位于同一个数据库

  ③必须使用SCHEMABINDING选项创建视图

  ④引用的函数必须正确

  ⑤第一个索引必须是唯一聚集索引

第八章 数据库后台编程技术

存储过程

存储过程的好处:①允许模块程序化设计

②改善性能

③减少网络流量

④增强应用程序安全设计

创建存储过程

语法格式: CREATE { PROC | PROCEDURE } [ schema_name. ] procedure_name

[ { @parameter  [ type_schema_name. ] data_type }

[ =default ] [ OUT | OUTPUT ]

] [ , ...n ] [ WITH RECOMPILE ]

AS { [ ; ] [ ...n ] }

[ ; ]

: : ={ [ BEGIN ] statements  [ END ] }

schema_name:过程所属架构名

procedure_name:存储过程名

@parameter:存储过程的参数

[ type_schema_name. ] data_type:参数以及所属架构的数据类型

default:参数的默认值

OUTPUT:输出参数

RECOMPILE:数据库引擎不缓存该计划,在运行时被重新编译

执行存储过程

语法格式: [ { EXEC | EXECUTE } ]

{

[ @return_status= }

{ proc_name }

[ [ @parameter_name= ] { value

 | @variable  [ OUTPUT ]

| [DEFAULT ]

}

]

[ , ...n ]

[ WITH  RECOMPILE ]

}

[ ; ]

return_status:可选的整型标量,存储过程的返回状态

proc_name:要调用的存储过程名

@variable:用来存储参数或返回参数的变量

Parameter:存储过程的参数,必须与存储过程中定义的相同

删除存储过程

语法格式: DROP  { PROC | PROCEDURE }  { [ schema_name. ] procedure } [ , ...n ]

用户定义函数

创建和调用标量函数

语法格式: CREATE  FUNCTION [ schema_name. ] function_name

( [ {  @parameter_name  [ AS ] [ type_schema_name. ] parameter_data_type

[ =default ] }

[ , ...n ]

  ]

)

RETURNS return_data_type

[ AS ]

BEGIN

function_body

  RETURN  scalar_expression

END

  [ ; ]

schema_name:用户自定义函数所属构架的名称

function_name:用户定义的函数名称

@parameter_name :用户定义的函数参数

[ type_schema_name. ] parameter_data_type:参数的数据类型及其所属的架构

return_data_type:用户定义函数返回的标量值

scalar_expression:指定标量函数返回的标量值

调用标量函数: 例 SELECT  dbo.CubicVolume(4,6,8)

创建和调用内联表值函数

内联表值函数的返回值是一个表,该表的内容是一个查询语句的结果

语法格式: CREATE  FUNCTION  [ schema_name. ]  function_name

( [ { @parameter_name  [ AS ]  [ type_schema_name. ] parameter_data_type

[ =default ] }

[ , ...n ]

  ]

)

RETURNS  TABLE

[ AS ]

RETURN  [ ( ]  select_stmt [ ) ]

[ ; ]

调用内联表值函数:SELECT  *  FROM  dbo.f_GoodsInfo(‘服装’)

创建和调用多语句表值函数

语法格式: CREATE  FUNCTION  [ schema_name. ] function_name

( [ {@parameter_name  [ AS ] [ type_schema_name. ] parameter_data_type

[ =default ] }

[ , ...n ]

]

)

RETURNS  @return_variable  TABLE <table_type_definition>

[ AS ]

BEGIN

INSERT INTO  @return_variable

function_body

RETURN

END

[ ; ]

: : =

( {  

|   }

[ ] [ , ...n]

)

function_body:T-SQL语句,用于填充TABLE返回变量

table_type_definition:定义返回表的结构

调用多语句表值函数:例 SELECT  *  FROM dbo.f_GoodsType  (‘家用电器’)

触发器

触发器场合:①完成比CHECK约束更复杂的数据约束

②为保证数据库性能而维护的非规范化数据

③可实现复杂的商业规则

④可以评估数据修改前后的表状态,并根据其差异采取对策

语法格式: CREATE  TRIGGER  [ schema_name. ] trigger_name

ON [ table | view ]

   { FOR | AFTER |  INSTEAD  OF

{ [ INSERT ] [ , ]  [ UPDATE ]  [ , ]  [ DELETE ] }

AS  { sql_statement }

[ ; ]

schema_name:触发器所属架构名称

trigger_name:触发器名称

table | view:关联的表或视图

FOR | AFTER :不能在视图上定义AFTER触发器

INSTEAD  OF :指定执行触发器

INSERT  UPDATE  DELETE :引发触发器执行的操作

DELETED表 :用于存储DELETE和UPDATE语句所影响的行复本

INSERTED表 :用于存储INSERT和UPDATE语句所影响的行复本

UPDATE :类似于在删除之后执行插入

创建后触发型触发器

使用FOR或AFTER选项定义的触发器为触发型触发器

只有在引发触发器执行的语句中的操作已成功执行,且所有约束检查成功后,才执行触发器

创建前触发型触发器

使用INSTEAD  OF选项定义的触发器以触发型触发器

指定执行触发器而不是执行引发触发器执行的SQL语句,从而代替引发语句的操作

删除触发器

DROP  TRIGGER  schema_name. Trigger_name [ , ...n ]  [ ; ]

游标

声明游标:

语法格式:DECLARE cursor_name  [ INSENSITIVE ] [ SCROLL ]  CURSOR

FOR  select_statement

[ FOR { READ  ONLY  | UPDATE  [ OF  column_name  [, ...n ] ] } ]

cursor_name:服务器游标名

INSENSITIVE:定义一个游标,创建将由该游标使用的数据临时复本

SCROLL:指定的所有提取项

select_statement:定义游标结果集的标准SELECT语句

READ  ONLY:禁止通过该游标更新数据

UPDATE:定义游标中可更新的列、

打开游标:

OPEN  cursor_name

Cursor_name:游标名

提取数据:

语法格式: FETCH  [  [ NEXT |  PRIOR |  FIRSE  |  LAST

  |  ABSOLUTE  n

  |  RELATIVE   n  ]

FROM

  ]

cursor_name [ INTO @variable_name  [ , ...n ]

NEXT:返回紧跟当前行之后的数据行,并且当前行递增为结果行

PRIOR:返回紧临当前行前面的数据行,并且当前行递减为结果行

FIRST:返回游标中的第一行将其作为行

LAST:返回游标中的最后一行将其作为行

ABSOLUTE[n]:提取游标中的第n行

RELATIVE[n] | [-n] :提取当前行的后边的第n行 | 提取当前行前边的第n行

cursor_name:从中进行提取数据的游标名

INTO @variable_name:将提取的列数据保存到局部变量中

@@FETCH_STATUS:返回的数据类型是int

关闭游标:

CLOSE  cursor_name

释放游标:

DEALLOCATE  cursor_name

第九章 安全管理

安全控制概述

安全性:保护数据以防止不合法用户故意造成破坏

完整性:保护数据以防止合法用户无意中造成破坏

数据安全控制目标:保护数据免受意外或故意的丢失、破坏或滥用

数据库安全威胁:可用性损失、机密性 私密性数据损失、偷窃和欺诈、意外损害

安全控制:身份验证——操作权限控制——文件操作控制——加密存储与冗余

认证:鉴定用户身份的机制

存取控制

自主存取控制

权限种类:维护权限、操作权限(语句、对象权限)、隐含权限

用户分类:系统管理员、数据库对象拥有者、普通用户

强制存取控制

主体:活动实体 许可证级别 客体:被动实体 密级

敏感度标记(Label):绝密(Top Secret)、秘密(Secret)、可信(Confidential)、公开(Public)

仅当主体许可证级别大于或等于客体密级,主体可以读取相应客体

仅当主体许可证级别等于客体密级,该主体才能相应客体。

安全性分级模式:D类最小保护、C类自主保护、B类强制保护、A类验证保护

SQL Server安全控制

身份验证模式Windows身份验证、混合身份验证

登陆账户:自身负责身份验证、Windows网络(组/用户)

   只能连接SQL Server数据库服务器,并不具有访问任何用户数据库权限

建立登录账户:CREATE  LOGIN  login_name  WITH  PASSWORD=’****’ 

|  FROM (域)  |  MUST_CHANGE (必须更改密码)

修改登录帐户属性:ALTER  LOGIN  login_name  WITH  PASSWORD=’****’  (修改密码)

| ENABLE (启用)  |  WITH  NAME=***  (改名)

删除登录帐户:DROP  LOGIN  login_name

数据库用户:默认情况,新建立的数据库只有一个用户:database owner,数据库的拥有者

登录账户成为数据库用户的操作称为“映射”

每个数据库中均已存在guest用户,默认禁用状态,授予CONNECT启用

先删除或转移安全对象的所有者,再删除拥有这些对象的数据库用户

创建数据库用户:CREATE  USER  user_name  [|FOR|FROM]

LOGIN login_name

Guest用户: GRANT CONNECT TO guest 启用

REVOKE CONNECT TO guest 禁用

删除数据库用户:DROP USER user_name

权限管理

对象级别权限:SELECT、INSERT、UPDATE、DELETE、REFERENCES、EXECUTE

语句级别权限:CREATE  DATABASE、PROCEDURE、TABLE、VIEW、FUNCTION、

  BACKUP  DATABASE、LOG

语句权限:授予语句级别权限使用GRANT语句

拒绝权限:拒绝用户具有某权限使用DENY语句

收权语句:将已授权用户权限收回来,语句使用REVOKE语句

角色

一组具有相同权限的用户就是角色;角色分为预定义的系统角色和用户角色

固定服务器角色:作用域属于服务器范围,可以将登录账户添加到固定服务器角色

Bulkadmin:执行BULK INSERT语句权限。

Dbcreator创建、修改、删除还原数据库权限

Diskadmin:具有管理磁盘文件的权限

Processadmin管理运行进程权限。

Securtyadmin:专门管理登录账户、读取错误日志执行CREATE DATABASE 权限的账户,便捷。

Serveradmin:服务器级别的配置选项和关闭服务器权限。

Setupadmin:添加删除链接服务器。

Sysadmin:系统管理员 ,Windows超级用户自动映射为系统管理员。

Public:系统预定义服务器角色,每个登录名都是这个角色的成员。没有授予或拒绝特定权限,则将具有这个角色权限。

添加成员:EXEC Sp_addsrvrolemember ‘user1’ (登录名),‘sysadmin’(角色名)

删除成员:EXEC Sp_dropsrvrolemember ‘user1’,‘sysadmin’

固定数据库角色:存在于每个数据库中,具有数据库角色权限

Db_accessadmin:添加或删除数据库权限

Db_backupoperator:备份数据库、日志权限

Db_datareader:查询数据库数据权限

Db_datawriter具有插入、删除、更改权限

Db_ddladmin:执行数据定义的权限

Db_denydatareader:不允许具有查询数据库中所有用户数据的权限。

Db_denydatawriter:不允许具有插入、删除、更改数据库中所有用户数据权限。

Db_owner:具有全部操作权限,包括配置、维护、删除数据库。

Db_securityadmin:具有管理数据库角色、角色成员以及数据库中语句和对象的权限。

用户定义角色:数据库一级角色,可以是用户定义角色或数据库用户

创建用户定义的角色:CREATE  ROLE  MathDept  [AUTHORIZATION  (拥有者)  Software]

删除用户定义角色:DROP  ROLE  MathDept

注意角色中的成员拥有的权限=成员自身权限+所在角色权限

但若某个权限在角色中被拒绝,则成员不再拥有。

第十章 数据库运行维护与优化

数据库运行维护基本工作

数据库的转储与恢复

数据库的安全性、完整性控制

检测并改善数据库的性能

数据库的重组和重构

重组:不修改数据库原有设计的逻辑和物理结构;存储空间分配零散

重构:部分修改数据库的模式和内模式;数据库设计不能满足新的需求

运行状态监控与分析

自主监控机制 手动监控机制

对数据库构架体系的监控:空间使用率与剩余大小的空间、空间扩展

对数据库性能的监控:数据缓冲区的命中率、用户锁、回滚段、临时段、索引、事件

数据库存储空间管理

空间使用情况问题:降低数据库系统服务性能  空间溢出导致灾难停机事故

DBMS对空间的管理包括:创建数据库空间、更改空间大小、删除空间、修改空间状态,新建、移动、关联数据文件等。

数据库性能优化

数据库运行环境与参数调整

外部调整:CPU性能和网络传输

调整内存分配:调整相关参数控制数据库的内存分配

调整磁盘I/O:性能优劣度量是时间;令I/O时间最小化,减少磁盘文件竞争

调整竞争:①修改参数以控制连接到数据库的最大进程

  ②减少调度进程竞争

  ③减少多线程服务进程竞争

  ④减少重做日志缓冲竞争

  ⑤减少回滚段竞争

模式调整与优化

规范化过程:高效率利用存储空间,减少数据冗余,减少数据的不一致

反规范化:将规范化关系转换成非规范化的关系的过程;破坏数据完整性

增加派生性冗余列:增加的列由表中的一些数据项经过计算生成

  提高查询统计速度,空间换时间;减少连接操作,避免使用聚合函数

增加冗余列:在多个表中增加具有相同语义的列;避免连接操作。

重新组表:用户查看的某些数据由多个表连接之后得到,把这些数据重组成一个表

  

分割表:①水平分割:表结构相同,存储数据不同,需要union操作

垂直分割:除了主码外其他列不相同,常用列与不常用列分别放在不同表中

查询减少I/O次数,缺点是使用连接Join操作

新增汇总表:频繁使用的统计操作的中间结果或最终结果存储在汇总表

降低数据访问量和汇总操作的CPU计算量

存储优化

物化视图:包括一个查询结果的数据库对象,预先计算并保存耗时较多的操作结果

  可以进行远程数据的本地复制

聚集:物理存储表中数据的可选择的方法;可最小化必须执行的I/O次数

  聚集表的插入、更新、删除性能差

查询优化:

1.合理使用索引:索引提高查询效率,增加系统开销

建立原则:是否为一个属性建索引

  在哪些属性建立索引

  是否建立聚簇索引

使用散列还是树索引

使用原则:经常在查询中作为条件被使用的列

  频繁进行排序或分组的列

  一个列的值域很大时

  待排列的列有多个

  数据表更新大量数据后,删除并重建索引

调整和修改原因:缺少索引,某些查询语句执行时间过长

索引没有使用,占用较多磁盘空间

索引建立在被频繁改变的属性上,导致系统开销过大

  1. 避免或简化排序

影响:现有索引不足,导致排序索引中不包括一个或几个待排序的列

  Group by和Order by子句中列的次序与索引次序不一致

排列的列来自不同的表

  1. 消除对大型表数据的顺序存取:对连接列进行索引,或使用并集来避免顺序存取。

  1. 避免复杂正则表达式:消耗较多CPU资源进行字符串匹配

  1. 使用临时表加速查询:将表的一个子集进行排序并创建临时表

  1. 用排序来取代非顺序磁盘存取:非顺序磁盘存取最慢

7.不充分的连接条件:左(右)外连接包含与NULL数据匹配,相比内连接,代价可能很高。

8.存储过程:尽量使用自带返回参数,减少不必要参数,避免数据冗余

9.不要随意使用游标:占用较多系统资源

  1. 事务处理:将频繁操作的多个可分割的处理过程放入多个存储过程中

SQL Server性能工具

SQL Server Profiler:监视SQL Server事件的工具,存储在跟踪文件中,分析文件诊断问题

数据库引擎优化顾问:测试数据库工作负荷,给出优化建议。

第十一章故障管理

故障管理概述

事务内部故障

预期:事务程序本身发现的事务内部故障,事务回滚

非预期:事物内部故障不能由事务程序处理

系统(软)故障

由于硬件故障、突然停电等情况,导致系统停止运行

需要系统重新启动;回滚未完成的事务,重做已提交的事务

介质(硬)故障

由于磁盘损坏、强磁干扰等情况,导致数据部分丢失或全部丢失

故障发生可能性小,但破坏大

软件容错:备份与日志文件,只能恢复到备份数据库后的某个时间点

硬件容错:双物理存储设备,达到数据库完全恢复效果

计算机病毒故障

防火墙、杀毒软件、数据库备份文件

数据库技术恢复概述

把数据库从错误状态恢复到某一已知的正确状态

在DBMS中,数据库恢复子系统占10%以上

恢复机制涉及两个问题:建立冗余数据

利用这些冗余数据实施数据库恢复

数据转储

定期复制数据库,并将数据存放其他介质中,被称为后援副本或后备副本

静态转储和动态转储

静态转储:不能运行其他事务;转储前后系统必须处于一致的状态

保证数据有效性,但降低数据库可用性

动态转储:允许转储操作和用户事务并发进行;在数据库进行存取和修改操作

 提高数据库可用性,但数据有效性不能保证

动态转储+日志文件:记录转储期间各事务对数据库的修改活动记录

  保证数据一致性,提高数据库可用性

数据转储机制

完全转储:对数据库所有数据进行转储,恢复时间最短

增量转储:只复制上次转储之后发生变化的文件或数据块,比完全转储恢复时间长

差量转储:对近一次数据库完全转储发生的数据变化进行转储,占用较小空间,比增量转储恢复速度快

仅使用完全转储:大量数据移动,占用时间和空间

完全转储加增量转储:每隔一段时间进行一次完全转储,在其中间执行多次增量转储

   避免大量数据移动,恢复时间长,转储出问题导致失败

完全转储加差量转储:操作简单、时间比较短

日志文件

日志文件概念

作用:事务故障恢复和系统故障恢复必须使用日志文件

  在动态转储方式中必须建立日志文件

  在静态转储方式中也可使用日志文件

故障恢复的操作:①UNDO ()  撤销事务(开始记录:删除、插入)已经开始但未提交

②REDO ()   重做事务(提交记录:更新)已完成并提交

日志文件的格式与内容

①以记录为单位的的日志文件

开始标记:BEGIN  TRANSACTION

结束标记:COMMIT  OR  ROLLBACK

各个事务的所有更新操作

②以数据块为单位的日志文件

事务标识和被更新的数据块

更新前的整个块和更新后的整个块

日志记录:开始标记、结束标记、更新操作

登记日志文件原则

①登记的次序严格按并行事务的执行时间次序

②必须先写日志文件,后写数据库

检查点

作用:最大限度的减少数据库完全恢复时必须执行的日志部分

检查点的引入

①检查点记录的内容(事务清单、地址、)

②重新开始文件记录的内容

动态维护日志文件的方法:建立检查点,保存数据库状态

硬件容错方案

相关度最紧密的技术:数据库存储保护技术、服务器容错技术、数据库镜像与容灾技术

磁盘保护技术

RAID:廉价冗余磁盘阵列,多块磁盘构成一个整体

镜像冗余:把所有数据复制到其他设备上或其他地方;开销大

校验冗余:对成员磁盘上的数据执行异或(XOR)操作,其校验值放在另外校验磁盘

RAID-0:将多个磁盘合并一个大的磁盘,不具有冗余,并行I/O,速度最快

RAID-1:两组以上的N个磁盘相互作镜像;并行传输,提高读速度,加强可靠性

RAID-5:把分块数据和奇偶校验信息写入硬盘阵列;至少需要三颗硬盘

RAID-10:RAID0与RAID-1的组合体;前者的快速,后者的安全,冗余度为50%

RAID卡做成RAID5,需一块硬盘用来存储奇偶校验信息,因此当RAID5磁盘损坏,不会 影响数据的完整性

服务器容错技术

引入服务器容错原因:解决服务器硬件异常问题

服务器容错技术简介:采用两台相同的服务器,共享存储设备

双机热备,Active-Standby

两台服务器之间会有私有网络进行心跳检测

其他服务器容错技术 :硬件、软件级别

数据库镜像与数据库容灾

数据库镜像分类:①双机互备援模式;均为工作机,互相监视对方

双机热备份模式:工作机和备份机,备份机监视工作机

SQL Server数据库镜像:将数据库事务处理从一个数据库移到不同的数据库

实现方式:①高可用性:同步事务写入,自动错误恢复

  ②高保护性:同步事务写入,手动错误恢复

高性能:不同步写入,手动错误恢复

第十二 章备份与恢复数据库

备份与恢复概念

造成数据丢失的原因:存储介质故障、用户的操作失误、服务器故障、病毒侵害、自然灾害

恢复数据库:①介质故障恢复:还原最近的数据库副本并利用备份日志重做已提交的操作

②非介质故障,在数据库系统重启之后,进行REDO和UNDO操作

备份与恢复机制

简单恢复模式:简略地记录大多数事务,不备份事务日志   SIMPLE

  减少事务日志的管理开销,只能恢复到最新备份状态

完整恢复模式:完整地记录了所有的事务,并保留所有的事务日志记录 FULL  

  支持还原单个数据页,可以恢复到故障点

大容量日志恢复模式:只对大容量操作进行最小记录     BULK_LOGGED

提供最佳性能并占用最小日志空间   不支持时点恢复

备份内容及时间:用户数据:周期性备份

系统数据:修改之后进行备份

立刻备份:创建数据库、索引之后,清理事务日志、大容量数据操作之后

备份机制

备份方式:①永久备份设备:先建立备份设备,再将数据库被分到备份设备

②临时备份设备:直接将数据库备份到物理文件上

远程备份:启动数据库引擎时对远程计算机有写的权限

备份类型:①数据库备份:完整数据库备份、差异数据库备份(DIFFERENTIAL

  ②文件备份:文件备份、差异文件备份

  ③事务日志备份:纯日志备份,大容量操作日志备份,结尾日志备份(有损坏)

备份策略:

完整备份:数据库数据不大,更改不频繁

完整备份 + 日志备份:不允许丢失太多数据,不希望经常完整备份

完整备份 + 差异备份 + 日志备份:备份和恢复速度快、数据丢失少

实现备份:

BACKUP  DATABASE  |  LOG  database_name

FILEFROUP=’ ***’ (辅助文件组)

TO 备份设备名  | {DISK |TAPE} (磁盘 磁带)

WITH  INIT (覆盖)  | NOINIT (追加) | DIFFERENTIAL (差异数据库备份)

恢复机制

数据库:数据库完整还原

数据文件:文件还原

还原顺序:恢复最近的完全备份

  恢复最近的差异备份

  恢复自差异备份之后的所有日志备份

  恢复数据库

实现还原:RESTORE DATABASE  |  LOG database_name

FROM  备份设备名

WITH  FILE  |  RECOVER  |  NORECOVER  | STANDBY

第十三章 大规模数据库架构

分布式数据库

分布式数据库系统:数据分布在物理位置不同的计算机,由通信网络连接

场地既能独立处理,也可和其他场地协同工作

物理上分散、逻辑上集中

分配模式是描述个片段到物理存放的映像

分布式数据库:分布式数据库系统中各个场地上数据库的逻辑集合

分布式数据库目标:本地自治、非集中式管理、高可用性   (最基本特征

位置独立性、数据分片独立性、数据复制独立性   (分布透明性)

分布式查询处理、分布式事务管理    (复杂性)

硬件独立性、操作系统独立性、网络独立性、数据库管理系统独立性

采用半连接操作可以减少场地之间的数据传输量

数据分布策略 

数据分片:①水平分片;数据的子集合,每一行至少属于一个片段

②垂直分片;数据的子集合,各片段包含关系主码属性

③导出分片;导出水平分片

④混合分片:以上三中的混合

数据分配:①集中式;所有数据片段都在安排在一个场地上

②分割式:被分割若干份,每个片段被分配在特定场地

全复制式:有多个副本,每个场地有一个完整数据副本

④混合式:被分若干个数据子集,子集被安排一个或多个不同场地

       

分布式数据库的参考模式架构

外顶层
全局外模式:全局应用的用户视图

中间层

全局概念模式:描述全体数据的逻辑结构和特征

分片模式:全局数据的逻辑划分视图

分配模式:片段到物理存放地的映像

底层

局部概念模式:物理片段的逻辑结构和特征

局部内模式:局部概念涉及本场地的物理存储

分布透明性

分片透明性:最高级别透明性,无需考虑数据分片(全局概念与分片模式

位置透明性:只需考虑数据分片情况,无需考虑数据分片位置

局部数据模型透明性:了解全局数据、副本复制及位置分配(分配与局部概念)

分布式数据库管理系统

全局数据库管理系统 GDBMS 核心

全局数据字典 GDD

局部数据库管理系统 LDBMS

通信管理 CM

分布式查询
集中式数据库查询代价是CPU和I/O

分布式数据库查询代价是通信

分布式查询优化考虑:操作执行顺序

操作执行算法(连接和并操作)

不同场地数据流动顺序

分布式事务管理

恢复控制:基于两阶段的提交协议

并发控制:基于封锁协议

并行数据库

并行数据库结构:

共享内存结构 内存冲突  互联网共享一个公共的主存储器

共享磁盘结构 通信代价  独立的主存储器,通过互联网共享磁盘

无共享结构 访问代价 拥有独立的主存储器和磁盘,不共享任何资源

层次结构 顶层无共享结构,底层共享内存/磁盘结构

一维划分

轮转法 扫描整个关系负载均衡,并行性,降低查询效率

散列划分 哈希索引,点查询数据扫描,数据划分不均衡

范围划分 记录排序,范围查询点查询数据分布不均匀,并行能力下降

多维数据划分:CMD多维划分、BERD多维划分法、MAGIC多维划分法

并行算法

并行顺序:①重新按排序属性进行范围划分,然后划分排序,最后将结果合并

②并行外排序归并算法

并行连接:划分连接、分片—复制连接

云计算数据库架构

云:公共云、私有云、混合云

Saas:软件即服务 PaaS:平台即服务

云计算平台:Amazon的AWS、Google的GAE、开放云Hadoop

云计算通过集中所有的计算资源,采用硬件虚拟化技术

为云计算使用者提供强大的计算能力、存储和带宽等资源

云数据库体系结构:

文件系统Google File System

分布式编程环境Map/Reduce

分布式锁机制Chubby

大规模分布式数据库Big Table

云数据库缺点:数据安全、云管理、因特网依赖

Big Table数据模型:行关键字(Row Key)、列关键字(Column Key)、时间戳(Timestamp)

特点:表中的行关键字可以是任意字符串

  列族是由列关键字组成的集合,是访问控制的基本单元

  时间戳记录BigTable每一个数据项包含不同版本数据的时间标识

XML数据库

XML:可扩展标识语言,用标签来描述数据;标记电子文件,具有结构性

XML数据库三种类型:XML (能处理XML的数据库)

NXD (纯XML数据库)

HXD (混合XML数据库)

优势:能够对半结构化数据进行处理。

提供对标签和路径的操作。

能清晰地表达数据的层次特征

加入FOR XML子句实现XML格式返回查询结果

第十四章 数据仓库与数据挖掘

决策支持系统的发展

数据仓库是核心

操作型系统是基本数据源

决策支持系统是数据的需求者

两类数据:原始数据(操作)、导出数据(分析)

数据仓库技术概述

数据仓库的特性:面向主题、集成、不可更新、时间特性

主题与面向主题

主题称为分析主题或分析领域

数据主题仓库的实现采用关系型数据库技术

数据仓库的其他特征

集成是最为重要的特性,分为数据抽取、转换、清理、装载

不可更新 随时间变化

ETL(Extract  Transfrom  Load)是实现数据集成的主要技术,

即填充更新数据仓库的数据抽取转换装载的数据采集过程

数据仓库的体系结构与环境

层次结构:操作型数据、操作型数据存储、数据仓库、数据集市、个体层数据

功能结构:数据处理、数据管理、数据应用

数据仓库的数据组织

数据组织结构:早期细节级、当前细节级、轻度综合级、高度综合级

粒度:粒度越大,表示综合程度越高

  粒度越小,细节程度越高,能回答的查询越多

数据分区

按照时间标准划分

系统层分区 数据库系统提供的机制(逻辑上是表,物理上是不同分区)

应用层分区 应用代码实现(不同分区在逻辑和物理上是不同的表)

如何分区:开发者和程序员控制

元数据

描述数据的结构、内容、链和索引等

技术元数据 细节

业务元数据 业务

操作型数据存储

ODSⅠ:数据更新频率级。

ODSⅡ:数据更新频率小时级。

ODSⅢ:数据更新频率级。

ODSⅣ:根据数据来源方向和类型区分

基本特点:面向主题的、集成的、可变的、 当前或接近当前的。

目的是支持:即时(up-to-sencond)联机分析应用、全局型PLTP应用

设计与建造数据仓库

数据仓库的需求设计

传统的系统开发生命周期 SDLC是典型的需求驱动开发生命周期

数据仓库环境的系统开发生命周期 CLDS是典型的数据驱动开发生命周期

数据仓库的数据模型

概念(E-R图)

逻辑(关系模型或多维数据模型)

物理三级:①不包含纯操作型数据

  ②需要扩充关键字,加入时间属性

  ③需要增加导出数据

数据仓库的设计步骤

概念模型设计

技术评估与环境准备工作

逻辑模型设计

物理模型设计

数据生成与应用实现

数据仓库运行与维护

数据集成:抽取、转换、清理、装载

数据仓库的运行与维护

基本思路:根据某种维护策略,在一定条件下触发维护操作;

维护操作捕捉到数据源中的数据变化;

通过一定策略对数据仓库中的数据进行相应的更新操作,以保持两者的一致性。

维护策略

实时维护:立即更新数据仓库的数据

延时维护:视图被查询完成更新

快照维护:触发条件是时间

捕捉数据源变化

触发器、修改数据源应用程序、通过日志文件、快照比较法

导出数据的刷新

方法:①维护对象的数据源对其进行重新计算。

②数据源的变化量在维护对象原有数据的基础上进行添加和修改增量维护

用户不可存取数据仓库时间的长短是衡量数据维护效率的重要指标。

将维护分为“聚集”和“更新”两个部分

元数据

采用元数据库来存储和管理元数据

联机分析与多维数据模型

联机分析处理或在线分析处理(OLAP)特点: 快速、可分析和多维

多维分析基本操作

钻取与卷起 对某一维向更细节层方向观察数据,卷起则反之

切片 局部数据的显示

旋转 改变维方向,不同视角数据;数据交叉

OLAP实现方式

多维数据库(MOLAP) 多维数组为基本存储结构。

关系数据库(ROLAP) 关系表表示和存储。(星形模式或雪花模式)

混合型的(HOLAP) 结合MOLAP与ROLAP。具有最好的查询性能。

数据挖掘技术

数据挖掘步骤

数据准备:数据选取、数据预处理、数据变换

数据挖掘:先确定挖掘的任务,其次决定挖掘算法

结果解释评估:剔除冗余或无关的模式

常见的挖掘任务:分类预测任务(决策树、贝叶斯),描述型任务(聚类、关联)

关联规则挖掘

阶段一:寻找高频项目组

阶段二:由高频项目组中产生关联规则

支持度:定义了属性在整个数据库中所占的比例

置信度:定义了发现规则的轻度

分类挖掘

预测数据对象的离散类别

①建立分类函数,构造分类器

②将分类函数对未知类别标记的数据项进行分类操作

聚类挖掘

聚类(无监督):对集中的数据进行分组,组内的数据尽量相似而不同组间的数据尽可能不同。

方法:统计(贝叶斯法和非参数法)、

机器学习(决策树法和规则归纳法)、分类算法(训练集、测试集、验证集

神经网络(BP算法)、

面向数据库

聚类算法(K-means算法)

时间序列分析

用时间排序的一组随机变量(数据演变分析)

角度:①一元时间序列和多元时间序列

          ②等间隔时间序列和不等间隔时间序列

         ③平稳时间序列和非平稳时间序列

你可能感兴趣的:(数据库,数据仓库,数据库架构)