2010-07-27 77 views
3

为了保持系统的一致性我可以考虑2删除策略:删除实体战略

关系中的所有实体的
  1. 级联删除;

  2. 模拟删除(即,没有真正从数据库中删除,但例如,实体中的字段deleted的值为true并且它影响显示逻辑)。

我喜欢第二种方法,但我不知道如何正确实施它。

例如,假设我们开发一个简单的博客(用户,文章,评论和其他平常的东西)。我们来看User实体(和一个记者表USER)。如果我们删除某个用户,那么他的deleted字段将具有值true。所有用户的评论都会保留在原来的位置,每位读者都会知道某个评论的作者是谁。

这一切看起来不错,但我应该怎么做,如果一个新用户(谁试图进行登记)会删除一些用户已经指定相同的登录/电子邮件地址(其它独特的领域)?理论上,这个独特的字段值已经是免费的并且可以被采用。但是,如果有一天我会决定删除删除的用户,该怎么办?

与这种情况有关的最佳实践是什么?

回答

2

这真的取决于你的具体需要和你正在使用的系统的要求。

通常,“软删除”功能是期望的情况下,像你的榜样的第一部分,其中即使用户“被删除”你不希望被从系统中删除他们的内容。但是,在这种情况下,用户帐户永远处于使用状态,并且您将无法在将来为其他任何人重新使用该帐户。

在其他情况下的“级联删除”选项是首选,但可以成为一个非常有趣的东西来管理,与众多约束级联比预期单删除可能会影响更多的表。

我想了解你想尽可能真的在这里既解决方案实际上是有效完成的任务是很重要的。这只是特定的商业案例,决定哪一个最适合特定的实施。

+0

我们软删除一切和夜间存档了,那么很难从生产数据库中删除任何软删除他们是在一个月以后老了。可能考虑从档案中删除超过六个月的软删除。这取决于你的需求和对他们有意义的事情。 – 2010-07-28 08:44:47

0

这听起来像你最好的选择是软删除(存放在用户表中的标志)。如果您想在路上重新激活用户,您可能遇到以下情况。

用户A是否一串东西
用户A的进入休眠
用户B创建的帐户与相同的用户ID。
用户A想要回来。

您可能想要做的是将您网站上的所有内容都引用到唯一的用户标识,并且永不删除用户。