mysql - 是否可以对 GIT 之类的数据库进行版本控制?
问题描述
正如标题所说,我的问题是数据库是否可以对 Git 等内容进行版本控制?我的用例是我们的业务,我们每月上线 2-3 次,都有特定的发布名称(分支)。
无论是 MongoDB 还是 Mysql 等,我都愿意使用 wich DB。奖励将是比较内容或恢复到同一分支上的旧版本。稍后这将在 Node.js 中编程
编辑:让它更清楚。我想要一个行版本的 Controll。不是shema
解决方案
这主要基于如何对数据库中的记录进行版本控制和http://www.sqlitetutorial.net/sqlite-trigger/:
您将需要找到有关版本和何时更新的业务规则。例如,如果客户更改了她的地址,您想要更新/更改哪些订单。当然,当这些订单已经在一年前完成并付款时,您不希望使用新地址更新订单。但是您当然希望更新尚未发货的订单中的地址。但是对于已经发货但尚未到达的订单,更改收货地址会给所有相关方造成很多混乱。
此外,出于审计目的,您可能希望跟踪对某些数据字段的所有更改。但出于 GDPR 等其他监管原因,您可能希望确定此类更改的到期日期。
因此,在决定使用哪种版本控制方案之前,请考虑稍后在查询中将如何使用版本控制。
最容易添加到现有模式的方法是为每个表mytable
创建第二个表mytable_log
,该表通过数据库触发器填充并存储旧行和新行以及(数据库)用户和操作。这样,您的应用程序对数据库所做的任何事情都会自动记录在日志中,而不会对现有查询产生太大影响。您将需要找到一种方法将代理用户与数据库进行通信,通过他们的数据库登录或通过附加变量或存储过程。
另一种方法是取消合并/当前表并将历史记录和当前状态保留在同一个表中,并拥有反映世界当前状态的视图。这意味着您可以完全取消数据库触发器,还可以撤销用户对表的所有删除/更新权限。缺点是您将让您的程序逻辑选择每个客户(或其他)的最新版本,这可以通过窗口函数完成,但会比周围有一个合并表要慢。此外,在这种情况下,您在实际从数据库中删除一行时需要小心(例如,出于 GDPR 的原因)。即使行已超过 10 年,它可能仍然是最新的,因为没有可用的更新版本。
推荐阅读
- php - 使用 laravel eloquent 仅向用户显示他尚未购买的产品
- python - 使用 Python 从文本中删除坏词
- jquery - 在 jquery 对象变量中为 `:checked` 添加规则
- java - Whitelabel 错误页面 Swagger,此应用程序没有 /error 的显式映射,因此您将其视为后备 swagger2:3.0.0-SNAPSHOT
- javascript - 无法读取未定义的属性“concat”
- python - 使用 MultiIndex 索引到 Pandas DataFrame 时保持顺序?
- .net - 我可以使用一些解决方法来避免混合内容错误吗?
- algorithm - 使用 BFS 算法找到 2 个顶点之间的最短路径
- python - 我想在列表中找到对象的下一个实例,并返回它的索引值
- r - 用R中正确拼写的单词替换拼写错误的单词的功能?