基于JFinal开发系统在数据库版本管理方面的问题

mcfly_sj 发布于 2015/07/20 16:41
阅读 246
收藏 1

@JFinal Hi,all JFinaler,向大家请教个关于数据库管理的问题:在JFinal中,ActiveRecord的简易配置及Model的五无特性确实极大减少了代码量,提高了开发效率,但我在数据库表维护及部署时遇到些困惑,具体场景如下:开发人员各自有本地的数据库,测试环境有个共有的库,每个开发完成模块功能后将各自改动的表更新至共有库,但部署人员要从测试环境更新至生产环境时就得知道具体的表差异信息,实施过程偶有遗漏,特别是当系统有几十上百张表时。不知大家有什么好方式解决这种代码与数据库不一致的情况没?目前我的做法是:

1、各开发人员将表维护的操作记录至changeLog.txt,实施人员根据此文档更新至生产;

2、将改动过的表导出成sql文件,与工程放在一起进行版本管理;

3、改为在PowerDesigner里设计,使用里面自带的版本管理(目前只是用Navicat管理数据库);

4、找一专门针对数据库版本管理的工具(有看到SQL Server的,还没找到MySQL的)。

加载中
0
JFinal
JFinal

给个简单的方案:

1:在项目资源路径下创建一个目录为:db_migrate。在此目录下面放置对数据库修改进的sql文件,每条sql占一行,例如:ALTER TABLE account ADD money INT default 0;  文件名以数字递增,数据字代表版本号,与下面谈到的db_migrate表中的version字段对应,扩展名为".sql"。

2:在数据库中创建一张表为:db_migrate,添加三个字段:version、status、createAt。version 与前面提到的文件名对应,status为1表示该版本已成功更新,0为更新失败。

3:写一个插件 public class DbMigratePlugn extends IPlugin,大致功能是先去资源路径 db_migrate 下去找文件,得到一个文件名集合,这些文件名就是要迁移的数据库文件的版本号,然后通过这些版本号去 db_migrate数据表中去找这些集合,如果未找到或者以前更新未成功,则执行这些".sql"文件中的命令。

    通过以上改造,当资源文件有变动时项目会自动迁移数据库。


mcfly_sj
mcfly_sj
多谢提议
0
负心杏

navicat for mysql 的工具->结构同步,可以直观显示出两个数据库结构差异,并以sql语句方式体现,可复制、执行

话说我们开发都是用同一个库。

mcfly_sj
mcfly_sj
嗯,这功能不错,多谢提醒。
返回顶部
顶部