正如标题所说,我的问题是,数据库是否有可能像Git一样对内容进行版本控制?我的用例是,对于我们的业务,我们每个月上线2-3次,都有特定的Releas名称(分支)。
我是开放的数据库使用,无论是MongoDB或Mysql等。一个奖励将是比较内容和/或恢复到同一分支上的旧版本。稍后将在Node.js中对其进行编程
编辑:使其更清晰。我想要一个行版本控件。不是舍马
发布于 2018-10-18 17:29:18
这主要基于How to version control a record in a database和http://www.sqlitetutorial.net/sqlite-trigger/:
你需要找到你的业务规则,关于什么版本和什么时候更新。例如,如果客户更改了她的地址,您希望更新/更改哪些订单。当然,当这些订单已经完成并在一年前支付时,您不希望使用新地址更新这些订单。但您肯定希望在尚未发货的订单中更新地址。但是对于已经发货但还没有到达的订单,更改发货地址会给涉及的各方带来很多混乱。
此外,出于审计的目的,您可能希望跟踪对某些数据字段的所有更改。但出于其他监管原因,如GDPR,您可能希望确定此类更改的到期日期。
因此,在决定使用哪种版本控制方案之前,请考虑稍后如何在查询中使用版本控制。
最容易附加到现有模式上的方法是为每个表mytable添加第二个表mytable_log,该表通过数据库触发器填充,并存储旧行和新行以及(数据库)用户和操作。这样,无论您的应用程序对数据库做了什么,都会自动记录在日志中,而不会对现有查询造成太大影响。您需要找到一种方法来将代理用户与数据库通信,可以通过他们的数据库登录,也可以通过其他变量或存储过程。
另一种方法是取消合并/当前表,将历史和当前状态保留在同一个表中,并具有反映世界当前状态的视图。这意味着您可以完全删除数据库触发器,还可以撤消用户对表的所有delete/update权限。缺点是您的程序逻辑将选择每个客户的最新版本(或任何其他),这可以通过窗口函数来完成,但将比使用统一表要慢。此外,在这种情况下,在实际从数据库中删除一行时需要小心(例如,出于GDPR原因)。即使行已存在超过10年,它可能仍然是最新的,因为没有更新版本的行可用。
https://stackoverflow.com/questions/52870461
复制相似问题