问题标签 [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.
stored-procedures - 如何在 Hibernate 中创建临时表?
目标
- 在不使用本机 SQL 的情况下在 Hibernate 中调用
CREATE TEMPORARY TABLE
语句。这意味着只使用 HQL 或 Hibernate API。 - 将对象保存到临时表。
- 调用使用现有表和临时表的存储过程。
DROP
完成后的临时表。(我知道这没有必要,但我认为这样做是一个好习惯。)
背景
- 我对 SQL 非常熟悉,但对 Hibernate 很陌生。
- 由于某人的决定,我被迫在项目中使用 Hibernate。
- 我要将 Web 表单保存到 Oracle 数据库。
- Web 表单包含一个充满文本字段的表格(由其他人设计),每个单元格中都有一个。
- 当用户单击
Save
时,值必须保存在单个事务中。 - Web 表单由数据库视图备份。
- 数据库视图是使用 EAV 模式从数据库表创建的。(这样做是因为列在某种程度上是动态的。)
- Web 表单中的每个文本字段都由数据库表中的一行建模。
- 显示 Web 表单使用
SELECT
视图上的语句。 - 更新 Web 表单使用
UPDATE
视图上的语句,该语句调用视图的INSTEAD OF
触发器。 - 仅更新更改的值。每次更新都有一个审计跟踪。
- 如果其他用户在未通知用户的情况下更新了任何值,则事务将回滚。下面是这种情况的一个示例:a
(I)
的值是4
当用户显示 Web 表单时,(II)
另一个用户将相同的字段更新到5
(III)
第一个用户更新该字段2
并提交 Web 表单。
最初提出的解决方案
- 使用 AJAX (jQuery) 检测文本字段中的更改,并仅提交用户更改的内容。
- 但是,需要在数据库中检测到另一个用户所做的更改。
解决方案应该工作得更好
- 当用户单击
Save
时,创建一个临时表(临时表是仅由当前会话/连接看到的表,并在会话关闭/断开连接时自动删除)并将对象(单元格)保存到临时表中。 - 开始交易。
- 锁定一些现有的表(或只锁定相关的行,以提高性能)。
- 将提交的数据与现有数据进行比较。
- 如果进行了任何未被注意到的更改,则回滚事务。
- 更新必要的行。
- 提交事务并解锁表。
- 删除临时表。
有什么想法吗?
version-control - 数据库版本控制 - 分支切换如何工作?
对于那些在一个开发团队中开发的人来说,这是一个问题,你们所有人都有单独的数据库。您正在使用源代码控制和其他工具对数据库进行版本控制,这些工具会自动将开发数据库更新到最新版本的数据库(模式、数据、SP、函数等)。
好,很好!可是等等!如果您正在开发软件的 4.0 版本,但现在需要将分支切换到 3.2 分支来修复错误怎么办?到目前为止,架构可能(几乎可以肯定是)非常不同......
我想,如果您通过额外的努力来编写回滚脚本和更改脚本,这可能会奏效。但这似乎需要做很多工作——真的值得吗?
sql-server - 是否可以使用 MS VS 数据库项目作为数据库版本控制的完整解决方案?
在我们的项目中,我们有几个生产数据库和许多开发人员。每个生产数据库代表一些“子项目/本地化版本”。我们使用 SQL Server 2008。
因此,我需要使用 MS Visual Studio 数据库项目开发数据库版本控制策略。我已经阅读了很多关于数据库版本控制和数据库项目的文章,但我仍然有很多问题:
开发人员应该如何实现他们对 db 项目的更改?(最佳实践)
如何在没有人工干预(跳过一些对象、重写一些更改等)的情况下生成 100% 可行的“最新版本”部署脚本?
如何使用 MS Visual Studio 数据库项目管理数据更改?我知道部署前/部署后脚本,但我认为它不能解决这个问题。(例如:我需要将某个表重新映射到另一个表中)。
“理想的解决方案”是:
开发人员为数据库 [ProductionDB] 生成和维护数据库项目。
在新版本中,我将数据库项目部署到 [ProductionDB] 并进行了所有必要的更改。
开发人员更改数据库项目并为具体更改编写一些数据操作脚本。
在新版本中,我将数据库项目部署到 [ProductionDB] 并进行了所有必要的更改。
所以,最后一个问题:是否可以将数据库项目用于上述目的,或者有人使用类似的场景/解决方案?
PS:我已经阅读了以下讨论:
cassandra - 在 Cassandra 中实现数据版本控制的方法
您能否分享您的想法,您将如何在 Cassandra 中实现数据版本控制。
假设我需要对一个简单地址簿中的记录进行版本化。(地址簿记录存储为 ColumnFamily 中的行)。我希望历史:
- 将不经常使用
- 将一次全部使用,以“时间机器”的方式呈现
- 一条记录不会有超过几百个版本。
- 历史不会过期。
我正在考虑以下方法:
将地址簿转换为超级列族,并将多个版本的地址簿记录存储在一行中(按时间戳)作为超级列。
创建新的超级列族以存储旧记录或对记录的更改。这种结构如下所示:
{ '通讯录行键': { 'time stamp1': { 'first name': '新名字', '修改者': 'user id', },
'另一个地址簿行键': { '时间戳': { ....
将版本存储为附加在新 ColumnFamily 中的序列化 (JSON) 对象。将版本集表示为行,将版本表示为列。(仿照使用 CouchDB 进行简单文档版本控制)
mongodb - 在 MongoDB 中实现数据版本控制的方法
您能否分享您的想法,您将如何在 MongoDB 中实现数据版本控制。(我问过关于 Cassandra 的类似问题。如果您有任何想法哪个 db 更适合,请分享)
假设我需要对一个简单地址簿中的记录进行版本化。(通讯录记录存储为平面 json 对象)。我希望历史:
- 将不经常使用
- 将一次全部使用,以“时间机器”的方式呈现
- 一条记录不会有超过几百个版本。历史不会过期。
我正在考虑以下方法:
创建一个新的对象集合来存储记录的历史记录或对记录的更改。它会为每个版本存储一个对象,并引用地址簿条目。此类记录如下所示:
可以修改此方法以存储每个文档的版本数组。但这似乎是一种较慢的方法,没有任何优势。
将版本存储为附加到地址簿条目的序列化 (JSON) 对象。我不确定如何将此类对象附加到 MongoDB 文档。也许作为一个字符串数组。(模仿使用 CouchDB 的简单文档版本控制)
postgresql - 在 PostreSQL 中实现数据版本控制的方法
您能否分享您的想法,您将如何在 PostgreSQL 中实现数据版本控制。(我问过关于Cassandra和MongoDB的类似问题。如果您有任何想法哪个 db 更适合,请分享)
假设我需要在一个简单的通讯录中对记录进行版本化。为简单起见,地址簿记录存储在一个没有关系的表中。我希望历史:
- 将不经常使用
- 将一次全部使用,以“时间机器”的方式呈现
- 一条记录不会有超过几百个版本。
- 历史不会过期。
我正在考虑以下方法:
创建一个新的对象表来存储具有地址簿表模式副本的记录历史记录,并将时间戳和外键添加到地址簿表。
创建一种无模式表来存储对地址簿记录的更改。这样的表将包括:AddressBookId、TimeStamp、FieldName、Value。这样,我将只存储对记录的更改,而不必保持历史记录表和地址簿表同步。
创建一个表来存储序列化 (JSON) 通讯录记录或对通讯录记录的更改。此类表如下所示:AddressBookId、TimeStamp、Object (varchar)。同样,这是较少的架构,因此我不必使历史记录表与地址簿表保持同步。(这是在使用 CouchDB 进行简单文档版本控制之后建模的)
php - Magento:如何将配置更改从开发环境迁移到生产环境?
我们正在积极开发模块,当我们将更改推送到生产站点时,通常需要进行一些配置更改。自动化这个会很好......想法?
database - 数据库版本控制计划:热不热?
基于在网上阅读、堆栈溢出以及大多数与编码恐怖相关的关于 db 版本控制的文章,我已经尝试编写一个计划来对一个 8 年历史的 php mysql 网站的数据库进行版本控制。
我的第一个问题是,这听起来正确吗?
我的第二个问题是,每天多次执行提交过程似乎有点复杂。有没有办法可靠地自动化它?或者我不应该经常提交数据库更改以使其重要吗?
php - 教义迁移后备
我们正在使用条令迁移,当迁移包含多个操作并且其中一个操作失败时,通常会出现问题。
例如,如果有一个添加 5 个外键的迁移并且其中第 5 个失败而字段长度不同,则修复字段错误并重新生成迁移并不能解决整个问题,而现在有一个错误与密钥 4 已经存在的事实相关联,并且不允许迁移成功运行。
有没有一种稳定的方法来使用 Doctrine 迁移而没有提到的明显问题?我们以前使用过.sql
文件,实际上并没有好多少,但是我很确定对于使用 Doctrine 的项目有正确的数据库版本控制方法吗?
基于模型和模式之间的差异生成迁移非常好,我想进一步保持这种可能性。
谢谢
hibernate - Hibernate (JPA):当多个对象被修改和提交时如何处理 StaleObjectStateException
考虑以下场景:一个 Db 事务涉及来自不同表的多行,并带有版本控制。
例如:一个shopLists和products。shopList 可能包含产品(其数量在 shoplist 中)并且产品具有其当前库存。
当我插入编辑 shopList 时,我希望更新 shopList 中这些产品的库存以保持库存一致。
为此,我打开一个事务,插入/更新 shopList,更新每个产品的库存(应用增量),然后提交事务。到现在也没什么大不了的。
然而,其他用户可能已经共同更新了一个或多个产品。甚至更新 shopList 本身。在这两种情况下,我都会在提交事务时收到 StaleObjectStateException。
问题是:有没有办法确定哪个表导致了 StaleObjectStateException?
如果产品导致异常,我可以从数据库中刷新所有涉及的产品,然后重新应用库存增量。这很好。如果 shopList 导致异常,最好将问题简单地报告给用户,以便他可以重新开始。
非常感谢您的帮助。