首页 / 知识
关于sql:实现软删除的最佳方法是什么?
2023-04-15 16:31:00

What is the best way to implement soft deletion?
目前正在处理一个项目,我们必须对大多数用户(用户角色)实施软删除。 我们决定在数据库的每个表上添加一个
为了将来进行维护,每个 是否有更好的解决方案来实施软删除? 更新:我还应该注意,我们有一个Audit数据库,该数据库跟踪对Application数据库中所有表/字段的更改(字段,旧值,新值,时间,用户,ip)。
我倾向于一个
您可以对包含
具有 结果,如果您键入类似的查询
然后Oracle将执行"分区修剪",仅查看适当的分区。在内部,分区是一个不同的表,但是对用户而言它是透明的:无论是否分区,您都可以在整个表中进行选择。但是Oracle只能查询所需的分区。例如,假设您有1000个带有
那么Oracle将只扫描1000行的分区。如果未对表进行分区,则必须扫描101000行(两个分区)。 遗憾的是,最佳响应取决于您要通过软删除尝试完成的操作以及要在其中实现此操作的数据库。 在SQL Server中,最好的解决方案是使用类型为SMALLDATETIME或DATETIME(取决于必要的粒度)的Deleted_on / deleted_at列,并使该列可为空。在SQL Server中,行标题数据包含表中每个列的NULL位掩码,因此执行IS NULL或IS NOT NULL比检查列中存储的值要快得多。 如果您有大量数据,则需要通过数据库本身或两个单独的表(例如Products和ProductHistory)或通过索引视图来对数据进行分区。 我通常避免使用标志字段,例如is_deleted,is_archive等,因为它们仅包含一种含义。可为null的Deleted_at,archived_at字段为您自己以及继承您应用程序的任何人提供了更高的含义。而且,我避免使用像瘟疫这样的位掩码字段,因为它们需要了解位掩码的构建方式,以便掌握所有含义。 如果表很大并且性能很成问题,您可以随时将"已删除"记录移到另一个表中,该表具有其他信息,例如删除时间,删除记录的人等 这样,您不必在主表中添加另一列 这取决于您需要哪些信息以及要支持哪些工作流程。 您是否希望能够:
如果该记录已删除和未删除过四次,是否足以让您知道它当前处于未删除状态,还是您想知道过渡期间发生了什么(包括连续两次之间的任何编辑)删除!)?
小心删除软记录,导致违反唯一性约束。 考虑一下循环: 第二个create导致违反约束,因为在软删除的行中已经有login = JOE了。
一些技巧:
我个人的观点是+1以转到新表。它需要很多 如果将已删除的数据移动到Jim所说的另一个表上,并且记录下何时删除,为什么以及由谁记录,则绝对可以提高性能。
将 您没有提到什么产品,但是SQL Server 2008和postgresql(以及其他我敢肯定的)允许您创建过滤索引,因此您可以在is_deleted = 0处创建覆盖索引,从而减轻了此特定方法的负面影响。
我在项目上使用的是statusInd tinyint不为null的默认0列 可扩展性好,并且以数据为中心,使数据占用空间非常小-涉及实时性的350gb + dbs的关键。使用替代项,表,触发器会产生一些开销,具体取决于您的需求,这可能会也可能不会。
与SOX相关的审核可能需要更多的领域来帮助您解决此问题,但这可能会有所帮助。
把它放在你的 http://wiki.eclipse.org/EclipseLink/Examples/JPA/SoftDelete
创建另一个架构,并将其全部授予您的数据架构。
使用检查
并为较大的表编制 由于您已经具有审核记录,因此跟踪删除日期是多余的。 我更喜欢保留一个状态列,因此我可以将其用于几个不同的配置,即已发布,私有,已删除,needsAproval ... |
最新内容
相关内容
linux命令中添加用户?
linux命令中添加用户?,系统,密码,软件,用户,命令,信息,目录,用户名,账号,文件夹,linux添加用户名1、打开xshell软件,远程访问您的服务器或虚拟linux系统删除的命令?
linux系统删除的命令?,软件,系统,名称,工具,不了,命令,文件夹,电脑,通用,信息,linux删除文件夹命令1、linux删除命令rm-rf命令。具体详情:rm命linux命令更改用户?
linux命令更改用户?,系统,密码,管理,用户,命令,环境,工作,地址,电脑,文件,linux如何更改用户名?1、首先打开linux的终端,输入指令修改用户名,简linux修改用户名命令?
linux修改用户名命令?,系统,密码,查询系统,代码,数字,用户名,命令,第三,电脑,第一,linux怎样修改用户名和主机名以 root 用户登录系统或者使用linux命令给用户授权?
linux命令给用户授权?,系统,数字,管理,权限,命令,密码,工具,时间,软件,信息,linux怎样给普通用户设置权限添加用户 添加账号就是在系统中创建linux删除命令文件夹?
linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名称,linux删除文件的方法linux删除文件夹的方法有两种:rmdir命令和rmlinux恢复数据库命令?
linux恢复数据库命令?,工具,系统,软件,数据,盘中,密码,命令,备份,数据库,文件,linux如何恢复删除的文件1、接下来小编就给大家带来linux恢复误linux删除本行命令?
linux删除本行命令?,系统,本行,档案,命令,资料,商业,文件,终端,目录,文件名,Linux命令之sed-删除匹配行1、)先用s命令将此要删除的路径替换为一linux命令创建用户组?
linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管理,Linux中如何创建用户和用户组linux一条命令不能创建多个用户组linux删除第一行命令?
linux删除第一行命令?,单位,系统,命令,标的,不了,数字,连续,名称,档案,文件,mv什么意思呢?1、MV的意思具体如下:mV是一个较小的电压单位,可以用linux删除本行命令?
linux删除本行命令?,系统,本行,档案,命令,资料,商业,文件,终端,目录,文件名,Linux命令之sed-删除匹配行1、)先用s命令将此要删除的路径替换为一linux命令给用户授权?
linux命令给用户授权?,系统,数字,管理,权限,命令,密码,工具,时间,软件,信息,linux怎样给普通用户设置权限添加用户 添加账号就是在系统中创建