在阅读了有关数据库模式迁移和版本的许多问题之后,我想出了一个在更新过程中安全地更新数据库模式的方案.基本思想是在更新期间,我们将数据库导出到文件,删除并重新创建所有表,然后重新导入所有表.没有什么太花哨或风险.
问题是这个系统有点"病毒",这意味着添加列或表是安全的,因为删除它们会在重新导入数据时引起问题.通常,我可以忽略这些列,但问题是许多被删除的项目实际上已被重构,并且代码中旧的项目的存在使其他程序员误以为他们可以使用它们.
所以,我想找到一种方法,可以将列或表标记为已弃用.在理想情况下,在更新模式时会标记已弃用的对象,但是在下次更新期间,我们的备份脚本将不会选择以这种方式标记的对象,从而允许我们最终淘汰模式的这些部分.
我发现MySQL(也可能是其他数据库平台,但我们正在使用它)支持字段和表的COLUMN属性.这将是完美的,除了我无法弄清楚如何以有意义的方式实际使用它.我将如何编写SQL查询以获取不包含与包含"deprecated"一词的文本匹配的注释的所有列名?或者我在看这个问题都错了,错过了一个更好的方法来做到这一点?
也许你应该重构使用你的表的视图,其中视图永远不包括deprocated列.