数据库结构变更是否有版本控制系统?

10 浏览
0 Comments

数据库结构变更是否有版本控制系统?

我经常遇到以下问题。

我正在对项目进行一些更改,需要在数据库中创建新表或列。我进行数据库修改,继续我的工作。通常情况下,我会记下这些更改,以便它们可以在实时系统中复制。然而,我并不总是记得我做了什么更改,也不总是记得写下来。

所以,我推送到实时系统,并得到一个明显的错误,即没有NewColumnX,唉。

无论这是否是这种情况的最佳实践,是否有用于数据库的版本控制系统?我不关心具体的数据库技术。我只想知道是否存在一个这样的系统。如果它恰好可以与MS SQL Server一起使用,那就太好了。

admin 更改状态以发布 2023年5月23日
0
0 Comments

我有点老派,使用源文件创建数据库。实际上有2个文件 - project-database.sql 和 project-updates.sql - 第一个用于架构和持久化数据,第二个用于修改。当然,两个都在源代码控制下。

当数据库更改时,我首先在 project-database.sql 中更新主要架构,然后将相关信息复制到 project-updates.sql 中,例如 ALTER TABLE 语句。接下来,我可以将更新应用于开发数据库,进行测试和迭代,直到做好为止。然后,检查文件,再次测试,并应用于生产。

此外,我通常在数据库中有一个表 - Config - 例如:

SQL

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);
INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

然后,我将以下内容添加到更新部分:

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

只有重新创建数据库时,db_version 才会改变,db_revision 给我一个指示数据库距离基线有多远。

我可以将更新保留在自己单独的文件中,但是我选择将它们全部混合在一起,并使用剪切和粘贴提取相关部分。需要进行一些更多的清理工作,例如,从 $Revision 1.1 $ 中去除 ':' 以冻结它们。

0
0 Comments

在Ruby on Rails中,存在一个名为“迁移”(migration)的概念——用于快速更改数据库的脚本。你可以生成一个迁移文件,其中包含增加数据库版本的规则(例如添加列)和降低版本的规则(例如删除列)。每个迁移都有一个编号,并且有一张表来跟踪当前的数据库版本。要升级迁移,你需要运行一个名为“db:migrate”的命令,该命令会查看你的版本并应用所需的脚本。你可以采用类似的方式进行迁移降级。迁移脚本本身保留在版本控制系统中——每当你更改数据库时,你会提交一个新的脚本,并且任何开发人员都可以将其应用于将他们的本地数据库升级到最新版本。

0