删除数据还是仅将其标记为已删除?

时间:2010-11-27 16:11:01

标签: google-app-engine

我正在建立一个网站,让人们可以创建词汇课程。创建课程时,会创建引用课程的新闻项目。当另一个用户练习课程时,用户还会将练习结果与练习结果一起存储。

我的问题是当用户决定删除课程时该怎么办?

我考虑的选项是:

  • 实际上从中删除课程 数据库并删除所有 引用新闻,练习 结果等。
  • 只需将其标记为已删除即可 从引用中排除链接 新闻,结果等。

你有什么想法?如果数据永远不会被删除,ala Facebook?是否应该一起避免引用?

顺便说一句,我正在使用Google App Engine(python / datastore)。在我删除被引用的对象时,db.ReferenceProperty没有设置为None?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果需要审核数据更改,则将数据标记为已删除(也称为“软删除”)会有很大帮助,特别是如果您记录了执行删除操作的用户及其发生的时间。它还允许非常容易地“取消删除”数据。

说过没有理由阻止“硬删除”(实际删除数据)作为管理功能来帮助整理错误。

答案 1 :(得分:0)

将数据标记为“已删除”最简单。如果您目前没有使用它,这可以使数据库中的所有内容保持整洁,并且可以轻松添加新功能。

另一方面,如果你正在做一些事情,比如向用户展示他们的“词汇点”来自何处,或者他们已经完成了多少课程,那么可能需要引用软删除的项目。

我从第一个开始,如果需要,可以稍后更改。原因如下:

  • 如果您没有使用软删除,则假设它们不会以未来请求实际需要它们的方式工作。无论如何,你必须重写它们。
  • 如果您正在使用它们,请假设没有人使用使用它们的功能。现在你已经做了很多工作,并将自己束缚在维护无人关心的事情上。
  • 如果您创建它们,您会发现自己正在创建一个使用它们的功能。见上文。
  • 如果您不创建它们,一旦您更好地了解了系统用户的真正需求,您就可以在以后创建它们。

创建软删除功能可为您提供更多选项。 Options have value. Options expire. Never commit early unless you know why.