《测试驱动数据库开发》——2.5 实现
本节书摘来自异步社区出版社《测试驱动数据库开发》一书中的第2章,第2.5节,作者:测试驱动数据库开发,更多章节内容可以访问云栖社区“异步社区”公众号查看。
测试驱动数据库开发
至此,前面描述的方式能够让读者初步地刻画和实例化数据库的类。下面将介绍一些实现一个数据库的类的方法。本书先从总体需求入手,然后提供一个数据库类的伪代码实现,可以将其移植到任何平台上。
让我们来看看一个良好的数据库的类的实例化机制应该是什么样子的。了解这些需求能够让你编写自己的机制,或者当你面对的需求明显不同于本书描述的情况时,可以调整本书建议的机制,从而适应你的具体情况。
我已经确定了4个需求,并用4个以字母C开头的单词来分别描述之,称其为“4C机制”,希望这个词儿能流行起来。
4C机制如下所述,数据库的类的实例化机制必须是完整的(Complete),对于一个特定的版本,该机制执行了所有必要的变更;该机制必须是正确的(Correct),同样的变更从不在数据库上施加两遍;该机制必须是一致的(Consistent),每一次变更的实施,都是以完全相同的顺序来执行;最后,该机制必须是可控的(Controllable),只要想构建一个特定的数据库,读者就一定能够规定一个目标版本来构建之。
2.5.2 数据库实例化机制的伪代码用可重复的方式来可靠地更新数据库的算法其实出奇地简单。经过多年的完善,至少与开始时搞出的东西相比,我总是惊讶于它是如此地简单。
UpgradeDatabase( db , design , target version ) current version = current version of db required versions = versions from design after current version and up through target version sort required versions in ascending order for each version in required versions execute transition for version against db update current version of db to version number of version
上述伪代码的实现细节将留给读者来完成,但是本书通常用XML文档的形式来表达数据库的设计,并且把已经施加到数据库上的变更版本存储在一个数据库表中。这样,数据库的“当前”版本就能够通过选择该表最近插入的行来推断。
2.5.3 输入的伪代码上述算法的输入可以是一个XML文件或一些其他格式的文本文件。只要数据库的每一个版本可以被确定下来,被适当地排序,并能在数据库实例进行实例化时声明其所需的步骤,任何格式的输入都是可以的。
为了说明这个问题,下面给读者一段简单的XML,包含了用于构建和升级一个小型数据库的脚本:
database version id="1" CREATE TABLE FOO(A I NT) /version version id="3" CREATE TABLE BAR(C CHAR(30)) /version version id="2" ALTER TABLE FOO ADD B NVARCHAR(20) /version /database
如上所示,XML文件包含了可用来排序、标识和执行SQL语句的所有信息,这些信息用来构建数据库或将数据库更新到任何特定的版本。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- x64 驱动 创建 dpc 定时器
- Win64 驱动内核编程-31.枚举与删除映像回调
- Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
- .net Core使用Orcle官方驱动连接数据库 C#参考教程 http://www.csref.cn
- 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
- 【DB2】DBeaver连接DB2数据库驱动安装时报错Error resolving dependencies Maven artifact ‘maven:/com.ibm.db2:jcc:RELEA
- 《数据驱动的网络分析》——6.2 R语言基础知识
- 《数据驱动的网络分析》——6.6 分析:统计假设检验
- 外设驱动库开发笔记15:DHT11温湿度传感器驱动
- nodejs驱动mongodb 实现数据增删改查,将数据库数据渲染在页面,通过表单项数据库新增数据
- 用况驱动的系统测试用例设计
- 应急响应工作苦干不如巧干 警报驱动的安全运营该淘汰了
- 51驱动AD9850/AD9851—DDS信号发生器
- STM32驱动AHT10&OLED显示温湿度
- 【正点原子Linux连载】第三十章 U-Boot使用实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- (原)Ubuntu16中安装nvidia的显卡驱动