问题标签 [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 投票
1 回答
14046 浏览

stored-procedures - 如何在 Hibernate 中创建临时表?

目标

  1. 在不使用本机 SQL 的情况下在 Hibernate 中调用CREATE TEMPORARY TABLE语句。这意味着只使用 HQL 或 Hibernate API。
  2. 将对象保存到临时表。
  3. 调用使用现有表和临时表的存储过程。
  4. DROP完成后的临时表。(我知道这没有必要,但我认为这样做是一个好习惯。)

背景

  1. 我对 SQL 非常熟悉,但对 Hibernate 很陌生。
  2. 由于某人的决定,我被迫在项目中使用 Hibernate。
  3. 我要将 Web 表单保存到 Oracle 数据库。
  4. Web 表单包含一个充满文本字段的表格(由其他人设计),每个单元格中都有一个。
  5. 当用户单击Save时,值必须保存在单个事务中。
  6. Web 表单由数据库视图备份。
  7. 数据库视图是使用 EAV 模式从数据库表创建的。(这样做是因为列在某种程度上是动态的。)
  8. Web 表单中的每个文本字段都由数据库表中的一行建模。
  9. 显示 Web 表单使用SELECT视图上的语句。
  10. 更新 Web 表单使用UPDATE视图上的语句,该语句调用视图的INSTEAD OF触发器。
  11. 仅更新更改的值。每次更新都有一个审计跟踪。
  12. 如果其他用户在未通知用户的情况下更新了任何值,则事务将回滚。下面是这种情况的一个示例:a(I)的值是4当用户显示 Web 表单时,(II)另一个用户将相同的字段更新到5 (III)第一个用户更新该字段2并提交 Web 表单。

最初提出的解决方案

  1. 使用 AJAX (jQuery) 检测文本字段中的更改,并仅提交用户更改的内容。
  2. 但是,需要在数据库中检测到另一个用户所做的更改。

解决方案应该工作得更好

  1. 当用户单击Save时,创建一个临时表(临时表是仅由当前会话/连接看到的表,并在会话关闭/断开连接时自动删除)并将对象(单元格)保存到临时表中。
  2. 开始交易。
  3. 锁定一些现有的表(或只锁定相关的行,以提高性能)。
  4. 将提交的数据与现有数据进行比较。
  5. 如果进行了任何未被注意到的更改,则回滚事务。
  6. 更新必要的行。
  7. 提交事务并解锁表。
  8. 删除临时表。

有什么想法吗?

0 投票
2 回答
361 浏览

version-control - 数据库版本控制 - 分支切换如何工作?

对于那些在一个开发团队中开发的人来说,这是一个问题,你们所有人都有单独的数据库。您正在使用源代码控制和其他工具对数据库进行版本控制,这些工具会自动将开发数据库更新到最新版本的数据库(模式、数据、SP、函数等)。

好,很好!可是等等!如果您正在开发软件的 4.0 版本,但现在需要将分支切换到 3.2 分支来修复错误怎么办?到目前为止,架构可能(几乎可以肯定是)非常不同......

我想,如果您通过额外的努力来编写回滚脚本和更改脚本,这可能会奏效。但这似乎需要做很多工作——真的值得吗?

0 投票
4 回答
569 浏览

sql-server - 是否可以使用 MS VS 数据库项目作为数据库版本控制的完整解决方案?

在我们的项目中,我们有几个生产数据库和许多开发人员。每个生产数据库代表一些“子项目/本地化版本”。我们使用 SQL Server 2008。

因此,我需要使用 MS Visual Studio 数据库项目开发数据库版本控制策略。我已经阅读了很多关于数据库版本控制和数据库项目的文章,但我仍然有很多问题:

  1. 开发人员应该如何实现他们对 db 项目的更改?(最佳实践)

  2. 如何在没有人工干预(跳过一些对象、重写一些更改等)的情况下生成 100% 可行的“最新版本”部署脚本?

  3. 如何使用 MS Visual Studio 数据库项目管理数据更改?我知道部署前/部署后脚本,但我认为它不能解决这个问题。(例如:我需要将某个表重新映射到另一个表中)。

“理想的解决方案”是:

  1. 开发人员为数据库 [ProductionDB] 生成和维护数据库项目。

  2. 在新版本中,我将数据库项目部署到 [ProductionDB] 并进行了所有必要的更改。

  3. 开发人员更改数据库项目并为具体更改编写一些数据操作脚本。

  4. 在新版本中,我将数据库项目部署到 [ProductionDB] 并进行了所有必要的更改。

所以,最后一个问题:是否可以将数据库项目用于上述目的,或者有人使用类似的场景/解决方案?

PS:我已经阅读了以下讨论:

  1. 数据库更改版本控制[关闭]
  2. 如何在 SVN 中对我的 MS SQL 数据库进行版本控制?
  3. 寻找数据库版本控制的解决方案
  4. 是否有用于数据库结构更改的版本控制系统?
0 投票
2 回答
11105 浏览

cassandra - 在 Cassandra 中实现数据版本控制的方法

您能否分享您的想法,您将如何在 Cassandra 中实现数据版本控制。

假设我需要对一个简单地址簿中的记录进行版本化。(地址簿记录存储为 ColumnFamily 中的行)。我希望历史:

  • 将不经常使用
  • 将一次全部使用,以“时间机器”的方式呈现
  • 一条记录不会有超过几百个版本。
  • 历史不会过期。

我正在考虑以下方法:

  • 将地址簿转换为超级列族,并将多个版本的地址簿记录存储在一行中(按时间戳)作为超级列。

  • 创建新的超级列族以存储旧记录或对记录的更改。这种结构如下所示:

    { '通讯录行键': { 'time stamp1': { 'first name': '新名字', '修改者': 'user id', },

    '另一个地址簿行键': { '时间戳': { ....

  • 将版本存储为附加在新 ColumnFamily 中的序列化 (JSON) 对象。将版本集表示为行,将版本表示为列。(仿照使用 CouchDB 进行简单文档版本控制

0 投票
8 回答
136535 浏览

mongodb - 在 MongoDB 中实现数据版本控制的方法

您能否分享您的想法,您将如何在 MongoDB 中实现数据版本控制。(我问过关于 Cassandra 的类似问题。如果您有任何想法哪个 db 更适合,请分享)

假设我需要对一个简单地址簿中的记录进行版本化。(通讯录记录存储为平面 json 对象)。我希望历史:

  • 将不经常使用
  • 将一次全部使用,以“时间机器”的方式呈现
  • 一条记录不会有超过几百个版本。历史不会过期。

我正在考虑以下方法:

  • 创建一个新的对象集合来存储记录的历史记录或对记录的更改。它会为每个版本存储一个对象,并引用地址簿条目。此类记录如下所示:

    可以修改此方法以存储每个文档的版本数组。但这似乎是一种较慢的方法,没有任何优势。

  • 将版本存储为附加到地址簿条目的序列化 (JSON) 对象。我不确定如何将此类对象附加到 MongoDB 文档。也许作为一个字符串数组。(模仿使用 CouchDB 的简单文档版本控制

0 投票
3 回答
7118 浏览

postgresql - 在 PostreSQL 中实现数据版本控制的方法

您能否分享您的想法,您将如何在 PostgreSQL 中实现数据版本控制。(我问过关于CassandraMongoDB的类似问题。如果您有任何想法哪个 db 更适合,请分享)

假设我需要在一个简单的通讯录中对记录进行版本化。为简单起见,地址簿记录存储在一个没有关系的表中。我希望历史:

  • 将不经常使用
  • 将一次全部使用,以“时间机器”的方式呈现
  • 一条记录不会有超过几百个版本。
  • 历史不会过期。

我正在考虑以下方法:

  • 创建一个新的对象表来存储具有地址簿表模式副本的记录历史记录,并将时间戳和外键添加到地址簿表。

  • 创建一种无模式表来存储对地址簿记录的更改。这样的表将包括:AddressBookId、TimeStamp、FieldName、Value。这样,我将只存储对记录的更改,而不必保持历史记录表和地址簿表同步。

  • 创建一个表来存储序列化 (JSON) 通讯录记录或对通讯录记录的更改。此类表如下所示:AddressBookId、TimeStamp、Object (varchar)。同样,这是较少的架构,因此我不必使历史记录表与地址簿表保持同步。(这是在使用 CouchDB 进行简单文档版本控制之后建模的

0 投票
2 回答
1830 浏览

php - Magento:如何将配置更改从开发环境迁移到生产环境?

我们正在积极开发模块,当我们将更改推送到生产站点时,通常需要进行一些配置更改。自动化这个会很好......想法?

0 投票
1 回答
587 浏览

database - 数据库版本控制计划:热不热?

基于在网上阅读、堆栈溢出以及大多数与编码恐怖相关的关于 db 版本控制的文章,我已经尝试编写一个计划来对一个 8 年历史的 php mysql 网站的数据库进行版本控制。

我的第一个问题是,这听起来正确吗?
我的第二个问题是,每天多次执行提交过程似乎有点复杂。有没有办法可靠地自动化它?或者我不应该经常提交数据库更改以使其重要吗?

0 投票
3 回答
2150 浏览

php - 教义迁移后备

我们正在使用条令迁移,当迁移包含多个操作并且其中一个操作失败时,通常会出现问题。

例如,如果有一个添加 5 个外键的迁移并且其中第 5 个失败而字段长度不同,则修复字段错误并重新生成迁移并不能解决整个问题,而现在有一个错误与密钥 4 已经存在的事实相关联,并且不允许迁移成功运行。

有没有一种稳定的方法来使用 Doctrine 迁移而没有提到的明显问题?我们以前使用过.sql文件,实际上并没有好多少,但是我很确定对于使用 Doctrine 的项目有正确的数据库版本控制方法吗?

基于模型和模式之间的差异生成迁移非常好,我想进一步保持这种可能性。

谢谢

0 投票
1 回答
15526 浏览

hibernate - Hibernate (JPA):当多个对象被修改和提交时如何处理 StaleObjectStateException

考虑以下场景:一个 Db 事务涉及来自不同表的多行,并带有版本控制。

例如:一个shopLists和products。shopList 可能包含产品(其数量在 shoplist 中)并且产品具有其当前库存。

当我插入编辑 shopList 时,我希望更新 shopList 中这些产品的库存以保持库存一致。

为此,我打开一个事务,插入/更新 shopList,更新每个产品的库存(应用增量),然后提交事务。到现在也没什么大不了的。

然而,其他用户可能已经共同更新了一个或多个产品。甚至更新 shopList 本身。在这两种情况下,我都会在提交事务时收到 StaleObjectStateException。

问题是:有没有办法确定哪个表导致了 StaleObjectStateException?

如果产品导致异常,我可以从数据库中刷新所有涉及的产品,然后重新应用库存增量。这很好。如果 shopList 导致异常,最好将问题简单地报告给用户,以便他可以重新开始。

非常感谢您的帮助。