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

35g0bw71  于 2022-12-17  发布在  Mysql
关注(0)|答案(1)|浏览(142)

正如标题所说,我的问题是数据库是否有可能像Git那样对内容进行版本控制?我的用例是我们的业务,我们每月上线2-3次,都有特定的发布名称(分支)。
我对使用哪个数据库持开放态度,不管是MongoDB还是MySQL等。另外一个好处是可以比较内容和/或恢复到同一分支上的旧版本。稍后将在Node.js中编程
EDIT:为了使它更清楚。我想要一个行版本控制。而不是模式

qoefvg9y

qoefvg9y1#

这主要基于How to version control a record in a databasehttp://www.sqlitetutorial.net/sqlite-trigger/
您将需要找到有关版本控制内容和更新时间的业务规则。例如,如果客户更改了地址,您要更新/更改哪些订单。如果这些订单已在一年前完成并支付,您当然不希望使用新地址更新订单。但您肯定希望更新尚未发运的订单中的地址。但对于已经发货但尚未到达的订单,更改送货地址会给相关各方造成很多混乱。
此外,出于审计目的,您可能希望跟踪对某些数据字段的所有更改。但出于GDPR等其他监管原因,您可能希望设置此类更改的到期日期。
因此,在决定使用哪种版本化方案之前,请考虑以后在查询中将如何使用版本化。
最容易添加到现有模式的方法是为每个表mytable创建第二个表mytable_log,该表通过数据库触发器填充,并存储旧行、新行和(数据库)用户和操作。这样,应用程序对数据库所做的任何操作都会自动记录在日志中,而不会对现有查询产生太大影响。您将需要找到一种方法,通过代理用户的数据库登录名或通过其他变量或存储过程,将代理用户与数据库进行通信。
另一种方法是取消合并/当前表,并将历史和当前状态保存在同一个表中,和具有反映世界当前状态的视图。这意味着您可以完全取消数据库触发器,还可以撤消用户对表的所有删除/更新权限。缺点是您将让程序逻辑选择每个客户的最新版本(或其他),这可以通过窗口函数来完成,但会比有一个统一的表慢。此外,在这种情况下,当你从数据库中删除一行时(比如,出于GDPR的原因),你需要小心。即使一行超过10年,它仍然可能是最新的,因为没有更新的版本可用。

相关问题