回答

收藏

在数据库架构中弃用列的最佳方法是什么?

技术问答 技术问答 218 人阅读 | 0 人回复 | 2023-09-14

在阅读了有关数据库架构迁移和版本的许多问题之后,我提出了一种在更新过程中安全地更新数据库架构的方案。基本思想是,在更新期间,我们将数据库导出到文件中,删除并重新创建所有表,然后重新导入所有内容。那里没有什么花哨或冒险的地方。& l) R) A$ `+ o6 Y% L: q' Z, e2 F+ I2 O
问题在于该系统在某种程度上是“病毒的”,这意味着仅 添加
7 C* D0 H' o1 i4 Y* f/ ~9 ^列或表是安全的,因为删除列或表会在重新导入数据时引起问题。通常,忽略这些列就可以了,但问题是实际上已重构了许多被删除的项,而代码中旧项的存在使其他程序员误以为他们可以使用它们。
  H* e, H- o1 ]- W! G6 `+ M因此,我想找到一种方法可以将列或表标记为已弃用。在理想情况下,将在更新模式时标记不赞成使用的对象,但是在下一次更新期间,我们的备份脚本将不会选择那些已标记方式的对象,从而使我们最终可以逐步淘汰模式的这些部分。) ?+ L: X( E' t
我发现MySQL(可能还有其他数据库平台,但这是我们正在使用的平台)支持字段和表的COLUMN属性。这是完美的,除了我无法弄清楚如何以有意义的方式实际使用它。我该如何编写SQL查询来获取所有
6 Y" H/ w3 ?+ \+ e不 包含包含单词“ deprecated”的注释匹配文本的列名?还是我看这个问题全错了,而错过了一个更好的方法呢?& P  {4 P/ w; V- \2 g
               
7 z/ e- X8 o" V# S0 D解决方案:% B& I. q& R5 v. m0 w# B" S
                $ m! F3 J  V1 ?+ [

8 `! }0 y+ M+ o" x% F% D( `# q3 O7 M; u9 [
                也许您应该重构为在表上使用视图,在这些视图中,视图永远不包含降级的列。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则