移动或设置为1个已删除的记录?

时间:2016-05-06 00:42:55

标签: mysql

我的问题是,删除用户评论的最佳解决方案是什么? (并出于法律原因保留)

当他点击删除时,我有两种可能性:

1)复制到另一个表:创建一个结构相同的表(using System.Linq.Dynamic; //Import the Dynamic LINQ library //The standard way, which requires compile-time knowledge //of the data model var result = myQuery .Where(x => x.Field1 == "SomeValue") .Select(x => new { x.Field1, x.Field2 }); //The Dynamic LINQ way, which lets you do the same thing //without knowing the data model before hand var result = myQuery .Where("Field1=\"SomeValue\"") .Select("new (Field1, Field2)"); ),将注释复制到那里并从del_comments删除。

2)将删除设置为1:更新表注释,设置deleted = 1.所以每次选择我需要在其中添加:comments以获取未删除的。

我应该使用1还是2?

1 个答案:

答案 0 :(得分:2)

虽然我认为两个无关紧要的解决方案2之间的明显差异将是两者中更“真实”的方法。

解决方案1涉及两个修改查询,即在del_comments中创建一行,然后删除原始表中的行,以便您认为MySQL更容易搜索。然而,有人可能会争辩说“当我们可以为每个单独的线程提供一个注释表时,为什么每个线程都有一个单独的表满了注释”。

解决方案2涉及单个修改查询,即在现有行上切换布尔值,MySQL的感知成本必须将每行的deleted列与0进行比较。但是SQL的整个要点是存储与此相关的数据行和数据列,因此这个解决方案首先适用于您使用SQL数据库的原因。你几乎可以肯定地做了很多'heaver'的查询,只需检查deleted为0的行。

我认为解决方案1的内存和空间效率会更低,但这纯粹是轶事,但我可以告诉你一个事实,即数据库结构使用解决方案2要容易得多,而且要简单得多。