我想弄清楚如何設計我的數據庫表以允許撤銷重做。如何使用undo-redo設計SQL數據庫?
假設你有一個任務表具有以下結構:
id <int>
title <varchar>
memo <string>
date_added <datetime>
date_due <datetime>
現在假設過了幾天,多用戶登錄功能,一些編輯已經發生;但用戶想要回到其中一個版本。
- 你將有一個單獨的表跟蹤的變化 - 或 - 你會盡量保持任務表中的變化(「鬼」行,因爲沒有更好的術語)?
- 你會跟蹤所有的列還是隻是每次更改的列?
如果有問題,我使用MySQL。此外,如果它很重要,我希望能夠顯示歷史(ala Photoshop)並允許用戶切換到任何版本。
獎金的問題:你是否保存整個memo
細胞上的改變,或者你會嘗試只保存增量?我想問的原因是因爲memo
單元格可能很大,每個修訂版只能更改一個單詞或字符。當然,保存三角洲將需要解析,但如果不經常期望撤銷,那麼節省空間而不是處理時間會更好嗎?
謝謝你的幫助。
在這裏也有類似的問題。看看[我的答案](http://stackoverflow.com/questions/5408828/are-there-problems-with-this-soft-delete-solution-using-eav-tables/5410359#5410359) – Ronnis 2011-03-26 23:21:04