问题标签 [database-versioning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1515 浏览

java - 为基于 Java 的 Web 应用程序实现文章修订历史记录

关于如何最好地为基于 Java 的 Web 应用程序实现文章修订历史并将其保存在 AuditLog 中的任何想法

StackOverflow 已经有这样一个功能,可以让人们看到一个版本与另一个版本的差异,就像 SVN 客户端一样。

这更像是一个设计问题而不是实现问题。

另外:如何在网页上显示这些更改?

补充:建议的解决方案

Hibernate Interceptor将拦截保存过程并使用Castor XML创建旧对象的 XML 字符串。

class 和 id 用于获取特定对象的修订版本。

google-diff-match-patch将用于创建 HTML diff 文件

0 投票
9 回答
1347 浏览

c# - 使用手动生成的脚本进行数据库变更管理

我的需求是相当基本的,我不想重建轮子。我喜欢为我的数据库编写脚本并编写脚本将其从一个版本更新到下一个版本,即 001-create-tables.sql、002-alter-column.sql 等。

我想要的是一个简单的工具命令行或 MsBuild,它将查看数据库以查看数据库的版本(使用一些表约定)并运行文件夹中的所有脚本,这些脚本的编号高于当前数据库版本。如果脚本失败/抛出错误并在该点停止,我还希望该工具回滚脚本。

这就是我想要的,但我不介意改变我的约定,尽管我确实想编写自己的 sql 脚本。我还希望该工具是免费的或开源的,因为我不需要太多。由于我的项目是 C#,我希望该工具内置于 .Net

0 投票
2 回答
1317 浏览

sql-server - 使用 Visual Studio 数据库项目进行非平凡的增量更改部署

假设我正在对我的数据库进行某种重要的更改,这需要“自定义”工作才能从版本 A 升级到 B。例如,将用户 ID 列从 UUID 数据类型转换为 Windows 域用户名。

我怎样才能让它自动部署?也就是说,我想让开发人员右键单击项目,单击“部署”并在他们使用足够旧的数据库时执行此逻辑。

我在数据库项目中看不到这种登录的任何地方——似乎没有任何关于这种“升级脚本”的规定。这真的不可能吗?为了澄清,逻辑显然不能自动生成,但我希望它根据需要自动执行。

当然,第一个逻辑障碍是部署实用程序不知道是否需要更新任何此类逻辑 - 我假设我也可以为此提供逻辑(例如检查版本表,如果最新版本 <5.0,执行此升级,稍后添加新版本行)。

这可能吗?我可以使用复杂的自定义更改脚本进行全自动部署吗?当然,我不必将所有自定义更改逻辑都粘贴到(即将成为)巨大的构建前或构建后脚本中......

0 投票
4 回答
1610 浏览

database - 使用 Delphi 在已安装的应用程序中进行数据库版本控制

我正在开发一些 Delphi 应用程序,当新版本发布和用户选择安装附加模块时,它们需要在现场升级自己的数据库结构。这些应用程序正在使用各种嵌入式数据库(目前 DISAM 和 Jet,但这可能会改变)。

在过去,我使用 DISAM 使用用户版本号来完成此操作,而不是可以存储在每个表中。我提供了一组额外的空数据库文件,并在启动时使用 FieldDefs 比较每个表的版本号,以便在必要时更新已安装的表。虽然这行得通,但我发现必须发送数据库的备用副本很笨拙,并且较新版本的 DBISAM 更改了表重组方法,因此无论如何我都需要重写它。

我可以看到两种实现方式:在数据库中存储版本号并使用 DDL 脚本从旧版本获取新版本,或者在应用程序中存储数据库结构的参考版本,在启动时比较对数据库的引用- up,并让应用程序生成 DDL 命令来升级数据库。

我认为我可能不得不实现两者的一部分。我不希望应用程序每次启动时都将数据库与参考结构进行比较(太慢),所以我需要一个数据库结构版本号来检测用户是否使用过时的结构。但是,当数据库过去可能已部分更新或用户可能自己更改了数据库结构时,我不确定我是否可以信任预先编写的脚本来进行结构升级,所以我倾向于使用实际更新的参考差异。

研究这个问题我发现了几个数据库版本控制工具,但它们似乎都针对 SQL Server 并且在实际应用程序之外实现。我正在寻找一个可以紧密集成到我的应用程序中并且可以适应不同数据库要求的进程(我知道我必须编写适配器、自定义后代类或事件代码来处理 DDL 中的各种差异数据库,这不会打扰我)。

有没有人知道现成的东西可以做到这一点或失败,有没有人有任何想法:

  1. 在应用程序中存储通用关系数据库结构的参考版本的最佳方式。

  2. 将参考与实际数据库进行比较的最佳方法。

  3. 生成 DDL 以更新数据库的最佳方式。

0 投票
5 回答
5862 浏览

sql-server - SQL Server 数据库架构版本控制和更新

对于我的应用程序,我必须支持更新方案,并且数据库可能会受到影响。

我希望能够在不安装中间版本的情况下从旧版本更新到最新版本。例如,假设我有版本 A(最旧)、B(中级)和 C(新版本)。我希望能够将版本 A 直接更新到版本 C。对于应用程序文件,这很简单,我只需将旧的替换为新的。但是对于数据库,我不希望生成一个 SQL 脚本来将数据库架构从 A 直接更改为 C,而是我想首先应用一个脚本来将架构从 A 更改为 B 以及从 B 更改为 C。

如何存储 SQL Server 数据库的数据库版本?有没有我可以设置的特殊属性,而不是实现版本表?在我的代码(.NET)中,我想读取数据库版本并相应地以正确的顺序执行更新 SQL 脚本。

我将同时使用 SQL Server 2005 和 SQL Server 2008。

0 投票
7 回答
20481 浏览

sql-server - 使用 SQL Server 部署数据库更改的简单方法是什么?

我工作的软件系统是一个医疗计费系统,大量的数据和数据表,以及存储过程。

我正在阅读文章“更好的代码的 12 步”并在 Joel 测试 #2 中指出:您可以一步构建吗?

现在我想知道,这是否意味着部署构建(以便客户可以更新他们的部署)。

现在我遇到的主要问题是如何进行一步数据库更新?

目前,当我们对数据库进行更改时,所有更改都会被记录并添加到数据库更新脚本中,该脚本会在创建部署到客户构建时附加一个版本号。

有没有更简单的方法来做到这一点?一些脚本或应用程序需要“前后”查看数据库模式并创建一个更新脚本,就像我提到的那样?

或者这只是每个人都这样做的方式,我很难相信,但似乎是合理的。

自动化系统会减少错误,并大大加快部署构建时间,我很想知道如何做到这一点。

0 投票
2 回答
1296 浏览

sql - 需要一个 .NET 数据库版本控制脚本运行器

我正在查看版本控制数据库,并遇到了有关如何执行此操作的常用文章(编码恐怖,代码颂歌等)。这一切对我来说都很有意义,但是我正在尝试找到一个脚本运行器来为我运行 sql 脚本。所有这些文章都提到有一些东西可以自动运行它们,但没有一篇提出任何建议。

有人知道运行这些脚本的任何实用程序吗?理想情况下,它的工作方式如下:

  1. 在事务中运行所有内容,因此如果任何单个更新失败,整个事情都会失败
  2. 我可以控制方案版本数据库表的名称
  3. 能够拥有一系列在升级时始终运行的脚本
  4. 可以作为自动化任务的一部分运行

    编辑

  5. 开源

0 投票
5 回答
5999 浏览

.net - Entity Framework 4 的数据库迁移

我一直在使用 Entity Framework 4,使用模型驱动的方法从我的实体生成数据库脚本。这很好,但我不确定在对数据库进行版本控制时它是如何工作的。我猜如果我想使用活动记录类型迁移框架,我必须反过来工作并从我的数据库生成我的实体?有什么方法可以使用模型驱动的方法并正确地对数据库进行版本控制?

0 投票
4 回答
305 浏览

c# - 如何使用 VS 2005 对 SQL Server 架构进行版本控制?

我是 C# 编程的新手,最近是从使用 Ruby on Rails 开始接触它的。在 RoR 中,我习惯于为数据库编写模式迁移。我希望能够为我的 C#/SQLServer 项目做类似的事情。

VS 2005 工具集是否存在这样的工具?

直接在 VS 2005 之外将 RoR 迁移与 SQL Server 一起使用是否明智?换句话说,我将使用 ActiveRecord:Migration from Rails 处理所有模式版本控制,但仅此而已。

如果我确实使用其他工具处理 C# 和 VS 2005 之外的迁移,那么 RoR ActiveRecord:Migration 是最好使用的东西,还是有更适合的东西?

0 投票
2 回答
5898 浏览

database - 如何在 PostgreSQL 上实现表修改的审计/版本控制

我们正在 PostgreSQL 上使用 Java/Spring/Hibernate 实现一个新系统。一旦对表中的记录进行修改/删除,该系统需要制作每条记录的副本。稍后,报告将查询审计表以向用户显示数据。

我计划通过在表上设置一个触发器来实现此审计/版本控制功能,这将使修改后的行(已删除的行)“TO”一个名为 ENTITY_VERSIONS 的表,该表将有大约 20 个名为 col1、col2 的列, col3, col4 等将存储上表中的列;然而,问题是如果有超过 1 个表要版本化并且只有 1 个 TARGET 表(ENTITY_VERSIONS)来存储所有表的版本,我该如何设计 TARGET 表?

或者每个需要版本控制的表都有一个 VERSION 表的副本会更好吗?

如果可以共享用于实现审计/版本控制的一些指向 PostgreSQL 触发器(和相关的存储过程)代码的指针,那将是一个额外的好处。

PS:我查看了在 SQL Server 中实施审计表的建议?有点像答案,除了我不知道 OldValue 和 NewValue 应该是什么类型?

PPS:如果表使用 SOFT DELETEs(幻像删除)而不是 HARD 删除,你的建议有什么改变吗?