版权声明:本文为CSDN博主「RanLZ」的原创文章,转载请附上原文出处链接。
p s . ps. ps.按照瀑布模型原理设计
D B A S DBAS DBAS 的生命周期由以下五个基本活动组成:
3 3 3条设计主线:
设计阶段分为以下3个步骤:
描述用户需要组织的信息内容形成数据字典。
数据字典包括以下五部分:
描述系统要做什么。
数据处理需求分析结果可表示为数据流图 ( D F D ) (DFD) (DFD) 或 D B A S DBAS DBAS 应支持的各种数据处理事务规范。
事务规范包括以下几方面的事物描述信息:
数据需求分析与数据处理需求分析的结果组织在一起,可以构成数据字典文档,该文档也被成为数据规范说明书。
应用领域业务规则(又称为业务处理逻辑、业务逻辑)描述了应用领域中的业务功能、处理流程和步骤。
描述系统应当做到什么程度。
D B A S DBAS DBAS 性能指标:
影响 D B A S DBAS DBAS 性能的主要因素:
如果需求分析阶段的任务是解决“干什么”的问题,那么系统设计阶段的任务是确定”怎么干“。
数据库概念模型可能采用多种方式表示,如最常见的 E R ER ER 方法。
主要包括日常维护、系统监控与分析、系统性能优化调整、系统进化升级等。
需求分析是描述待开发的系统所要完成的功能。
目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其他系统元素接口细节,定义软件的其他有效需求。
软件产品的下列特性使得需求获取困难重重:
通常,一个计算机应用系统的需求分析工作是在系统分析人员与用户不断交互的过程中完成的。
结构化分析与功能建模方法主要有 D F D DFD DFD 、 I D E F 0 IDEF0 IDEF0 等。
结构化分分析方法的基本特征是 抽象 和 分解。
结构化分析及建模方法的主要优点是:
D F D DFD DFD 建模方法的核心是 数据流。
I D E F 0 IDEF0 IDEF0 描述系统功能及相互关系;
I D E F 1 IDEF1 IDEF1 描述系统信息及其数据之间的联系;
I D E F 2 IDEF2 IDEF2 用于系统模拟,建立动态模型。
组成 I D E F 0 IDEF0 IDEF0 图的基本元素是矩形框和箭头。
矩形框代表功能活动,写在矩形框中的动词短语描述功能活动的名称,活动的编号按照要求写在矩形框右下角指定位置。
输入与控制二者的作用是有区别的,输入强调被活动消耗或变化的内容,而控制强调对活动的约束条件。
每个箭头所表示的数据用一个名词短语描述,数据可以是信息或对象。
U M L UML UML 方法采用面向对象思想建模,其中的用例模型用于描述系统功能需求。
概念设计是数据库设计的核心环节。通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
依据:数据库概念设计以需求分析的结果为依据,即说明书、 D F D DFD DFD 图以及需求阶段收集到的应用领域中的各类报表等。
结果:概念设计需要构造信息模型( E R ER ER )与编写概念设计说明书。
概念设计是 D B DB DB 设计的核心环节。概念数据模型是对现实世界的抽象和模拟。
I D E F 1 X IDEF1X IDEF1X 侧重分析、抽象和概括应用领域中的数据需求,被称为数据建模方法。
数据库逻辑设计的任务是把数据库概念设计的结果( E R ER ER 模型),转换为具体的数据库管理系统支持的数据模型。
关系模型就是用二维表结构来表示实体及实体之间联系的模型。
关系的描述称为关系模式。关系模式由五部分组成,即它是一个五元组:R(U,D,DOM,F)。
由于 D D D 、 D O M DOM DOM对模式设计的关系不大,这里把关系模式简化为一个三元组:R
当且仅当 U U U上的一个关系 R R R 满足 F F F 时, R R R 称为关系模式 R < U , F > R R<U,F> 的一个关系
关系数据库设计的核心:关系模式的设计。
定义:设 R ( U ) R(U) R(U) 是一个属性集 U U U 上的关系模式, X X X 和 Y Y Y 是 U U U 的子集。若对于 R ( U ) R(U) R(U) 的任意一个可能的关系 r r r , r r r 中不可能存在两个元组在 X X X 上属性组相等,而在 Y Y Y 上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作 X → Y X \rightarrow Y X→Y。
普遍存在于生活中,这种依赖关系类似于数学中的函数 y = f ( x ) y=f(x) y=f(x),自变量x确定之后,相应的函数值y也就唯一地确定了。
教师号可能多值依赖课程号,因为给定一个(课程号,参考书号)的组合,可能有对应多个教师号。这是因为多个老师可以使用相同或不同的参考书上同一门课。
简单点讲,函数就是唯一确定的关系;多值依赖却。
如果 X → Y X \rightarrow Y X→Y,且 Y ⊄ X Y \not\subset X Y⊂X,则 X → Y X \rightarrow Y X→Y 称为非平凡函数依赖。
若 Y ⊆ X Y \subseteq X Y⊆X,则称 X → Y X \rightarrow Y X→Y 为平凡函数依赖。
由于 Y ⊆ X Y \subseteq X Y⊆X时,一定有 X → Y X \rightarrow Y X→Y,平凡函数依赖必然成立,没有意义,所以一般所说的函数依赖总是指非平凡函数依赖。
完全函数依赖:
成绩依赖于学号和课程号两个字段的组合;但只知道学号无法确定成绩,同理只知道课程号也无法确定成绩;只有学号和课程号组合在一起才能标识哪个学生哪门课程的成绩;
因此 (学号,课程号) → \rightarrow → 成绩 是“完全函数依赖”。
部分函数依赖:
姓名、性别和班级三个属性只依赖于主键中的学号,与“课程号”无关。
因此(学号,课程号) → \rightarrow → 姓名 是“部分函数依赖”。
课程名和学时数只依赖于课程号,
因此(学号,课程号) → \rightarrow → 课程名 是“部分函数依赖”。
班主任依赖于班级,与学号无关,与课程号也无关。又因班级依赖于学号,所以班主任间接依赖于学号。
因此,(学号,课程号) → \rightarrow → 班主任 是“传递函数依赖”。
如果某属性组的值能唯一确定整个元组的值,则称该属性组为候选码或侯选关键字。
候选码如果有多个,可以选其中的一个作为主码。
属性或属性组 X X X 不是关系模式 R R R 的码(不是主码或候选码),但 X X X 是另一个关系模式的码,则称 X X X 是 R R R 的外部码,也称外码 。
关系模式满足的约束条件称为范式。根据满足规范化的程度不同,范式由低到高分为1NF,2NF,3NF,BCNF,4NF,5NF。
概述:物理数据库设计是设计数据库的存储结构和物理实现方法。
目的:将数据的逻辑描述转换为实现技术规范,设计数据存储方案,以便提供足够好的性能并确保数据库数据的完整性、安全性、 可靠性。
物理设备上的存储结构与存取方法称为数据库的物理结构 。
数据库中的数据以文件形式存储在外设存储介质上。
一个文件在物理上可看作是存放记录的一系列磁盘块组成的,成为物理文件。
数据库的物理结构需要解决如下问题:文件组织、文件结构、文件存取、索引技术。
索引是数据库中独立的存储结构,其作用是提供一种无须扫描每个页面(存储表格数据的物理块)而快速访问数据页的方案。
索引技术是一种快速数据访问技术。
索引技术的关键:建立记录域取值到记录的物理地址间的映射关系,即索引。
目标:目标是得到存储空间占用少,数据访问效率高和维护代价低的数据库物理模式。
影响数据文件存储结构的因素:
解决办法:
数据库备份数据、日志文件备份数据用于故障恢复,使用频率低且数据量大,可以存储在磁带中。而应用数据、索引和日志使用频繁,要求响应时间短,必须放在支持直接存取的磁盘存储介质上。
派生属性指该属性取值可以根据表中其他属性的取值唯一确定。
在数据库物理设计阶段,可以根据实际需要对数据库中某些3NF、BCNF模式考虑是否可以降低其规范化程度,以提高查询效率。
软件体系结构又称软件架构,软件体系结构 = {构件,连接件,约束}。
软件体系结构是软件系统中最本质的东西。良好的体系结构必须是普适、高效和稳定的。
软件体系结构有多种风格和类型 ,如分层体系结构、模型-视图-控制器( M V C MVC MVC )体系结构、客户端/服务器体系结构等。
DBAS总体设计的任务是确定系统总体框架, 主要内容包括:
将系统从功能、层次/结构、地理分布等角度进行分解,划分为多个子系统,定义各子系统功能;设计系统的全局控制,明确各子系统间的交互和接口关系。
C / S C/S C/S 结构将数据库管理功能与数据库应用相分离,将 D B M S DBMS DBMS 数据管理功能在客户端和服务器之间进行合理的分布和配置。其中数据库服务器完成DBMS核心功能。而客户端或应用服务器则负责完成用户交互功能,接受用户数据,根据业务规则处理应用任务,生成并向数据库服务器发出数据操作请求,然后从数据库服务器接受数据查询结果并通过客户端反馈给用户。
两层 C / S C/S C/S 结构的数据库应用系统,其特点:
三层浏览器/服务器( B / S B/S B/S )结构,数据处理功能分解并分布在表示层、功能层和数据层三个层次上,分别由 W e b Web Web 浏览器、 W e b Web Web 应用服务器和数据库服务器来实现,其特点是:
三层 B / S B/S B/S 结构将人机交互、应用逻辑处理和数据管理三类功能相互分离,提高了系统的可维护性。
应用软件总体设计得到的系统总体结构和分层模块结构可以用模块结构图表示。
为保证DBAS功能性能顺利实现,总体设计阶段需要对软硬件设备做出合理选择,并进行初步配置设计。
软硬件选型涉及内容包括:
考虑以下因素:
任务:从系统的角度,规划 D B A S DBAS DBAS 的业务流程,使之符合客户的实际业务需要。
DBAS的各项业务活动具有逻辑上的先后关系,可将它们表示成一个操作序列,并用业务流程图表示。
在总体设计结果基础上,将DBAS应用软件进一步细化为模块/子模块,组成应用软件的系统-子系统-模块-子模块层次结构,并从结构、行为、数据三方面进行设计。
功能角度DBAS系统通常划分四个层次实现:
人机界面设计,影响系统易用性。目前第四代是 W I M P WIMP WIMP(窗口、图标、菜单、指示器)与 W e b Web Web 技术、多任务处理技术相结合。
设计原则:
设计原则:高内聚低(松)耦合,即构件单一原则;构件独立功能;接口简单明确;构件间关系简单,过于复杂,就细化,分解。
高内聚和松耦合是相互矛盾的,分解程度越粗的系统耦合性越低,分解越细的系统内聚度越高。
设计内容:结构,行为,数据,接口,故障处理、安全设计,系统维护和保障等。
任务:针对 D B A S DBAS DBAS 的数据处理需求设计用于操作数据库的各类事务。
事务概要设计核心在于辨识和设计事务自身处理逻辑,注重流程,不考虑与平台相关、具体操作方法和事务实现机制。
一个完整的事务概要设计包括事务名称、访问的关系表及其数据项、事务逻辑(事务描述)、事务用户(使用、启动、调用该事务的软件模块和系统)。
人机界面采用原型迭代法合适,三个步骤:
设计各模块内部处理流程和算法、具体数据结构、对外详细接口等。
主要保护方式:
数据库的完整性指数据库中数据的正确性、一致性及相容性。
方法:设置完整性检查,即对数据设置一些约束条件(如实体完整性、参考完整性、用户自定义完整性)。
完整性约束条件作用对象:列(类型、范围、精度、排序)、元组(记录中各属性之间的联系约束)、关系(若干记录间、关系集合与集合之间的联系)三种级别。
DBAS中,完整性约束功能包括完整性约束条件设置和检查。
并发访问:事务在时间上重叠执行。
常用技术:封锁技术,一段时间禁止某用户对数据对象做某些操作以避免数据不一致的问题。
基本的封锁一般包括排他锁( X X X 锁)和共享锁( S S S 锁)两种类型。
不可避免带来死锁问题,可以考虑以下原则:
数据库恢复的基本原理:利用存储在系统其他存储器上的冗余数据(即数据备份)来重建。
数据库备份与恢复策略:
常见的数据加密传输手段:
实施:购买第三方中间件产品整合是一个快速有效的解决方案。
管理层面安全措施。
DBAS实施阶段主要包括以下工作:
数据定义语言DDL.
创建数据库应该考虑:
应该先测试DBMS的恢复功能,做好数据库转储和恢复工作。
U M L UML UML 是一种基于面向对象的可视化的通用( G e n e r a l General General )建模语言,该方法结合了 B o o c h Booch Booch , O M T OMT OMT , 和 O O S E OOSE OOSE 方法的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验的概念和技术。
UML只是一种建模语言,不是一种建模方法。
建模方法应包括建模语言和建模过程两部分:
UML由语义(自然语言)与表示法(可视化标准符号)组成。
其语义定义在一个四层建模概念框架中:
视图是对系统的模型在某方面的投影,注重于系统的某个方面。
UML中包括五种视图:
UML2.0有十三种不同的图:
活动图主要描述系统、用例和程序模块中逻辑流程的执行次序,并行次序。最适合描述系统或子系统的工作流程。
活动图用于低层次程序模块的作用类似于流程图,但活动图可以描述并行操作,而流程图只能描述串行操作。
一张活动图中有且只能有一个起点,可有多个结束点。
系统需求:用户心中的真正期望。
用例模型是把满足用户需求的所用功能表示出来的工具。
用例模型由用例、角色和系统三部分组成。
通用化关系:指把某些角色的行为抽取出来作为通用行为,这些通用行为构成超类。
角色是与系统交互的人或其他实体。所谓“与系统交互”指的是角色从系统中接收消息,或是向系统提交消息。一个角色可以执行多个用例,反过来,一个用例可以被多个角色使用。角色是类,所以它拥有与类相同的关系描述。在用例图中用通用化关系来描述角色之间的行为。
通用化关系是指把某些角色的共同行为抽取出来作为通用行为,这些通用行为构成它们的超类。这样在定义某一具体角色时,仅仅定义其不同的行为。角色之间的通用化关系用带空心三角形(作为箭头)的直线表示,箭头的方向指向超类。
用例代表一个完整的功能,是所有动作的集合。动作是系统的一次操作,如与角色通信、进行计算,在系统内部进行的工作都可以称为动作。
用例用椭圆表示,用例位于系统边界的内部。用例与角色有连接关系,此关系属于关联又称为通信关联。这种关联表明哪种角色能与该用例通信。关联关系是双向的一对一关系,表示不仅角色不仅可以与用例通信。用户也可以与该角色通信,表示方法是一条连接角色和用例的带箭头直线。
用例之间存在关系,包括扩展、使用、组合三种:
ps. u s e s uses uses 和 e x t e n d s extends extends 是 U M L 1.1 UML1.1 UML1.1 中的 s t e r e o t y p e s stereotypes stereotypes(构造),它们在 U M L 1.3 UML1.3 UML1.3 (Rose2003中已经舍弃了 u s e s uses uses 关系)中被修订为 i n c l u d e include include(代替了原有的 u s e s uses uses )和 e x t e n d extend extend;
系统内部结构一般分为静态结构和动态结构。
在UML中,用类图来描述系统静态结构,用顺序图和通信图来表示系统动态结构。
类图主要表达的是问题领域的概念模型。类图由类名、属性及操作组成。
属性包括属性的名称、类型和缺省值。 U M L UML UML 规定其语法为:可见性 名称: 类型=缺省值 {约束性}
操作描述了类的动态行为,在 U M L UML UML 中,操作的语法定义如下:可见性 名称(参数表):返回类型表达式{约束性}
如果类和类之间的关联是单向的则称为导航关联。导航关联采用实体箭头连接两个类,只有箭头所指的方向上才有这种关联关系。
如果关联上没有角色名,则隐含着用类名作为角色名。
角色具有多重性,表示有多少对象参与该关联。多重性表示参与对象的数目的上下界限制。*代表0到无穷大,“1”是“1…1"的简写,"6…10"表示6到10个对象。没有明确标识关联的重数则为1。
关联类通过一根虚线与关联连接,用于描述关联可能需要记录的一些信息
聚集是一种特殊的关联,它表示类之间整体与部分的关系。部分可以参加多个整体则构成共享聚集,整体拥有部分,部分与整体共存则构成了组成关系。
共享聚集表示为空心菱形,组成表示为实心菱形。
人们将具有共同特性的元素抽象成类别,并通过增加其内涵进一步分类。
在面向对象方法中前者被称为一般元素、基类元素或父元素,将后者称为特殊元素或子元素。
有两个元素 X X X 和 Y Y Y ,如果修改元素 X X X 的定义会引起元素 Y Y Y 定义的修改,则称元素 Y Y Y 依赖于元素 X X X 。
表示同一事物的两种描述之间的关系。对同一事物的两种描述建立在不同的抽象层上。比如定义了某种抽象数据类型,然后将其实现为某种语言中的类,那么抽象定义的类型与用语言实现的类之间就是精化关系,这种情况叫实现,用带空心的三角形的虚线表示。
针对每一个特定的用例,如何用类图所规范的对象,来完成用例交付的任务,就必须用顺序图表达。
顺序图有两个坐标轴:纵向表示时间的持续过程,横向表示对象,每一个对象用矩形框表示,纵向的虚线表示对象在序列中的执行情况,称为对象的“生命线”。
对象间的通信用对象生命线之间的水平消息线表示,消息线的箭头说明消息的类型,单步、异步、简单。
顺序图中后面发生消息应该比前面发生的线画的低一些,以表示他们之间的时间关系。
通信图是交互图的一种,也称为协作图。
通信图显示对象间组织交互关系和链接。不侧重交互顺序,用序列号来确定消息及其并发线程的顺序。
通信图中主要元素基本和顺序图相同,只是在消息的传递上要特别表达消息的传递是由哪一个对象到另外一个对象。
顺序图强调时间,通信图强调空间。
对象图是类图的实例,描述特定时间中所有对象在系统中的结构,是一个快照。
状态图用来描述有关事件或对象的状态转移。
状态图只能有一个起始状态,可有多个结束状态。
状态间的转移由事件驱动。
当一个对象或某一个事件有非常复杂的状态转换时,可以用状态机图描述这个过程。
当状态的转换由时间因素决定时,使用时间图来描述状态的变化。
描述时间驱动的状态转换,即当状态维持多少时间后转移。
宏观设计指将涉及的焦点放在研究比较大范围中的元素之间的联系,如包、命名空间、子系统等。
一个良好的命名空间,便于开发人员理解,并使得各个命名空间之间能够松耦合,而命名空间内则可满足高内聚的要求。
包图表示系统中不同包、命名空间或不同项目间的彼此关系。也就是逻辑层次上与实体层次上的关联性。
是将活动图和顺序图嫁接在一起的图 。
以活动图为基础,在控制流间连接交互图,从而将所有交互图关系呈现出来。
交互概述图可以把不同的交互图结合在同一张图中来表达。
外部系统的整合关系着项目的成败。
在项目开始前,最好将待开发的系统与外部系统的关系做一个初步的定义。
复合结构图最重要的元素是部件,一个部件可以代表某个实体组件,也可以代表一个子系统。
复合结构图适用于系统间的沟通接口,适合做构架师在初期阶段评估系统复杂度的工具,也可以是系统维护的参考图。
组件图用来表示系统的静态实现视图。
用来展现一组组件间的组织和依赖,用于对源代码、可执行的发布、物理数据库等的系统建模。
部署图又叫配置图,描述系统中硬件和软件的物理配置情况与系统体系结构。
部署图说明实体组件,如可执行程序,将如何部署到实际的计算机中。
部署图要在项目进行集成测试前提供。
SELECT [DISTINCT] [TOP n] select_list
-- 查询指定的列
[INTO new_table]
--将查询结果创建到新表
[FROM table_source]
--查询行所在的表
[WHERE search_conditition]
--指定返回行的搜索条件
[GROUP BY group_by_expression]
--指定查询结果的分组条件
[HAVING search_condition]
--指定组或聚合函数的搜索条件
[ORDER BY order_expression [ASC|DESC]]
--指定结果集的排序方式
[COMPUTE expression]
--在结果集的末尾生成汇总数据行
TOP n [percent][WITH TIES]
简单 C A S E CASE CASE 函数的语法格式为:
CASE 测试表达式
WHEN 布尔表达式1 then 结果表达式1
WHEN 布尔表达式2 then 结果表达式2
……
WHEN 布尔表达式n then 结果表达式n
[ELSE 结果表达式n+1]
END
搜索 C A S E CASE CASE 函数的语法格式为:
CASE
WHEN 布尔表达式1 then 结果表达式1
WHEN 布尔表达式2 then 结果表达式2
……
WHEN 布尔表达式n then 结果表达式n
[ELSE 结果表达式n+1]
END
包含 I N T O INTO INTO 子句的 S E L E C T SELECT SELECT 语句的语法格式为:
SELECT 查询列表序列 INTO <新表名>
FROM 数据源
…… --其他行过滤、分组等子句
注意:表名前加#为局部临时表,##为全局临时表,只有表名为永久表。
例子:SELECT * INTO #HD_Customer FROM Table_Customer WHERE ……
并运算(UNION):将多个查询结果合并为一个结果集。
语法:
SELECT 语句1
UNION [ALL]
SELECT 语句2
UNION [ALL]
……
SELECT 语句n
使用UNION注意:
交运算:返回同时在两个集合中出现的记录。
语法:
SELECT 语句1
INTERSECT
SELECT 语句2
INTERSECT
……
SELECT 语句n
差运算:返回第一个集合中有而第二个集合中没有的的记录。
语法:
SELECT 语句1
EXCEPT
SELECT 语句2
EXCEPT
……
SELECT 语句n
子查询是一条包含在另一条 S E L E C T SELECT SELECT 语句里的 S E L E C T SELECT SELECT 语句。外层的 S E L E C T SELECT SELECT 语句叫外层查询,内层的 S E L E C T SELECT SELECT 语句叫内层查询(或子查询)。子查询总是写在圆括号中。
包含子查询的语句通常采用以下格式中的一种:
--实例:
SELECT Cname,Address FROM Table_Customer
WHERE Address IN(SELECT Address FROM Table_Customer WHERE Cname=‘王晓’)
AND Cname!= ‘王晓’
--实例:
--查询单价最高的商品的名称和单价
SELECT Goodname,SaleUnitPrice FROM Table_Goods a WHERE SaleUnitPrice=
(SELECT MAX(SaleUnitPrice) FROM Table_Goods)
--实例:
--查询购买了单价高于2000元商品额顾客的会员卡号。
SELECT DISTINCT CardID FROM Table_SaleBill WHERE EXISTS(SELECT * FROM Table_SaleBillDetail WHERE SaleBillID=Table_SaleBill.SaleBillID AND UnitPrice>2000)
在SELECT的选择列表中嵌入了一个只返回一个标量值的子查询。
--实例:
SELECT Cname,Address
(SELECT COUNT(*) FROM Table_SaleBill a
JOIN Table_Customer b ON a.CardID=b. CardID
WHERE CustomerID=‘C001’)AS TotalTimes
FROM Table_Custmer
Where CustomerID=‘C001’
也称为内联视图,是将子查询作为一个表处理,产生的新表为“派生表”。
--实例:查询至少买了G001和G002两种商品的顾客号和顾客名。
SELECT CustomerID,CName
FROM (SELECT * FROM Table_SaleBill a
JOIN Table_SaleBillDetail b
ON a.SaleBillID=b. SaleBillID
WHERE GoodsID=‘G001’) AS T1
JOIN (SELECT * FROM Table_SaleBill a
JOIN Table_SaleBillDetail b
ON a.SaleBillID=b. SaleBillID
WHERE GoodsID=‘G002’) AS T2
ON T1.CardID=T2.CardID
JOIN Table_Customer c ON c.CardID=T1. CardID
SQL Server 中,一组行被称为一个窗口。
与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值,开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口。
与聚合函数不同的是,开窗函数在聚合函数后增加了一个OVER 关键字。
开窗函数的调用格式为: 函数名(列)OVER(选项)
其他排名函数
公用表表达式(CommonTableExpression,CTE):将查询结果集指定一个临时名字,这些命名的结果集就是公用表表达式。
--格式:
WITH <common_table_expression>[,…n]
<common_table_expression>::=
expression_name[(column_name [,…n])]
AS
(SELECT语句)
SQL Server将数据库映射为一组操作系统文件:
两种类型的文件组:
注意:
定义数据库的数据文件和日志文件所需信息:
增长方式:可指定文件是否自增长(默认)。
最大大小:文件增长的最大限制。默认无限制。
创建数据库一般有两种方式:
按比例收缩整个数据库大小。
ALTER DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property
| NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}
ALTER DATABASE STU_DB
MODIFY FILE(NAME=student_data, SIZE=8MB)
ALTER DATABASE STU_DB
ADD FILE(NAME=student_data2,
FILENAME=‘E:\Data\student_data2.ndf’,
SIZE=6MB,FILEGROWTH=0)
DBCC SHRINKDATABASE
例1:DBCC SHRINKDATABASE(students,20)
收缩数据库,该数据库所用文件都有20%可用空间
DBCC SHRINKFILE
例2:DBCC SHRINKFILE(students_data1,4)
收缩数据库到4MB大小
ALTER DATABASE STU_DB
REMOVE FILE student_log1
注意:
作用:
将分离的数据库重新附加到数据库管理系统中。
必须指定主要数据文件的物理存储位置和文件名。
CREATE DATABASE ……
FOR ATTACH|ATTACH_REBUILD_LOG
例:
CREATE DATABASE students
On(FILENAME=‘F:\Data\Students_data1.mdf’)
FOR ATTACH
架构(Schema,也称模式),是数据库下的一个逻辑命名空间,是数据库对象的容器,一个数据库包含一个或多个构架,同一个数据库内架构名唯一。
CREATE SCHEMA [<构架名>]
AUTHORIZATION<用户名>
DROP SCHEMA [<构架名>]
分区表是将表中的数据按水平分割成不同子集,并将数据子集存储在数据库一个或多个文件组中。物理上将大表分成几个小表,逻辑上还是一个大表。
合理使用分区能提高数据库性能。
是否创建分区取决于表当前数据量大小,以及将来数据量,还取决于表中数据的操作特点。
表包含(或将包含)以多种不同方式使用的大量数据
数据是分段的,比如以年份分隔。
三个步骤:
CREATE PARTITION FUNCTION
CREATE PARTITION SCHEME
标准视图也称虚拟表,返回结果集与基本表一致。标准视图的结果集不永久存放;
建立唯一聚集索引的视图,称为索引视图,也称为物化视图。建立索引后,视图的结果集存放在数据库中。
对基本表的修改会反映到索引视图存储的数据中。
创建聚簇索引前视图必须符合的条件:
CREATE VIEW;WITH SCHEMABINDING; CREATE
UNIQUE CLUSTERED INDEX …
使用T-SQL语言编写代码时,有两种方式存储和执行代码:
存储过程:即存储在数据库中供所有用户程,序调用的子程序。
存储过程分为三类:
用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。
扩展存储过程是 SQL Server 可以动态装载并执行的动态链接库 (DLL)。扩展存储过程使您得以使用象 C 这样的编程语言创建自己的外部例程。对用户来说,扩展存储过程与普通存储过程一样,执行方法也相同。
存储过程的优点:
存储过程定义包含两个主要组成部分:
删除存储过程:
DROP PROCEDURE
用户定义函数:类似于编程语言中的函数,其结构与存储过程类似,但函数必须有一个 R E T U R N RETURN RETURN 子句,用于返回函数值。
两类用户定义函数:标量函数和表值函数。前者返回单个数据值,表值函数返回一个表。
CREATE FUCTION [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
[;]
各参数说明:
注意:
CREATE FUCTION [schema_name. ] function_name
( [ { @ parameter_name [AS] [type_schema_name. ] parameter_data_type
[ =default ] }
[,···n]
]
)
RETURNS TABLE
[AS ]
RETURN [ ( ] select_stmt [ ) ]
[;]
参数说明:select_stmt是定义内联表值函数返回值的单个SELECT语句;表值函数没有返回变量,没有函数体,只返回一个查询结果。
使用内联表值函数与视图类似,其作用相当于带参数的视图。
创建多语句表值函数:
CREATE FUCTION [schema_name. ] function_name
( [ { @ parameter_name [AS] [type_schema_name. ] parameter_data_type
[ =default ] }
[,···n]
]
)
RETURNS @ return_variable TABLE <table_type_definition>
[AS ]
BEGIN
fuction_body
RETURN
END
[;]
<table_type_definition>:: =
( { <column_definition> <column_constraint>
| <computed_column_definition>}
[<table_constraint>][,···n]
)
参数说明:
调用建多语句表值函数:在SELECT的FROM子句中使用。
DROP FUNCTION { [schema_name. ] function_name} [,···n ]
触发器:特殊存储过程,在对表中的数据进行UPDATE、INSERT、DELETE操作时自动触发执行,常用于保证业务规则和数据完整性,增强数据完整性约束能力。
SQL Server 2008支持三种类型的触发器:
适用场合:
CREATE TRIGGER trigger_name ON
{ table | view }
[WITH ENCRYPTION]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ]
[ DELETE ] }
AS
sql_statement[…n]
参数说明:
注意:
DROP TRIGGER
实例
DROP TRIGGER OperateCon
DROP TRIGGER UnitPriceConsistent
DROP TRIGGER DeleteCust
游标:实现对SELECT结果集的逐行处理。
游标结果集(SELECT返回结果集)与游标当前行指针(指向结果集中某一行)
特点:定位特定行;从当前位置检索一行或多行;支持当前行数据修改;对修改结果提供不同级别的可见性支持。
ISO标准语法:DECLARE cursor_name[1] CURSOR FOR select_statement[2]
参数说明:[1]INSENSTITIVE:创建临时副本,对临时表操作,否则对基本表;SCROLL:范围,否则只支持NEXT;[2]READ ONLY:禁止更新 UPDATE 更新列指定列或所有。
OPEN cursor_name
FETCH [1]FROM cursor_name [INTO @ variable_name[,…n]]
CLOSE cursor_name
可以再次打开。
DEALLOCATE cursor_name
释放分配给游标的所有资源。
数据库安全性不同于数据的完整性。
保护数据免受意外或故意的丢失、破坏或滥用。
安全计划需要考虑:可用性损失,机密性数据损失,私密性数据损失,偷窃和欺诈,意外的损害。
包括四阶段:
认证是一种鉴定用户身份的机制。授权是将合法访问数据库或数据库对象的权限授予用户的过程。包括认证用户对对象的访问请求。
DBMS通常采用自主存取控制和强制存储控制两种方案来解决安全控制问题。
又称自主安全模式, 通过SQL的GRANT,REVOKE,DENY语句来实现。
权限种类:维护权限与操作权限(语句权限与对象权限)
用户分类:系统管理员(sa)、数据库对象拥有者、普通用户。
为避免自主存取模式下数据的“无意泄露”,采取强制存取控制。
DBMS将全部实体分为主体和客体两大类。
敏感度标记被分为若干级别,例如绝密,秘密,可信和公开。
主体的敏感度标记被称为许可证级别,客体的敏感度标记被称为密级
通用安全性分级模式:D类最小保护,C类自主保护,B类强制保护,A类验证保护
自主保护:C类分为两个子类C1和C2,C1安全级别低于C2
强制保护:B类分为三个子类B1 B2 B3,B1安全级别最低,B3最高
验证保护:A类要求安全机制是可靠的且足够支持对指定安全策略给出严格的数学证明。
审计跟踪实质上是一种特殊的文件或数据库。系统自动记录用户对常规数据的所有操作。
审计跟踪对数据安全有辅助作用。
统计数据库提供基于各种不同标准的统计信息或汇总数据。
统计数据库安全系统用于控制对统计数据库的访问。
统计数据库允许用户查询聚合类型的信息,如总和、平均等,但不允许查询个人信息。
例1:创建SQL server 身份验证的登录账户
create login SQL_User1 with password = '12345678'
例2:创建Windows身份验证的登录账户,从Windows域账户创建[TEST\Win_User2]登录账户
create login [TEST\Win_User2] from windows
例3:创建SQL server身份验证的登录账户。要求该用户首次连接服务器时必须更改密码
create login SQL_User3 with password = '123456789'
must_change
例4:启用或禁用的登录账户
alter login SQL_User1 enable
例5:修改登录账户的密码
alter login SQL_User1 with password='12345'
例6:更改账户名
alter login SQL_User3 with name = 'NewUser'
例7:删除登录账户
drop login SQL_User2
用户有了登录帐户,只能连接到SQL服务器,并不具有访问数据库的权限。
让登录账户成为数据库用户的操作是映射 。一个登录账户可以映射为多个数据库中的用户。 默认情况下,新建立的数据库只有一个用户dbo,他是数据库的拥有者
例8 使SQL_User2登录账户成为某数据库中的用户,并且用户名同登录名
create user SQL_User2
例9 首先创建名为SQL_JWC且具有密码的SQL Server身份验证的服务器登录名,然后在test数据库中创建与此登录名对应的数据库用户JWC 、
create login SQL_JWC with password='123456'
go
use test
go
create user JWC for login SQL_JWC
go
--启用guest用户
grant connect to guest
--禁用guest用户
revoke connect to guest
drop user user_name
登录账户成为合法用户后没有任何操作权限,就需要为用户授予数据库数据及其对象的操作权限。
操作权限 | 使用说明 |
---|---|
select | 允许用户查询数据 |
insert | 允许用户插入数据 |
update | 允许用户修改数据 |
delete | 允许用户删除数据 |
references | 如果用户要插入数据的表上有外键约束,而用户在外键所引用的表上没有select权限,则拥有该权限的用户能够向这样的表插入数据 |
execute | 允许用户具有执行存储过程和标量函数的权限 |
例10:授予用户RosaQdm对Address表具有select权限
grant select on Address to RoseQdm
例11:授予用户 RosaQdM 对 HumanResources. EmployeeInfo 存储过程具有 EXECUTE 权限
GRANT EXECUTE ON OBJECT :: HumanResources. EmployeeInfo To RosaQdm
例12:使用 GRANT OPTION 选项,授予用户 Wanida 对 vEmployee 视图中 EmployeeID 列具有 REFERENCES 权限。
GRANT REFERENCES ( EmployeeID)ON vEmployee
To Wanida WITH GRANT OPTION
例13:拒绝用户 RosaQdm 对 Person. Address 表具有 select 权限
DENY select ON OBJECT :: Person. Address to RoseQdm
例14:拒绝用户 RosaQdM 对 HumanResources. EmployeeInfo 存储过程具有 EXECUTE 权限
DENY EXECUTE ON HumanResources. EmployeeInfo To RosaQdm
例15:拒绝 GRANT OPTION 选项,授予用户 Wanida 对 HumanResources. vEmployee 视图中 EmployeeID 列具有 REFERENCES 权限。
DENY REFERENCES ( EmployeeID)ON OBJECT :: HumanResources. vEmployee
To Wanida CASCADE;
例16:撤销用户 RosaQdm 对 Person. Address 表具有 select 权限
REVOKE select ON OBJECT :: Person.Address to RoseQdm
例17:撤销用户 RosaQdM 对 HumanResources. EmployeeInfo 存储过程具有 EXECUTE 权限
REVOKE EXECUTE ON HumanResources. EmployeeInfo FROM To RosaQdm
例18:授权用户 RosaQdM 具有创建表的权限。
GRANT CREATE TABLE TO RosaQdM
例19: 授权用户 user1 和 user2 都具有创建表和视图权限。
GRANT CREATE TABLE, CREATE VIEW TO user1,user2
例20:拒绝用户 user1 具有创建表的权限。
DEMY CREATE TABLE TO user1
例21:收回用户 RosaQdM 具有创建表的权限。
REVOKE CREATE TABLE FROM RosaQdM
定义:一组具有相同权限的用户就是角色。
SQL Server 2008中,角色分为预定义的系统角色和用户角色两种。
定义在数据库级别上,存在于每个数据库中。用户加入固定数据库角色就具有数据库角色权限。
CREATE ROLE
实例:
CREATE ROLE MathDept [AUTHORIZATION Software]
注意:为用户定义角色授权、添加、删除用户定义的角色中的成员与固定数据库角色一致。
DROP ROLE
实例:
DROP ROLE MathDept
Oracle的安全机制分为数据库级的安全控制、表级、列级、行级的安全控制。
数据库级的安全性通过用户身份认证和授予用户相应系统权限来保证;
表级、列级、行级的安全性通过授予或回收对象权限保证。支持集中式、分布式、跨平台应用。
Oracle系统通常设置两级安全管理员:
按权限大小划分为DBA用户和普通用户。
例32:建立一个Oracle 数据库用户 user1.
CREATE USER use1 IDENTIFIED BY u66771
DEFAULT TABLESPACE student(存储在student表空间)
QUOTA 5M ON student(限制使用空间为5M)
例33:将user1用户对student表空间的空间使用额增至60MB
ALTER USER user1
QUOTA 60M ON student
将自己的密码修改为w12345
ALTER USER user
1 IDENTIFIED BY w12345
例34:从数据库中删除USER1用户及其所拥有的全部数据库对象。
DROP USER user1 CASCADE
三种默认特权:
用于维护表级、行级、列级数据的安全性。
实例:
GRANT all ON dep TO user1
GRANT select(tno,tname,sal) ON teacher TO
user2
DBAS进入运行维护阶段的主要任务:
首先必须有各种相应的应用程序,其次各应用程序与DBMS都需要在操作系统(OS)支持下工作。
维护工作包括:
重组不修改数据库原有设计的逻辑结构和物理结构,重构部分修改模式和内模式
数据库的监控分析:指管理员借助工具监测DBMS的运行情况,掌握系统当前或以往的负荷、配置、应用等信息,并分析监测数据的性能参数和环境信息,评估DBMS的整体运行状态。
根据监控分析实现不同,分为:
根据监控对象不同,分为:
空间使用情况变化带来的问题:
SQL Server数据库中 一个逻辑上的数据库直接和一组物理上的数据文件对应,没有表空间概念。
DBMS对空间的管理包括:创建数据库空间、更改空间大小、删除空间、修改空间状态,新建、移动、关联数据文件等。
数据库性能优化是DBAS系统上线后最常见的运行维护任务之一。
进行数据库性能优化时,首先要确定优化目标,一般从数据库运行环境、参数调整、模式调整、数据库存储优化、查询优化几个方面考虑。
一般来说,可以从外部环境、调整内存分配、调整磁盘I/O、调整资源竞争等几个方面着手改变数据库参数,提高其性能。
外部调整:数据库性能和外部环境有很大关系,主要外部条件包括:CPU(CPU的处理能力是衡量计算机性能的一个标志)、网络(大量的SQL数据在网络上传输会导致网速变慢)。
CPU使用情况判断依据:对于一台数据库服务器,如业务空闲时使用率超过90%。说明服务器缺乏CPU资源,如高峰时CPU使用率仍然低,说明服务器CPU资源充足。
解决方案;增加CPU数量或者终止需要许多资源的进程。
调整内存分配:调整相关参数控制数据库内存分配,很大程度改善数据库系统性能。
调整磁盘I/O:数据库性能优劣的重要度量是响应时间。
改善方法:令I/O时间最小化,减少磁盘上文件竞争带来的瓶颈。
调整竞争:
数据库的规范化过程:高效率利用存储空间,减少数据的冗余,减少数据的不一致性。
问题:规范化关系解决了数据维护的异常,并使数据冗余最小化,但会导致数据处理性能下降。
反规范化:将规范化关系转换为非规范化的关系的过程。
反规范化方法:增加派生冗余列、增加冗余列、重新组表、分割表和新增汇总表等方法。都会破坏数据完整性。
采用反规范化技术从实际出发均衡利弊。
增加的列由表中的一些数据项经过计算生成。
作用:查询时减少连接操作,避免使用聚合函数。
例如:销售单据明细表(单据编号,商品编号,单价,数量,总价),总价=单价*数量,属于派生性增加冗余列。
在多个表中增加具有相同语义的列,常用来在查询时避免连接操作。(外码不属于这种情况)
当用户经常查看的某些数据是由多个表连接之后才能得到,就可以考虑先把这些数据重新组成一个表,这样在查询时会减少连接提高效率。
大量执行报表等汇总操作会影响性能。
为降低汇总操作的时间,将频繁使用的统计中间结果或最终结果存储在汇总表中,从而降低数据访问量和汇总操作的CPU计算量。
如:日销售额统计表
定义:包括一个查询结果的数据库对象,是预先计算并保存表连接或聚集等耗时较多的操作结果。(一个定期刷新数据的视图,自动刷新或人工刷新)
适用于多个数据量较大的表进行连接操作及分布式数据库中在多站点的表进行连接时使用。
物化视图还可以进行远程数据的本地复制(物化视图的存储也称为快照),用于实施数据库间的同步。
聚集是物理存储表中数据的可选择的方法。
一个聚集是一组表,将经常一起使用的具有同一公共列值的多个表中的数据行存储在一起,由公共列构成聚集码。
作用:最小化必须执行的I/O次数。
注意:将记录插入聚集的表之前,必须建立聚集索引,且按聚集码进行索引;对于剧集中的多个表,聚集值只存储一次。
劣势:聚集表的插入、更新、删除性能差,具体使用要权衡。
效率低下的SQL语句常常是系统效率不佳的主要原因。常用优化方法如下:
权衡:索引提高查询效率,索引增加系统开销。
建立索引原则:
索引使用原则:
索引建立完成后,运行期间还需调优。
调优的目的:动态地评估需求。
索引调整和修改的原因:
ORDER BY和GROUP BY语句的执行涉及排序,磁盘排序开销很大,应利用索引自动以适当的次序产生输出。
影响优化器的因素:
嵌套查询中,对表的顺序存取严重影响查询效率。
优化方法:对连接列进行索引,或使用并集来避免顺序存取。
原因:消耗较多CPU资源进行字符串匹配。
将表的一个子集进行排序并创建临时表。
原因:非顺序磁盘存取最慢。使用以数据库排序功能为基础的SQL替代非顺序存取。
原因:左(右)外连接包含与NULL数据匹配,相比内连接,代价可能很高。
尽量使用自带返回参数,而非自定义返回参数,减少不必要参数,避免数据冗余。
原因:占用较多系统资源。尤其是大规模并发情况下,很容易使得系统资源耗尽而崩溃。
一旦将多个处理放入事务,会降低系统处理速度。将频繁操作的多个可分割的处理过程放入多个存储过程中,这样就大大提高系统响应速度。
用来监视SQL Server事件的多用途监控工具(性能、存储过程、T-SQL语句运行等监控)。结果存储在一个跟踪文件中,可通过分析文件诊断问题。
测试数据库工作负荷(一组在数据库中执行的T-SQL语句),给出优化建议。
事务内部故障:事务故障导致数据不一致,分为预期的(大部分)和非预期的。
又称软故障,运行期间,由于硬件故障、数据库软件及OS漏洞、突然断电等故障,导致数据不一致。
解决办法:重启后,撤销(UNDO)所有未提交的事务;重做(REDO)所有已提交的事务;
又称硬故障,运行期间由于磁头碰撞、磁盘损坏、强磁干扰、天灾人祸等,使得数据丢失的一类故障。导致物理存储设计损坏,数据文件及数据全部丢失,破坏性最大。
容错策略:软件容错及硬件容错。
使用数据库备份及事务日志文件,通过恢复技术,恢复数据库到备份结束时的状态。若故障导致事务日志文件丢失,则不能完全恢复。
一种方案是使用双物理存储设备,如双硬盘镜像。缺点:自然灾害或机房水灾、火灾导致双硬盘同时损坏,则失去保护作用。
另一种方案是设计两套相同的数据库系统,通过数据库软件机制,同步变化数据。
病毒是恶意的计算机程序,破坏OS及数据库系统(破坏数据文件为主)。
解决办法:防火墙、杀毒软件、数据库备份文件。
无论哪种故障,恢复的基本原理是冗余。
数据库恢复:把数据库从错误状态恢复到某一已知的正确状态。
在DBMS中,数据库恢复子系统占10%以上。
恢复机制涉及两个问题:如何建立冗余数据;如何利用这些冗余数据实施数据库恢复。
建立冗余据的技术:
数据备份、登记日志文件、数据库复制、数据库镜像、为段设立保存点以及使用后备段与现行页表来支持对段的保存等。最常用的是数据备份和登记日志文件。
数据转储即数据备份:指DBA或DBMS定期复制数据库,并将其存放到其他介质的过程。这些保存的副本被称为后援副本或后备副本。
静态转储:期间系统不能运行其他事务,不允许任何存取、修改活动。
静态转储保证数据的一致性,但降低了数据库的可用性。转储和事务是互斥的。
动态转储:即允许转储和事务并发执行。
动态转储不能保证转储数据的一致性。
动态转储+日志文件(记录转储期间各事务对数据库的修改活动记录):既保证数据一致性又提高了数据库的可用性。
DBMS运行中,将所有事务的修改操作登记到日志文件。
作用:事务故障恢复和系统故障恢复必须使用日志文件。
在动态转储方式中必须建立日志文件。
在静态转储方式中也可使用日志文件。
两种格式:
需要记录的内容:
日志记录的内容包括:事务标识和被更新的数据块
检查点的作用:最大限度地减少数据完全恢复时必须执行的日志部分。
在日志中增加检查点记录,增加一个“重新开始文件”。
检查点记录的内容:建立检查点时刻正执行的事务清单;这些事务最近一个日志记录的地址。
重新开始文件记录的内容:各个检查点记录在日志中的地址。
由于数据库运行的硬件故障、机房电力故障、机房自然灾害等,要求从硬件级别对DBMS进行保护。
从DBMS运行所需要的各种环境出发,分析支撑数据库系统运行的环节。
相关度最紧密的技术:数据库存储保护技术,服务器容错技术及数据库镜像与容灾技术。
RAID:廉价冗余磁盘阵列,多块磁盘构成的一个整体。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROnrtopg-1581906147983)(en-resource://database/2053:0)]
RAID依靠冗余技术 数据保护:
镜像冗余
即把所有的数据复制到其他设备。
额外开销大:更多的磁盘、控制器、电缆。
校验冗余
对成员磁盘的数据执行异或(XOR)操作,得到其校验值,并存放在另外的校验盘上。
实现复杂,但比镜像冗余占据的空间小。
RAID根据所采用的方法不同,分为RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6, RAID-7,RAID-10,RAID-50,RAID-60。
引入服务器容错原因
解决服务器硬件异常问题。
服务器容错技术简介
采用两台相同的服务器,共享存储设备。(双机热备,Active-Standby)
两台服务器之间会有私有网络进行心跳检测。
服务器接管过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DJztPdnJ-1581906147984)(en-resource://database/2057:0)]
其他服务器容错技术
硬件级别:自行设计制造的专用软硬件架构。
软件级别:专门的服务器级别容错技术,如Oracle提供了RAC架构。
引入数据库镜像原因
前面几种恢复技术都必须及时正确地转储数据库。
数据库镜像简介
是一种用于提高数据库可用性的解决方案,它根据DBA的要求,自动把整个数据库或关键数据复制到另一个磁盘上。
数据库镜像分类
工作方式
“数据库镜像会话”中,主体服务器和镜像服务器作为“伙伴”进行通信和协作。在会话中扮演互补角色。一旦出现故障,使用“角色切换”过程来互换主体服务器和镜像服务器。
SQL Server数据库镜像简介
SQL Server数据库镜像是将数据库事务处理从一个SQL Server数据库移到不同的SQL Server数据库。
镜像的复制是一个备用的复制,不能直接访问,只用来进行错误恢复。
“见证服务器”使镜像服务器自动识别。
两种运行模式 :“高安全性模式”及运行模式。
SQL Server数据库镜像提供三种实现方式:
高可用性。两台服务器同步事务写入,支持自动错误恢复。
高保护性。两台服务器同步事务写入,手工错误恢复。
高性能。两台服务器写入不同步,手工错误恢复。
[1] 何玉洁,刘乃嘉. 全国计算机等级考试三级教程——数据库技术. 2019版. 北京:高等教育出版社,2019.
[2] 小贤贤233. 计算机三级数据库技术笔记. CSDN, 2020.
[3] 233网校. 计算机三级数据库技术. 233网校,2020.