项目在开发阶段,通常会有多个开发人员协同开发。版本问题可以通过git或svn等版本管理工具来完成,但是关于数据库方面呢。
若开发人员A新增、删除某些表,或修改表属性,其他人员如何同步该更新?在资源Resource目录下维护一个sql,开发人员A负责保证其为最新的sql吗?但是开发人员B就需要每次更新项目的时候,检查其sql文件是否被修改,极为麻烦。
为此,可维护一个json文件,当有sql的增删改时,在该json文件的末尾处进行添加,项目启动时,会初始化该文件,若检查到更新,会执行相应的sql。
该json文件,考虑到实际应用,命名为sql_update.json。放置在resource目录下。
{
"2017010514120001": [
{"table": "DROP TABLE IF EXISTS build_timmer;"
},
{"table": "CREATE TABLE build_timmer (
execute_time varchar(10) NOT NULL COMMENT '执行时间,HH:mm',
commands varchar(30) NOT NULL COMMENT '执行指令',
state int(1) unsigned zerofill NOT NULL COMMENT '状态,0-未启用,1-已启用',
PRIMARY KEY (timmer_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
},
{"sql": "update ds_sys_organizationinfo set hotel_group_id = '8a2d96f35408756301540ff97ccb002e'"
}
],
"2017010614120002": [
{"table": "DROP TABLE IF EXISTS build_timmer;"
},
{"sql": "update ds_sys_organizationinfo set hotel_group_id = '8a2d96f35408756301540ff97ccb002e'"
},
{"sql": "update ds_sys_organizationinfo set hotel_group_id = '8a2d96f35408756301540ff97ccb002e'"
}
]
}
2017010514120001 : 代表日期。该日期同时在项目的配置表里有相应字段进行存储。项目启动时,检查该日期与配置表的日期比较,若前者比后者大,则执行该条jsonObject类的数据。其数据分为 table 和 sql ,分别代表表的更改和数据的更改。
错误情况处理:若某一条sql执行失败,则整个回滚,但不影响项目的启动。若执行成功,则更新配置表中相应的日期字段。
积极影响:若该sql_update.json维护的足够好,每次的sql更新都利用其进行管理,则正式项目的数据库迭代就显得极为简单,甚至不需要单独对数据库进行升级。