这是个问题
今天研究个博客项目的开源代码时,发现了一个奇怪的现象,就是发现它在数据库中查找的语句是下面这样
select 属性 from 表名 where is_deleted = 0 limit 1
它的目的是想找出表中没有被删除的数据,但是为啥要用这个 is_deleted 来记录这条数据是不是被删除了呢?直接在数据库删除了不好吗?
冷静分析
百度了一下,这原来是数据库软删除
从数据库删数据是一个非常有风险的事情,也许你会认为一些无效数据没有保留的必要,却很容易给后续的数据分析带来糟糕的事情。所以,设计数据库时就用 is_deleted 属性来记录是不是被删除了,而不是直接删除
这同时也打消了我的一个好奇心,之前我认为是不是注销了某软件的账号,再注册回来就可以享受新用户的福利了,现在知道了软删除我觉得之前的我还是太年轻
但是如果不删除数据库中的没用数据,那日积月累不是不堪重负?
所以正确的做法是定时将这部分软删除的数据以归档的形式放入数据仓库