撤消数据库

时间:2010-07-20 22:30:36

标签: database design-patterns undo

我正在尝试编写“撤消”或“回滚”类型的方案。我的一部分人认为我已经过度复杂了,而且它必须先解决。

背景:我有一个产品(例如一本书),该产品有20个字段。产品具有媒体类型(PDF,硬拷贝,EPUB),每种媒体类型都有多种定价(价格,位置,即欧洲,亚洲,美国)。

看看以前的问题,纪念品模式似乎是最接近的,但我不知道如何做多层次。

例如,更改1 - 创建产品“Coding for Dummies”,它可以在Hardcopy中获得,欧洲售价100美元,亚洲售价75美元

更改2 - 将欧洲硬拷贝价格更改为90美元。添加PDF,欧洲成本为90美元,亚洲成本为75美元

更改3 - 删除硬拷贝记录

变更3是一个错误,我想回滚到变更2。

Looking at previous questionsMemento pattern似乎是最接近的,但我会复制很多数据。即在变化2& 3,您正在重复产品,媒体和定价。

我使用的数据集有近1,000,000种产品。 (上面的例子是简化的)实际上,一个产品有大约50个字段,媒体类型有大约15个字段

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

在表格上实施日期文件。

通过这种方式,您将进入2011年3月1日价格从21变为30的事实或其他事情,而不仅仅是打破旧的价值观。那么您将不仅可以查询最近的更改,还可以通过操纵日期来恢复旧的定价。

答案 1 :(得分:0)

我不太清楚你的意思是多层次以及你的帖子中提到数据库的原因,但一般来说命令或纪念品都是在面向对象程序中获取撤销和重做的好选择。两种方式都应该没问题。

复制数据是什么意思?你只记得产品状态的变化 - 如果你想在以后还原它们,没有别的办法......