找回密码
 立即注册

QQ登录

只需一步,快速开始

willning
超级版主   /  发表于:2023-7-11 14:19  /   查看:2220  /  回复:0
本帖最后由 willning 于 2023-7-11 14:35 编辑

在官方发布的活字格开发最佳实践和大量客户的实践案例中,我们不难发现,在绝大多数高价值项目中,出于性能和管理性考虑,大家都选择了MySQL等外联库而不是内置的SQLite数据库。

image.png167376402.png

那么您该如何管理外联库的表设计和内置数据,在初次发布或升级时,更高效的实现从开发环境到测试环境再到生产环境的数据库迁移,最终达到三者在数据库结构和内置数据(字典表、配置表等)的一致呢?再进一步,我们该如何为数据库建立起版本管理的机制,就像活字格工程中的页面和服务端命令那样,确保每一个数据库结构或内置数据的变更都有据可查呢?这里有三个层次,您可以根据项目管理习惯和项目的可维护要求来选择。

Level 1:使用设计器调整表结构并发布
使用活字格设计器发布应用时的“覆盖服务器数据库”功能,支持简单的数据合并与迁移,这个功能不但可以在内置库上使用,也能用来实现外联库的数据合并。具体操作方式上,和内置库几乎完全一致。为了应对更复杂的场景,活字格还在数据合并设置界面提供了【部署SQL脚本】功能,点击即可查看活字格基于开发环境连接的数据库(工程文件中保存的连接字符串)、目标数据库(服务器上管理控制台里保存的连接字符串)和用户操作,自动生成的差分脚本。
活字格这套差分脚本生成机制比较成熟,但考虑到数据库的敏感性,在生产环境上执行前,建议先检查该部署脚本,确保无误。
image.png558113402.png

这种做法可以实现数据库中表结构的升级,如果表结构调整的操作集中在设计器上,活字格还能提供基础的版本管理能力,虽然管理的对象不是可执行的SQL而是记录数据库列信息的JSON,但也能满足最基础的项目管理需求。
image.png81029356.png


Level 2:使用数据库对比工具生成差分脚本
活字格设计器提供了简单的表结构差分功能,但无法检测数据变更,也无法处理类似索引等数据库元素。所以,在实际项目中,我们通常需要引入更专业的数据库对比工具,先后完成数据库结构同步和内置数据同步。

如果您使用的是MySQL、PostgreSQL,Navicat是个好选择(单一数据源类型的标准版要近两千块,有点小贵)。点击“工具”→“结构同步”,先同步数据表结构和索引等设置。
image.png193751830.png

然后点击“工具”→“数据同步”,选择包含有内置数据的表,执行同步即可。
image.png162995604.png


如果您使用的是Microsoft SQL Server,除了Navicat外还有免费的选择,Visual Studio的SSDT组件。在安装VS(不是VS Code)的时候,您需要选择“其他工具集”下的“数据存储和处理”,这样在右侧就会出现SQL Server Data Tools了。
image.png715157470.png

安装SSDT后,打开Visual Studio,创建一个“SQL Server数据库项目”。然后点击“工具”→“SQL Server”→“新建结构比较”和“新建数据比较”。操作体验与Navicat类似,这里不再展开介绍。
image.png309616393.png

Level 3:手动管理数据库差分脚本并进行版本管理
对于一些小型的项目,或者团队中安排有固定人员来进行数据库开发的情况,上述方法是没有问题的。但如果项目规模较大,每一期中数据库变化较多;添加的列或表的数据需要按照特定策略基于现有数据自动生成;或者团队中有多名开发人员会基于自身开发的功能模块对数据库结构和内置数据进行调整时,推荐您参考应用开发的方式,自定义差分脚本,并且对脚本进行协同和版本管理。

大的流程上:
1. 开发人员使用数据库开发工具,手工编写和维护数据库的差分脚本,通常包含创建表、修改表、创建索引等,这些脚本需要使用Git做版本管理
2. 在CI/CD的更新测试环境管线中,这些差分脚本首先会在测试环境上执行,与应用一起做测试
3. 测试无误后,再通过CI/CD的发布上线管线,在生产环境中执行差分脚本。

在通常的项目中,我们建议您为每一个版本创建一个文件夹来存放差分脚本,然后按照模块(或参与数据库设计的后端开发人员)创建对应的sql脚本文件。考虑到更新测试环境管线的特点,这里的脚本文件需要支持重复执行,以为A表增加B列为例,您需要在差分脚本中先判断B列是否存在,然后执行添加列或修改列的操作。


事实上,将数据库设计纳入版本管理是企业软件开发的最佳实践,不论是编码开发还是用活字格,在这点上是一致的。所以,市面上有很多付费或开源版的工具,可以帮我们进一步简化SQL差分文件的生成、管理和执行。如果您使用的是MySQL、PostgreSQL等,推荐您使用Liquibase;如果您使用的是SQL Server,带有SSDT模块的Visual Studio会更实用一些。

总结
上述三种做法的对比如下:

Level 1(半覆盖发布) Level 2(数据库对比工具)Level 3(手工编写差分脚本)
是否需要引入第三方工具No Yes(数据库比对工具) Yes(数据库开发工具)
学习门槛高(需要学习SQL)
覆盖范围低(仅支持列) 中(结构、数据) 高(结构、数据、默认值规则等)
版本管理 支持 不支持 支持


怎么样?你的项目准备使用哪个Level的数据库设计管理方式呢?


0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部