考虑一个电商场景
商品表(goodsId int primary key,......);
订单表(orderId int,goodsId ......foreign key goodsId references 商品表(goodsId));
订单表中的goodsId被商品表中的goodsId约束
要是想下架某个商品,可以直接将商品表删除吗?显然是不行的,因为外键约束的存在,商品表作为父表不能在其子表删除前删除,那就是要将订单表全删除吗?也不行,订单表数量多且需保留给客户。那要如何在有外键约束存在的前提下将商品下架呢?
解决方法就是,将要下架的商品隐藏起来,让客户查找商品时查不到已经下架的商品,但商品表的数据还在,不会影响到订单表的数据。
通过在商品表中添加一个列(isOk),单独表示商品的状态,1表示在线,0表示下架。当商品要下架的时候,使用update将该商品表的isOk改为0,即可实现商品下架,客户在搜索商品时,系统都会加上isOk = 1的条件,查询到的都是在线的商品。
电脑上的文件删除也是逻辑删除,删除文件并清空回收站,其实并没有真正将文件彻底删除,而是将这份文件的硬盘数据标成无效,能够通过一些技术手段进行恢复。直到之后有数据占用了这个文件的位置才真正地将文件删除干净了。