数据库版本控制
版本控制是软件开发中的标准实践,通常应用于代码。将此概念扩展到数据库,可以确保数据库模式、存储过程、触发器、视图乃至引用数据的变更都能被跟踪记录,从而实现安全协作并在需要时回滚。数据库版本控制的重要性
跟踪变更记录
每次模式或数据修改都会被跟踪,因此您可以查看是谁修改了什么以及原因。这对于审计和故障排除至关重要。
促进协作
多个开发人员可以同时处理数据库,而不会覆盖彼此的更改。
简化部署
数据库变更可以与应用程序代码一起进行版本控制,从而确保开发、测试和生产环境的一致性。
回滚功能
如果变更引入了错误,您可以回滚到之前的数据库版本。
支持持续集成/持续部署 (CI/CD)
借助版本控制的迁移,自动化数据库部署变得更加可靠。
常用方法
基于状态的方法
将数据库模式的当前状态存储在文件中(代表表、视图等的 SQL 脚本)。
工具可以将当前数据库与存储的状态进行比较,并自动生成迁移脚本。
优点:更容易可视化当前结构;适合小型团队。
缺点:当多个开发人员进行更改时,合并冲突可能会比较棘手。
基于迁移的方法
将单个更改跟踪为增量脚本(迁移)。
每个迁移按顺序应用以更新数据库。
优点:精确控制数据库演进;易于与 CI/CD 集成。
缺点:需要仔细管理迁移脚本;如果多个开发人员并行创建迁移,则可能会发生冲突。
数据库版本控制工具
Liquibase – 支持基于状态和基于迁移方法的开源工具;跟踪 XML、YAML、JSON 或 SQL 格式的变更集。
Flyway – 一款轻量级的基于迁移的工具,支持 SQL 脚本或 Java 代码;可与 CI/CD 流水线完美集成。
Alembic – 一款用于 SQLAlchemy 项目的 Python 工具;基于迁移。
Redgate SQL Source Control – 与 SQL Server 的 SSMS 集成;支持基于状态的版本控制。
DbUp – 用于部署增量 SQL 脚本的 .NET 库。
最佳实践
将所有数据库更改纳入版本控制
包括架构、迁移、参考数据和存储过程。
使用有意义的迁移名称
例如:2026-01-24-add-users-table.sql。
自动化部署
使用 CI/CD 流水线在生产环境部署之前,将迁移应用到测试/预发布环境。
测试迁移
确保回滚脚本经过测试;避免在没有备份的情况下执行破坏性操作。
保持架构和应用程序代码的一致性
这可以防止应用程序逻辑和数据库结构不匹配。
基于迁移方法的示例工作流程
开发人员创建一个新的迁移:
-- 2026-01-24-add-users-table.sql
CREATE TABLE Users (
Id INT PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100) UNIQUE
);
将迁移提交到版本控制系统(Git)。
CI/CD 流水线将迁移应用到暂存数据库。
针对更新后的 兄弟手机清单 数据库运行测试。
验证通过后,将迁移应用到生产环境。
简而言之,数据库版本控制为数据库开发带来了与代码版本控制相同的严谨性和安全性,从而在生产系统中实现更好的协作、可追溯性和可靠性。
頁:
[1]