网站公告列表

  没有公告

加入收藏
设为首页
联系我们
您现在的位置: 山东在线 >> 生活百问 >> 电脑互联网 >> 软件开发 >> 正文
  用版本控制工具将数据库版本化-软件研发           
用版本控制工具将数据库版本化-软件研发
作者:佚名 文章来源:不详 更新时间:2008-6-19 16:03:23
一,概述
版本化数据库的起点——创建一个数据库Schema基线,这个基线是一些数据库脚本(包括create table,alter table,drop table,insert data,update data,delete data等)。这些脚本可以位于同一.sql文件中,也可根据其它规划分别位于不同文件中,例如将视图脚本,初始化数据脚本,建表脚本分别置于不同的文件中。

二,版本化数据库过程
这一章内容会稍微多一点,也会掺杂一点理论知识叙述,需稍微耐心一点看J。

数据库版本化与代码版本化的区别在于数据库中的生产数据是现场(即用户)创造的,当我们的表结构发生改变时,不能直接用drop table然后再create table,因为这样会导致生产数据丢失。而代码则完全由开发人员创造,可以用完全覆盖的方式升级。由于这点不同,致使数据库在版本化的过程中必然要采用与代码不同的方法。
软件过程有一个过程方法叫迭代过程。对数据库的版本化,我觉得也可以采用这种类似的方法------后一个版本的脚本依赖于前一个版本的脚本,即当你要把数据库升级到第n个版本时,你必须先把数据库升级到第(n-1)个版本,以此递归。方法很简单,但实际的过程并不会太顺利,设想以下一个场景来描述一些常见的困难和问题。

人力系统在V2.0.14版本时,有一张表叫demo_user,这张表有两个字段id和name,在我们进行V2.0.16版本的开发时,用户提出了要有cn_name(中文名)信息,并且这个信息不允许为空,如果为空,则必须用“无中文名”显示。这是个很简单的需求,我们只需要在demo_user表中添加一个cn_name字段即可------alter table demo_user add cn_name varchar2(64) not null; 这个看似没有错误的语句,实际上是行不通的-----因为现场的这张表是有数据的,我们执行这条语句时会报下图所示的错误。
有经验的程序员可能想到了解决方法------将本来一条可以搞定的SQL分成三条,分别为:
alter table demo_user add cn_name varchar2(64) null;
update demo_user set cn_name = '无中文名';
alter table demo_user modify cn_name varchar2(64) not null;

再设想,在V2.0.16版本时,日本有家公司要用我们公司的人力系统,我们的数据库如何直接从无到V2.0.16版本?
很容易想到的一个方法是利用递归法,从第一个版本的脚本开始跑,一直跑到V2.0.16J。如果我们中间经历了1000个版本,那就跑1000遍吧J。实施的要哭了!面对重复性劳动时,人们都会抽象出一种比较好的方法来处理,就像设计模式中的状态模式代替无穷的if else语句一样,我们用各版本的全量脚本来代替增量脚本。这话不太好懂,以上面场景的demo_user表为例来说明一下吧。
以增量脚本的形式,我们会有三条SQL:
alter table demo_user add cn_name varchar2(64) null;
update demo_user set cn_name = '无中文名';
alter table demo_user modify cn_name varchar2(64) not null;
但以全量脚本的形式,我们只有一条SQL:
create table demo_user
(
ID VARCHAR2(18) not null,
NAME VARCHAR2(60) not null,
CN_NAME VARCHAR2(64) not null
);
看到上面的全量和增量,有何感想?是不是觉得全量脚本只能用于新增局点,而已有局点,只能用增量脚本?是的,全量脚本就是给新增局点用的,但是目前,我觉得我们还不需要提供全量脚本------原因是,维护全量脚本给我们带来的实惠要远远少于我们的付出。

再设想一个场景,日本局点不需要cn_name,他需要的是jp_name(日本名字)--------都说日本人bt,不过这个需求一点也不btJ。如何做到呢?… …不累赘了,直接地说吧,此场景说明了,我们的脚本需要做到差异化控制,所以差异化控制功能必须纳入到控制范围,至于如何做到差异化控制?接着看吧!

更详细信息,请点击查看原文。
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 你可能想要关注的其它信息
     喝茶有什么好处
     各种不同的水果对人体分别有哪些…
     什么东西含钙最高
     大豆及其制品的营养特点
     怎样可以胖点?
     吃香蕉到底是会发胖还是减肥
     哪些食物是碱性的
     西红柿减肥的时候能吃么
     饭后最该知道的几件事
     加班熬夜族的饮食误区
     盲目进补对身体有害无益
     滋润食疗做个水嫩女人
     过完肥年也可不增肥
     一周在外就餐7次有生命危险
     吃到意犹未尽时最健康
     十种食物给你好睡眠
     女性贫血的经典食疗方
     蔬菜煮熟食用更有营养
     血型不同饮食也不同
     完美胸形 用食品缔造…
     男子性福八种药膳做法(组图)
     比营养比热量,馒头米饭大PK
     吃什么不得高血脂?
     防感冒喝点果汁醋
     一周在外就餐7次有生命危险(图)
     七种最难留住的营养
     冬季进补,百变不离汤水(图)
     男女冬季健康饮食大全(组图)
     “抗癌蔬菜排行榜”谁是冠军?
     不同颜色水果有不同功效 橘色提高免疫力…
     心血管病人多吃三种食物
     牛奶加糖煮会引起腹泻
     巧用牛奶来“食疗”
     7 个喜爱巧克力的理由(图)…
     给头发吃点水果
     眼疾患者“食疗菜单”(图)
     一个具攻击性的年轻人食谱(图)
     给“错误食物搭配”平反(图)
     【破竹寺】直观体验装备转档规则
     大话作坊你了解多少
     小编推荐:帐号防盗攻略
     『客栈新闻』新五环-新体会
     打造大闹,重铸经典
     大话每天必做二三事之新人必看
     有关各类“暴点”汇总
     如何炼造血攻女人
     4大攻法宠
     6坐骑有鸡肋存在吗?
    【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
    相 关 文 章
    30岁IT人价值在哪里?-软…
    程序结构中的两点重要元…
    企业信息化:用IT解决沟…
    从中国男足看项目管理 -…
    WebSphere 多媒体课件:…
    解析分布式访问控制方法…
    UML(统一建模语言)死亡的…
    恼人不休的问题:什么是…
    DSL:单一语言开发的终结…
    回顾成长历程,顿悟思考…
    山东在线 Copyright@2006-2008 鲁ICP备07018514号 中国网通集团公司山东省分公司