是否可以对像GIT这样的数据库进行版本控制?

时间:2018-10-18 08:57:41

标签: mysql sql database mongodb version-control

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

无论MongoDB还是Mysql等,我都愿意使用DB。 而奖金将是比较内容和/或还原到同一分支上的旧版本。 稍后将在Node.js中编程

编辑:使其更加清晰。我想要一个行版本的Controll。不是shema

1 个答案:

答案 0 :(得分:0)

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

您将需要找到有关版本和更新时间的业务规则。例如,如果客户更改了她的地址,则您要更新/更改哪些订单。当然,当这些订单已经完成并在一年前付款时,您不希望使用新地址更新订单。但是您当然希望在尚未发货的订单中更新地址。但是对于已发货但尚未到达的订单,更改送货地址会给所有相关方造成很多混乱。

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

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

最容易适用于现有模式的方法是为每个表mytable拥有第二个表mytable_log,该表通过数据库触发器填充并存储旧行和新行,以及(数据库)用户和操作。这样,您的应用程序对数据库所做的任何操作都会自动记录在日志中,而不会对现有查询产生太大影响。您将需要找到一种方法,通过其数据库登录或其他变量或存储过程,将代理用户与数据库进行通信。

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