问题标签 [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.
ruby-on-rails-3.2 - Rails 3.2 应用程序 - 我应该使用版本控制 gem(paper_trail 或 vestal_versions)还是手动处理?
我的问题:我应该推出自己的模型版本控制还是使用已经存在的版本控制 gem 之一?如果我应该使用 gem,哪个看起来最适合这个应用程序?
关于我的应用程序的信息
我的应用程序是一个简单的清单应用程序。有清单和工作,我使用响应和提交来跟踪用户响应。响应告诉我使用说什么(“完成”,附注“我们需要更多拖把。”),提交告诉我该特定清单何时填写(因为可能有许多提交和给定的响应集清单)。如果有帮助,我将在下面显示我的关联。
我想用版本控制做什么
我想做的是记录用户对清单上的工作的反应。但我想确保如果清单发生更改,我可以重现原始清单(带有响应信息)。例如,我想确保我可以为所有以前版本的清单回答这个问题:
“清单是什么样的,三个星期二前的反应是什么?”
如果我更改清单或其任何工作,我不想失去该问题的答案。
我认为最好的方法是使用版本控制(用于作业和清单)。例如,如果管理员更改了作业(名称或描述),那么我不会更新现有作业,而是创建一个新版本并保持旧版本不变。然后我把旧的东西留在原地,把清单指向工作的新版本。
我应该使用宝石还是自己滚动?
我试图决定是我应该自己推出(编写代码以增加版本,将所有内容指向版本,并保留以前的版本)还是使用现有的解决方案。两个最好的解决方案似乎是paper_trail 和vestal_versions。我没有足够的声望点来发布两个以上的链接,所以我将链接到 gem 的每个 Railscast(如果你愿意,它会让你到 gem 本身)。Railscast 255 Undo with paper_trail和Railscast 177 Model Versioning - 177 使用vestal_versions。
自己滚动的优点:
- 我需要通过重建清单及其响应来报告所有历史数据。这是该应用程序的主要功能。看起来这对于我提到的宝石来说会很棘手。
- 我将能够报告版本组(“我想查看此作业的任何版本的所有回复”)。这样看起来很容易。
滚动我自己的缺点:
- 这会很棘手,因为我有几个 has_many :through 关联。我必须非常小心地更新所有表并正确连接表。(这也可能是其中一颗宝石的问题)。
- 由于我使用此版本数据进行报告,因此我担心性能问题。解析散列的计算成本似乎很高,而依赖带有索引的平面表似乎非常有效。
- 这两个 gem 似乎更倾向于保留版本历史以进行跟踪,而不是真正用于维护历史信息以用于报告目的。
这似乎很重要,因为无论我决定什么,我基本上都会坚持下去。我认为以后从一种方法切换到另一种方法并不容易。
php - 如何为用户发布的内容创建版本控制/历史/修订系统?
在阅读了很多关于保留页面更改历史记录或如何对数据库中的记录进行版本控制(例如)的 SO 问题之后,我找不到一个真正优雅的解决方案来完成这项工作。
现在,让我们尽可能清楚地解释我们需要什么,对于这个简单的修订系统,允许注册用户发布一些文章,其他用户提交这些文章的修订,然后一些版主用户检查这些修订。
MySQL数据库
该数据库包含一个带有以下简化字段的文章表:
为了实现修订/历史版本,我想我们会有下表:
与关系:ARTICLE 0,n <---> 1,1 REVISION
工作流程
用户创建一个
ARTICLE
,插入到ARTICLE
表中(太棒了!)另一个用户对此进行了更新
ARTICLE
,此更新记录在REVISION
表中,并为主持人用户排队。(revision_check=0
)。版主用户验证
REVISION(revision_check=1)
,然后ARTICLE(content)
获取REVISION(revision_content)
值。
我的问题
- 这个工作流程似乎是一个好方法吗?
REVISION
因为,我看到了一个错误:如果一个 s有几个ARTICLE
:
- 我们应该取上次提交的内容
REVISION
还是原始内容ARTICLE
? - 或者,我们是否需要阻止修订,因为
REVISION
在未检查最后一个时无法提交其他修订。
有没有办法记录轻量级版本?顺便问一下,是否可以在
REVISION
表中插入仅通过 SQL、PHP 或 js 比较函数更新的内容?以及如何像 SO 那样显示它?因为我怕REVISION
桌子会很重。奖金:怎么做?
任何想法、链接、来源、插件(MySQL、PHP 5 和 JS/jQuery)将不胜感激。
oracle - 我可以使用 Roundhouse 创建一个全新的 Oracle 数据库/模式吗?
我对 Oracle 有点陌生,主要使用 SQL,所以我对 Oracle 如何工作以及使用哪些用户/连接字符串的一些理解可能是错误的或不存在的。
我正在尝试使用 Roundhouse 来创建/管理 Oracle 数据库。现在我正在尝试在运行 Windows 7 和 VS 2010 的开发机器上工作。我有一个简单的沙盒项目,我正在尝试创建一个测试数据库。我已经在我的机器上安装了 Oracle 11g 标准版。
第一个问题是,我什至可以使用 Roundhouse 创建一个全新的数据库(Oracle 数据库告诉我它们在 Oracle 中被称为“模式”)吗?据我了解,与 SQL Server 不同,没有可以创建任何数据库Master
的用户的数据库。sa
我在 Roundhouse 网站上找到了 Oracle 的 wiki 页面,但它只讨论了修改现有的 Oracle 数据库,而不是创建新数据库。在创建所需的表、存储过程等之前,我无法找到在 Oracle 中使用 Roundhouse 创建全新数据库的示例。
如果可能,我需要做什么/设置?我应该如何设置我的配置文件?给定的是我当前的配置文件。
android - 自动升级数据库版本
嗨,我正在创建一个存储用户输入密码的应用程序。每当他需要更改密码时,就必须更改数据。我面临的问题是,当我调用 DBHelper 类(我创建它是为了完成我所有的数据库工作)时,它不会删除可用的表。
如果有人告诉我如何在调用 DBHelper 类时删除表中的条目,那将会更有帮助。
我意识到 OnCreate 和 OnUpgrade 函数除了第一次创建数据库时没有执行。
也自动更改数据库版本也有助于我猜,但我不知道该怎么做?这是我来自 DBhelper 类的代码
c# - 迁移器的解释(FluentMigrator)?
有人可以解释迁移者(特别是 fluentmigrator)的概念吗?
以下是我收集到的关于这个主题的(可能令人困惑的)事实:
它是一种通过版本控制最初创建然后维护数据库更新的方法。
第一次迁移(或数据库的初始版本)将包含所需的所有表、关系和属性(流利地完成或使用脚本中的一段 sql 完成)。
当您想将更改推送到数据库时,您将创建一个新的迁移方法(向上和向下),例如添加新表或修改字段。
要部署这些迁移之一,您将使用命令行指定包含迁移、连接字符串和所需版本的 dll。
如果您有一组相当复杂的数据模型,那么为所有这些创建迁移定义会不会相当困难和耗时?
我知道使用 nHibernate/fluent 您可以轻松地为数据库生成表,而无需定义模型和映射文件以外的任何内容。有没有办法让这个配置与迁移器/版本兼容?
当 nhibernate/fluent 负责生成数据库时,我不一定需要定义表的所有方面。它通过约定或通过映射文件完成。对于迁移者,我需要定义这种详细程度吗?
android - SQLiteOpenHelper 版本号基于什么?
我有一个即将发布的 Android 应用程序,我正在审查我的一些代码。我担心我的SQLiteOpenHelper
. 具体来说,我想验证方法中的oldVersion
和newVersion
引用是什么onUpgrade
。这是基于versionCode
我的 AndroidManifest.xml 吗?或者这个值是完全独立的,特定于数据库?如果是后者,那么数据库是如何确定版本的呢?
git - 使用代码版本控制系统存储数据库记录更改历史的任何明显缺点
我正在考虑将数据库记录的更改/更改历史存储为 git/hg 存储库,而当前数据仍驻留在数据库中。如果有人需要更改历史记录,我将不得不在 repo 中查找它。
每个集合可能有一个文件夹,文件名将反映“_id”(主键)。因此,我将查找特定文件以获取相关信息。假设有 1 个主键字段(即没有复合)。我使用的数据库是 mongodb,所以无论如何记录都是文档格式。我只需要将 JSON 存储在一个文件中。
对我来说优点是:版本控制系统非常适合存储/差异/更改超时。我也可以从 base -> current 查询特定版本和更改列表。
缺点:除了新奇,我想不出来。如果历史受到高度追捧(但在我的情况下不是),那么 IO 访问可能是一个问题。我可以接受较慢的历史数据检索。无论如何,这将是一个罕见的事件。
所以我的问题是:我忽略了一些明显的缺点吗?
谢谢。
澄清:我想这样做的原因是因为,我希望历史能够增长,并且可能不得不无限期地保存(理想情况下)。我可以通过保持变化来改进这一点,但这是额外的努力而不是微不足道的。
另一个需要考虑的事情是 mongodb 的速度来自内存中的索引。如果它必须同时维护实际+历史的索引,我将需要 2 到 3 倍的 RAM,而不是我原本需要的。到目前为止,它是一种溢价(可能并不总是如此),但仍然如此。
ravendb - Querying-Raven db 时排除版本化文档
在我的数据访问层中编写了大部分 raven 查询之后,我在项目的中途附加了版本控制包。现在由于版本控制,我有很多复制的数据。每当我查询一种类型的文档时,我都可以看到这些值复制的次数与文档版本控制的次数一样多。当我共同查询当前数据而不用Exclude("Revisions")重写我的所有查询时,有没有办法停止查询重新设计的文档。是否有任何设置可以让我对重新设计的文档说查询=False 我可以全局设置吗?请建议一些东西来克服这个..
sql - 数据库对象版本控制(不是模式)
我试图弄清楚如何在我们有两个数据库的环境中实现版本控制:一个是Testing和一个Production。
在测试中。有任意数量的任务正在测试。这些对操作对象的数量和复杂性没有限制,这意味着我们可以有一个 3 天的任务来更改 2 个包主体和一个触发器,我们可以有一个 3 个月的任务来更改 100 个不同的对象,包括С源文件和二进制文件对象。
我主要关心的是数据库的基于文本的对象。我们需要对测试和生产代码进行版本控制,但是任何任务都可以从测试转到生产,没有任何定义的顺序。
这意味着现在我们必须手动跟踪文件中的更改,在每个文件中选择代码中从Testing到Production的行。我们使用了一个非常基本的解决方案,在标题中写入带有基于文件的版本号的注释序列,并添加具有该序列的代码标签来分隔更改。
我正在努力实现 SVN,因为我想将Testing创建为Production的一个分支,在Testing中有分支来限制每个任务,但我发现它可能导致许多Testing任务在合并期间被移植到Production 。
这就是说,我的问题是:
- 有没有办法自动解决这个问题?
- 是否有任何特定于数据库的版本控制解决方案?
- 如果代码库如此不同,我如何“链接”这两个环境?
hibernate - 结合 Hibernate 的自动模式创建和数据库版本控制
我有一个应用程序,每当应用程序第一次在机器上运行时,Hibernate 都会创建我所有的表模式。这很好用。
然而,现在我想知道 Hibernate 是否有某种机制来保持数据库处于版本控制之下,即当我运行不同版本的应用程序并且 Hibernate 发现与旧版本不同的数据库模式时,Hibernate 是否知道如何将一个模式迁移到另一个模式版本存在?考虑到 Hibernate 可以读取现有模式并且可以将模式与映射描述进行比较,我以某种方式认为这应该是可能的。但是,我不知道如何告诉 Hibernate 迁移旧数据,就像使用 Liquibase / Flyway 创建更改脚本时一样。
自从 Hibernate 和版本控制将向您展示很多关于审计和现场版本控制的命中时,我可能没有在谷歌上搜索到正确的东西,但我更多地考虑 Liquibase / Flyway 类型的版本控制。我从来没有考虑过两者,但由于 Hibernate 不创建更新脚本而是直接操作数据库,我不知道如何使两者一起工作。
这是我第一次让 Hibernate 创建我的模式,而不是编写我自己的脚本。我这样做是为了利用Hibernate Envers,这使得手动创建脚本变得更加乏味。也许我错过了一些明显的东西。感谢您对此事的任何意见!
更新:我今天要和 Flyway 的开发人员交谈,他告诉我他不知道有什么好的解决方案。也许什么都没有?