我的问题是,删除用户评论的最佳解决方案是什么? (并出于法律原因保留)
当他点击删除时,我有两种可能性:
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?
答案 0 :(得分:2)
虽然我认为两个无关紧要的解决方案2之间的明显差异将是两者中更“真实”的方法。
解决方案1涉及两个修改查询,即在del_comments
中创建一行,然后删除原始表中的行,以便您认为MySQL更容易搜索。然而,有人可能会争辩说“当我们可以为每个单独的线程提供一个注释表时,为什么每个线程都有一个单独的表满了注释”。
解决方案2涉及单个修改查询,即在现有行上切换布尔值,MySQL的感知成本必须将每行的deleted
列与0进行比较。但是SQL的整个要点是存储与此相关的数据行和数据列,因此这个解决方案首先适用于您使用SQL数据库的原因。你几乎可以肯定地做了很多'heaver'的查询,只需检查deleted
为0的行。
我认为解决方案1的内存和空间效率会更低,但这纯粹是轶事,但我可以告诉你一个事实,即数据库结构使用解决方案2要容易得多,而且要简单得多。