【问题标题】:Database in source control - full or differential SQL? [closed]源代码控制中的数据库 - 完整或差异 SQL? [关闭]
【发布时间】:2012-10-16 23:37:18
【问题描述】:

所以我正在努力为我的所有数据库更改制作 SQL 脚本,以便它们可以提交到源代码控制,但 SQL 是否应该充满差异?

例如,如果我的初始提交有一个“创建表”并且以后的更新需要从该表中删除一个列,我是修改“创建”语句使其不包含该列还是我保持不变并添加'alter table'语句?

我想如果它有差异,那么就有可能在任何状态下获取数据库并将其更新到以后的状态。而使用完整的,总是必须从一个新的数据库开始。

【问题讨论】:

  • 差分效果很好。使用适合您和您的环境的方法。
  • 这听起来像是一种不寻常的方法。通常,最好使数据库模式尽可能保持静态,并且只更改数据。为什么要不断更改数据库结构?
  • 结构会在应用程序的正常开发过程中发生变化。
  • 这看起来是一个相当全面的答案:stackoverflow.com/questions/988426/…

标签: sql database version-control


【解决方案1】:

两者兼而有之。每个 DB 对象都有单独的“创建”脚本。这可用于从头开始创建数据库。此外,这使得提交更改更容易在视觉上区分 - 除了阅读(有时是冗长的)更改脚本之外,您还可以看到对象的创建脚本的更改。

还要编写差分 SQL 脚本,以易于排序和按顺序应用的方式命名。这使您可以将 X 点的 DB 带到当前架构。

【讨论】:

  • 如果我不需要从头开始创建数据库怎么办? (为什么在应用程序投入生产后我需要这样做?)
  • @meriton 您可能希望为新客户、主机或测试/开发环境部署应用程序的新实例。不过,我不明白为什么您不能只运行所有更新脚本以获得相同的最终结果。
  • 你怎么知道 X 是什么?数据库中的表,其中包含当前版本的一行?
  • 根据我的经验,拥有创建脚本可以更轻松地部署到新实例并更易于阅读。理论上,您可以按顺序运行所有差异脚本。在实践中,我认为这会变得笨拙。关于“点 X”,如果您使用 VCS 来获取脚本,您可以“获取最新”并运行新脚本,或者按照您的建议将修订存储在数据库中。
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2012-04-28
  • 1970-01-01
  • 2012-06-07
相关资源
最近更新 更多