2010-07-20 30 views
2

我試圖編寫一個「撤消」或「回滾」類型的場景。我的一部分人認爲我已經過分複雜化了,而且之前一定已經解決了。用數據庫撤消

背景:我有一個產品(例如一本書),該產品有20個領域。產品具有媒體類型(PDF,硬拷貝,EPUB),每種媒體類型有多個定價(價格,地點,即歐洲,亞洲,美國)。

看着前面的問題,這個紀念圖案似乎是最接近的,但我不知道如何去做多層次。

例如,變化1 - 創建產品「編碼傻瓜」,它是在硬拷貝可用,適用於$ 100在歐洲和$ 75亞洲

變化2 - 改變歐洲硬拷貝價格到90美元。添加PDF,它的成本爲歐洲$ 90和$ 75亞洲

變化3 - 刪除硬拷貝記錄

更改3是一個錯誤,我想回滾到更改2.

Lookingatpreviousquestions,Mementopattern似乎是最接近的,但我會重複一個可怕的很多數據。即在變更2 & 3中,您正在重複產品,媒體和定價。

我使用的數據集有近1,000,000個產品。 (上面的例子被簡化了)實際上,一個產品有大約50個字段,媒體類型有大約15個字段

有沒有更好的方法?

回答

1

在您的表格上實施日期檔案。

通過這種方式,您將輸入2011年3月1日之前價格從21變爲30的事實,或者某件事情,而不僅僅是打擊舊價值。那麼你將能夠查詢不僅僅是最近的變化,但你可以通過操縱日期來恢復舊的定價。

0

我不太清楚你的意思是多層次的,爲什麼在你的文章中提到了數據庫,但一般來說命令或記憶都是很好的選擇,可以在面向對象的程序中進行撤消和重做。兩種方式你都應該沒問題。

你是什麼意思複製數據?您只記得產品狀態的變化 - 如果您想稍後恢復它們,則沒有其他辦法...

+0

我說過數據庫,因爲你必須將數據存儲在某個地方。我讀過的很多例子都過於簡化,並且說「只是像xml一樣方便地將數據序列化」。在這種情況下,在xml中保存狀態是不現實的 – 2010-07-20 23:05:41

+0

數據是指數據的變化嗎?如果兩種模式都這樣,那麼存在可以在數據庫中保存的「更改對象」(通過orm f。ex。)。如果磁盤空間有問題,可能需要注意刪除最早的某個時間點。但除此之外,我會將其視爲正常數據。 – hackbert 2010-07-20 23:25:31