当前位置: 首页 > 面试题库 >

跟踪数据库架构更改的机制

何琨
2023-03-14
问题内容

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。

8年前关闭。

跟踪和/或自动执行数据库架构更改的最佳方法是什么?我们的团队使用Subversion进行版本控制,我们已经能够以这种方式自动执行一些任务(将构建推送到暂存服务器,将经过测试的代码部署到生产服务器),但是我们仍在手动进行数据库更新。我想找到或创建一个解决方案,使我们能够在具有不同环境的服务器之间高效地工作,同时继续使用Subversion作为后端,通过该后端代码和数据库更新被推送到各种服务器。

许多流行的软件包都包括自动更新脚本,该脚本可检测数据库版本并应用必要的更改。这是否是在更大范围内(跨多个项目,有时跨多种环境和语言)执行此操作的最佳方法?如果是这样,是否有任何现有代码可以简化流程,或者最好只是推出我们自己的解决方案?之前有没有人实现过类似的东西并将其集成到Subversion提交后钩子中,还是一个坏主意?

虽然支持多个平台的解决方案是更可取的,但是我们绝对需要支持Linux / Apache / MySQL / PHP堆栈,因为我们的大部分工作都在该平台上。


问题答案:

在Rails世界中,存在迁移的概念,即脚本,其中对数据库的更改是使用Ruby而不是特定于数据库的SQL风格进行的。您的Ruby迁移代码最终将转换为特定于您当前数据库的DDL。这使得切换数据库平台非常容易。

对于您对数据库所做的每一次更改,您都要编写一个新的迁移。迁移通常有两种方法:应用更改的“向上”方法和撤消更改的“向下”方法。单个命令可以使数据库更新,也可以用于将数据库带到架构的特定版本。在Rails中,迁移与项目其他代码一样,都保存在项目目录中自己的目录中,并被检入版本控制中。

该Oracle Rails迁移指南很好地介绍了迁移。

使用其他语言的开发人员已经研究了迁移并实现了自己的特定于语言的版本。我知道
Ruckusing
是一个PHP迁移系统,该系统以Rails的迁移为模型。这可能是您要寻找的。



 类似资料:
  • 问题内容: 我似乎无法创建触发器。我已经尝试了以下两种方式进行更新。我通过插入语句不断收到语法错误。我搜索了过去4个小时的论坛和网络搜索,没有任何变化。对此还有更多代码,它基本上会重复执行。任何帮助,将不胜感激。谢谢你。我正在运行MySQL 5.0,并通过phpMyAdmin 2.8.2.4作为Administrator / Root访问。 TRY 1(在所有字段和名称上带有和不带有qoutes)

  • 问题内容: 如何指定Spring Boot使用的数据库架构?我正在使用默认的hibernate(=默认)和postgres(但我希望一个通用的解决方案)。我知道如何指定JDBC URL: 但是不幸的是,postgresql不允许在JDBC URL中指定架构。我知道这里有hibernate属性hibernate.default_schema,所以我希望以下属性之一可以工作: 但是不幸的是,他们似乎都

  • 如何指定Spring Boot使用的数据库模式?我使用默认的hibernate(=默认)和postgres(但我希望有一个通用的解决方案)。我知道如何指定JDBC URL: 但不幸的是,postgresql不允许在JDBCURL中指定模式。我知道有hibernate属性,因此我希望以下属性之一能够正常工作: 但不幸的是,它们似乎都没有任何结果。

  • 问题内容: 我的同事在工作中提出了一个我无法回答的问题(由于缺乏经验),该问题与跟踪表中相关字段的变化有关。 想象一下,我们有3个表,每个表20个字段。在此示例中,我们考虑这些表中的每一个都有2个字段,一个名为LastUpdatedOn,另一个名为LastUpdatedBy。 如果我们只想跟踪这3个表中的更改,而只跟踪几个特定字段,而没有为每个表创建包含更新前最新版本的历史表,那么我们如何跟踪这些

  • 我尝试记录JPA实体的任何更改。因此,每个实体都继承自一个抽象实体类,该类具有日志条目对象列表。 AbstractEntity类: LogEntry类: 我的方法是创建一个新的LogEntry对象,并在实体更新或持久化之前将其添加到实体的LogEntry列表中。 我尝试了以下解决方案: 几乎所有这些试验都使我能够更改受影响实体的属性(如名称或validTo)。但没有任何解决方案提供创建新LogEn

  • 任何帮助都将成为徒弟