软件过程有一个过程方法叫迭代过程。对数据库的版本化,我们也可以采用这种类似的方法------后一个版本的脚本依赖于前一个版本的脚本,即当你要把数 据库升级到第n个版本时,你必须先把数据库升级到第(n-1)个版本,以此递归。
我对对于数据库版本化的具体思路如下:
1.只存在一个基线版本;
2.在基线版本后的修改都是修正版本;
3.版本号遵从的格式通常是:主版本号.次版本号.修正号
修正版本SQL脚本的命名规则(表,视图,存储过程,用户,角色,规则,默认值, 用户定义的数据类型,用户定义的函数,全文目录);
a.涉及表、视图、存储过程、触发器的增加 版本号为:V1.1.0.0。(主版本号不变,次版本号加一,修正号归零)
b.涉及表、视图、存储过程、触发器的更改、删除 版本号为:V1.2.1.0。(主版本号和次版本号不变,修正号加一)
c.向表中增加、删除初始化数据的变化 版本号为:V1.2.1.1。(在修正号后增加一个标识)
4.SQL脚本的格式:
每一个版本号为一个目录,目录下分别存放处理表、视图、存储过程等的SQL脚本;
/Database
├─V1.0.0.0
│ Full-Text.sql
│ Procedures.sql
│ Tables.sql
│ Views.sql
│
├─V1.1.0.0
│ Tables.sql
│ Views.sql
│
├─V1.1.1.0
│ Full-Text.sql
│ Procedures.sql
│ Tables.sql
│ Views.sql
│
├─V1.1.1.1
│ Tables.sql
│
└─V1.1.2.0
Full-Text.sql
Procedures.sql
Tables.sql
Views.sql
5.关于数据库中的版本说明及更新记录:
在每个数据库中新建一个表,名称为DBVersion,用于记录数据库经历的版本记录以及最新的版 本信息;
可用于SQL Server 2000的SQL代码
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DBVersion]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[DBVersion]
GO
CREATE TABLE [dbo].[DBVersion] (
[DB_ID] [int] IDENTITY (1, 1) NOT NULL ,
[DB_Version] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[DB_Update_Time] [datetime] NOT NULL ,
[DB_Remark] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
6.编写程序以实现以下功能:
读取Database目录的各个版本中的SQL文件,以实现升级或者新建数据。
对于升级数据库需要能 够根据DBVersion表中的信息自动选择需要导入的SQL文件;或者提示用户当前可以升级到哪一些版本。
同时还需要有校验Database中 版本的文件是否完整(包括版本完整和文件完整,这就需要存在一个校验文件);