正如标题所说,我的问题是,数据库是否可以像git那样对内容进行版本化?我的用例将是我们的业务,我们每个月上线2-3次,都有特定的releas名称(分支机构)。我对wichdb持开放态度,无论是mongodb还是mysql等都可以使用,另外一个好处是可以比较同一分支上的内容或还原到旧版本。稍后将在node.js中编程编辑:让它更清楚。我要一个行版本控制。不是谢玛
axkjgtzd1#
这在很大程度上取决于如何对数据库中的记录进行版本控制,以及http://www.sqlitetutorial.net/sqlite-trigger/ :您将需要找到您的业务规则,这些规则涉及什么版本以及什么时候更新。例如,如果客户更改了地址,您希望更新/更改哪些订单。当然,你不想更新新的地址时,这些订单已经完成并支付了一年前的订单。但您肯定希望在尚未发货的订单中更新地址。但对于已经发货但尚未到货的订单,更改送货地址会给相关各方带来很多困惑。此外,出于审核目的,您可能希望跟踪对某些数据字段的所有更改。但出于其他监管方面的原因,比如gdpr,您可能需要确定这些变更何时到期。因此,在决定使用哪种版本控制方案之前,请考虑以后在查询中如何使用版本控制。最容易固定到现有模式上的方法是为每个表提供 mytable 第二张table mytable_log 它通过数据库触发器填充,并存储旧的行和新行以及(数据库)用户和操作。这样,应用程序对数据库所做的任何操作都会自动记录在日志中,而不会对现有查询产生太大影响。您需要找到一种方法,通过代理用户的数据库登录或通过附加变量或存储过程,将代理用户与数据库通信。另一种方法是取消合并/当前表,将历史和当前状态保持在同一个表中,并拥有反映当前世界状态的视图。这意味着您可以完全取消数据库触发器,还可以为用户撤消表上的所有删除/更新权限。缺点是,您的程序逻辑会选择每个客户的最新版本(或其他版本),这可以通过窗口函数完成,但比使用合并表要慢。另外,在这种情况下,在实际从数据库中删除一行时需要小心(例如,出于gdpr的原因)。即使一行的历史超过10年,它也可能仍然是最新的,因为没有更新版本的行可用。
mytable
mytable_log
1条答案
按热度按时间axkjgtzd1#
这在很大程度上取决于如何对数据库中的记录进行版本控制,以及http://www.sqlitetutorial.net/sqlite-trigger/ :
您将需要找到您的业务规则,这些规则涉及什么版本以及什么时候更新。例如,如果客户更改了地址,您希望更新/更改哪些订单。当然,你不想更新新的地址时,这些订单已经完成并支付了一年前的订单。但您肯定希望在尚未发货的订单中更新地址。但对于已经发货但尚未到货的订单,更改送货地址会给相关各方带来很多困惑。
此外,出于审核目的,您可能希望跟踪对某些数据字段的所有更改。但出于其他监管方面的原因,比如gdpr,您可能需要确定这些变更何时到期。
因此,在决定使用哪种版本控制方案之前,请考虑以后在查询中如何使用版本控制。
最容易固定到现有模式上的方法是为每个表提供
mytable
第二张tablemytable_log
它通过数据库触发器填充,并存储旧的行和新行以及(数据库)用户和操作。这样,应用程序对数据库所做的任何操作都会自动记录在日志中,而不会对现有查询产生太大影响。您需要找到一种方法,通过代理用户的数据库登录或通过附加变量或存储过程,将代理用户与数据库通信。另一种方法是取消合并/当前表,将历史和当前状态保持在同一个表中,并拥有反映当前世界状态的视图。这意味着您可以完全取消数据库触发器,还可以为用户撤消表上的所有删除/更新权限。缺点是,您的程序逻辑会选择每个客户的最新版本(或其他版本),这可以通过窗口函数完成,但比使用合并表要慢。另外,在这种情况下,在实际从数据库中删除一行时需要小心(例如,出于gdpr的原因)。即使一行的历史超过10年,它也可能仍然是最新的,因为没有更新版本的行可用。