首页 > 其他分享 >软删除

软删除

时间:2023-12-07 15:13:23浏览次数:19  
标签:users 删除 标记 数据 public IsDeleted

软删除是一种常见的数据库设计模式,用于在删除数据时并不真正从数据库中移除数据,而是将其标记为已删除。这种设计模式的主要目的是保留数据的完整性和历史记录,并提供一种恢复数据的机制。

软删除的业务逻辑可以通过在数据库中添加一个额外的字段(例如 IsDeleted)来实现。当数据被标记为已删除时,该字段的值被设置为 True1,表示该数据已被逻辑上删除。在查询数据时,应该将只返回未被标记为已删除的数据。

 

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsDeleted { get; set; }
}

public interface IUserRepository
{
    void DeleteUser(int id);
    IEnumerable<User> GetActiveUsers();
    IEnumerable<User> GetAllUsers();
}

public class UserRepository : IUserRepository
{
    private readonly List<User> _users;

    public UserRepository()
    {
        _users = new List<User>();
    }

    public void DeleteUser(int id)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user != null)
        {
            user.IsDeleted = true;
        }
    }

    public IEnumerable<User> GetActiveUsers()
    {
        return _users.Where(u => !u.IsDeleted);
    }

    public IEnumerable<User> GetAllUsers()
    {
        return _users;
    }
}

在这个示例中,我们定义了一个 User 类,其中包含了一个 IsDeleted 字段来表示用户是否被标记为已删除。
然后,我们创建了一个 UserRepository 类实现了 IUserRepository 接口,用于处理用户数据的增删改查操作。

当调用 DeleteUser 方法时,会将指定的用户标记为已删除,而不是直接从数据库中删除


在查询用户数据时,GetActiveUsers 方法只返回未被标记为已删除的用户。

软删除的方式,我们可以在需要的时候恢复已删除的数据,或者保留历史记录

比如,我们可以在用户界面上提供一个 "回收站" 功能,让用户可以查看和恢复已删除的数据。

请注意,软删除并不适用于所有业务场景,它的使用应该根据具体的需求和业务规则来确定。有些情况下,直接物理删除数据可能更为合适。

标签:users,删除,标记,数据,public,IsDeleted
From: https://www.cnblogs.com/ZkbFighting/p/17882039.html

相关文章

  • Golang os包代码示例:获取命令行参数、获取环境变量、创建和删除文件、检查文件或目录
    以下是一些示例代码,展示了如何使用os包进行操作系统相关的操作:获取命令行参数:packagemainimport( "fmt" "os")funcmain(){ args:=os.Args fori,arg:=rangeargs{ fmt.Printf("Argument%d:%s\n",i,arg) }}获取环境变量:packagemainimport( "f......
  • Mybatis-plus逻辑删除
    转载自:www.javaman.cn1、application.yml配置mybatis-plus:表示这是MyBatis-Plus的配置部分。global-config:全局配置。db-config:数据库相关配置。logic-delete-field:指定逻辑删除的字段名。在这里,指定的字段名是deleted。这意味着,当你调用MyBatis-Plus的逻辑......
  • 68.删除redis中whiteKey开头的值
    importredis#Redis连接信息redis_host='hostname'redis_port=6379redis_password='passwd'redis_db=5#选择数据库5#连接到Redis服务器redis_client=redis.StrictRedis(host=redis_host,port=redis_port,password=redis_password,db=red......
  • lvm删除磁盘后如何恢复
    1、lvm扩容,VGName为data   新增一块磁盘,比如新增磁盘名为/dev/vdc   给新增磁盘分区    parted/dev/vdc<<EOFmklabelgptyesmkpartprimary0100%ignorequitEOFpvcreate/dev/vdc1vgextenddata/dev/vdc1lvextend-l+100%FREE/dev/mapper/data-d......
  • VUE 输入框实现光标插入,设置光标位置并删除光标内容
    参考https://blog.csdn.net/m0_62333895/article/details/127648295自己写的例子constcursorPosition=ref("");consthandleFocus=(event:any)=>{cursorPosition.value=event.srcElement.selectionStart;console.log("cursorPosition.value......
  • el-table 新增、编辑和删除
    新增就是给新增按钮加一个事件,事件包括弹窗的打开(给el-dialog的v-model值赋为true)、需要传递给弹窗组件的数据信息等(因为是新增,就传想要新增编写的信息的初始化即可)关于弹窗的详细编码介绍请参考文章:"vue弹窗组件"编辑、删除新增按钮随便在哪个地方都可,但是编......
  • 多选批量删除 + 跨分页保留多选
    批量删除场景普通的批量删除实现:template显示结构<el-buttontype="danger"class="ele-btn-icon":icon="Delete"@click="deleteSomeGoods":disabled="multipleGoodsSelection.length===0">批量删除</el-button><el-......
  • [LeetCode Hot 100] LeetCode19. 删除链表的倒数第N个结点
    题目描述思路一:采用两次遍历第一遍遍历先获取链表的长度length第二次从dummy节点开始走length-n步然后将该节点指向下下个节点思路二:采用一次遍历设置虚拟节点dummyHead指向head设定双指针p和q,初始都指向虚拟节点dummyHead移动q,直到p与q之间相隔的元素个数为n(即q走......
  • 代码随想训练营第五十六天(Python)| 583. 两个字符串的删除操作、72. 编辑距离
    583.两个字符串的删除操作classSolution:defminDistance(self,word1:str,word2:str)->int:n,m=len(word1),len(word2)#dp数组代表使得word1以i-1结尾和word2以j-1结尾相同的最小步数dp=[[0]*(m+1)for_inrange(n+......
  • 4、虚拟机单机、集群的克隆、删除脚本(以初始化好的虚拟机为模板)
    摘自:https://blog.51cto.com/mfc001/6408229 虚拟机克隆、删除脚本[root@ubunt~]#catclone.sh#!/bin/bash##./etc/init.d/functions(如果是ubuntu,注释此行)Red="\e[1;31m"Purple="\e[1;35m"Green="\e[1;32m"Blue="\e[1;3......