首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能像GIT一样对数据库进行版本控制?

有没有可能像GIT一样对数据库进行版本控制?
EN

Stack Overflow用户
提问于 2018-10-18 16:57:41
回答 1查看 421关注 0票数 1

正如标题所说,我的问题是,数据库是否有可能像Git一样对内容进行版本控制?我的用例是,对于我们的业务,我们每个月上线2-3次,都有特定的Releas名称(分支)。

我是开放的数据库使用,无论是MongoDB或Mysql等。一个奖励将是比较内容和/或恢复到同一分支上的旧版本。稍后将在Node.js中对其进行编程

编辑:使其更清晰。我想要一个行版本控件。不是舍马

EN

回答 1

Stack Overflow用户

发布于 2018-10-18 17:29:18

这主要基于How to version control a record in a databasehttp://www.sqlitetutorial.net/sqlite-trigger/

你需要找到你的业务规则,关于什么版本和什么时候更新。例如,如果客户更改了她的地址,您希望更新/更改哪些订单。当然,当这些订单已经完成并在一年前支付时,您不希望使用新地址更新这些订单。但您肯定希望在尚未发货的订单中更新地址。但是对于已经发货但还没有到达的订单,更改发货地址会给涉及的各方带来很多混乱。

此外,出于审计的目的,您可能希望跟踪对某些数据字段的所有更改。但出于其他监管原因,如GDPR,您可能希望确定此类更改的到期日期。

因此,在决定使用哪种版本控制方案之前,请考虑稍后如何在查询中使用版本控制。

最容易附加到现有模式上的方法是为每个表mytable添加第二个表mytable_log,该表通过数据库触发器填充,并存储旧行和新行以及(数据库)用户和操作。这样,无论您的应用程序对数据库做了什么,都会自动记录在日志中,而不会对现有查询造成太大影响。您需要找到一种方法来将代理用户与数据库通信,可以通过他们的数据库登录,也可以通过其他变量或存储过程。

另一种方法是取消合并/当前表,将历史和当前状态保留在同一个表中,并具有反映世界当前状态的视图。这意味着您可以完全删除数据库触发器,还可以撤消用户对表的所有delete/update权限。缺点是您的程序逻辑将选择每个客户的最新版本(或任何其他),这可以通过窗口函数来完成,但将比使用统一表要慢。此外,在这种情况下,在实际从数据库中删除一行时需要小心(例如,出于GDPR原因)。即使行已存在超过10年,它可能仍然是最新的,因为没有更新版本的行可用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52870461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档