首页 > 解决方案 > 是否可以对 GIT 之类的数据库进行版本控制?

问题描述

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

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

编辑:让它更清楚。我想要一个行版本的 Controll。不是shema

标签: mysqlsqldatabasemongodbversion-control

解决方案


这主要基于如何对数据库中的记录进行版本控制http://www.sqlitetutorial.net/sqlite-trigger/

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

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

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

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

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


推荐阅读