【发布时间】:2010-09-10 13:57:01
【问题描述】:
我使用 SQL Server 2008 为我的 DAL 启动了一个带有 Entity Framework 4 的 ASP.NET 项目。在我的数据库中,我有一个表 Users 应该有很多行(例如 5.000.000)。
最初我的用户表是这样设计的:
Id uniqueidentifier
Name nvarchar(128)
Password nvarchar(128)
Email nvarchar(128)
Role_Id int
Status_Id int
我已经修改了我的表格,并添加了一个MarkedForDeletion 列:
Id uniqueidentifier
Name nvarchar(128)
Password nvarchar(128)
Email nvarchar(128)
Role_Id int
Status_Id int
MarkedForDeletion bit
我应该每次都删除每个实体,还是使用MarkedForDeletion 属性。这意味着我需要更新该值,并在某个时刻使用存储过程或类似的东西删除所有将值设置为 true 的用户。
MarkedForDeletion 属性的更新成本不与删除操作相同吗?
【问题讨论】:
-
如果您需要历史记录,请将 MarkForDeletion 更改为日期。我开发的许多系统都必须跟踪信息多年,即使被“删除”。
-
@Dave:+1。在这方面,可为空的 smalldatetime 非常适合我。对于内部系统,甚至是
deletedByUserName。哎呀,甚至完全转移到审计表。 :) -
@Dave:在这种情况下,如果我理解正确,MarkForDeletion 将表示该项目被“删除”的日期。但是对分贝有什么影响呢?意思是更新比删除快?在我看来它仍然是一个数据库访问操作。
-
@SorinA:并非所有的“访问操作”都是平等的!
-
@SorinA:测量性能。除非您拥有大容量系统,否则更新和删除的费用可能是相等的。现代数据库能够在低使用率期间对表进行物理碎片整理。因此,删除的性能损失是在以后支付的,如果有的话。加上缓存和大量 RAM,您不必担心。
标签: sql-server database