【发布时间】:2011-07-23 07:24:23
【问题描述】:
我试图弄清楚如何设计我的数据库表以允许撤消重做。
假设您有一个具有以下结构的 tasks 表:
id <int>
title <varchar>
memo <string>
date_added <datetime>
date_due <datetime>
现在假设在几天内多次登录并进行了多次编辑;但用户想回到其中一个版本。
- 您是否有一个单独的表来跟踪更改 - 或者 - 您是否尝试将更改保留在 tasks 表中(“幽灵”行,因为没有更好的术语)?
- 您会跟踪所有列还是只跟踪每次更改的列?
如果重要的话,我正在使用 MySQL。另外,如果重要的话,我希望能够显示历史记录(ala Photoshop)并允许用户切换到任何版本。
额外问题:您会在更改时保存整个 memo 单元格还是尝试仅保存增量?我问的原因是因为memo 单元格可能很大,并且每次修订只能更改一个单词或字符。诚然,保存 delta 需要解析,但如果不希望经常撤消,那么节省空间而不是处理时间不是更好吗?
感谢您的帮助。
【问题讨论】:
-
这里有类似的问题。看看my answer
标签: mysql sql undo-redo delta audit-tables