前记
因为生活(钱)所迫,转行(做苹果配件相关做电子产品)已经快半年了,转行后,收入确实高了不少,生活也确实滋润了许多,不过我常常还念自己的程序员生涯,怀念当初对技术如饥似渴的狂热追求的日子,让人觉得无比充实;怀念当初只为解决一个功能、一个算法、一个bug甚至是帮别人解决一个问题而通宵达旦废寝忘食,让人觉得热血沸腾,也正是因为这个怀念,所以我一直保持潜伏于博客园,一直保持学习,忙里偷闲偶尔还会写几个小桌面工具,为手中IPhone写个应用程序,偶尔也参与和现在还在搞开发的朋友讨论一些技术问题。
正文
前几天一个朋友问我数据库的数据用delete误删了能恢复吗?因为他们公司维护一个运行已久的项目,在测试时将delete的where的参数写错了,使所以删除了一些重要的数据。因为备份文件过旧,日志文件破坏了,所以最终还是没有成功恢复。(顺便在此寻找能解决此问题的高手)
由此我不禁想问过期的数据为什么要删除呢?
假如要删除离职员工信息,那是不是说该员工曾经在公司的所以贡献和成绩都要一起抹掉呢?
再如公司要删除某种停产产品,那是不是说所有包含了该产品的订单都要一并删除呢?再级联下去,这些订单对应的所有客户是不是也该删除?这么一步步删下去,那公司的损失不言而喻。
员工不是被删除的,是被“解雇”的。
产品不是被删除的,是被“停产”的。
订单不是被删除的,是被“取消”的。
职位不是被删除的,是被“填补”的。
在上面这些例子中,我们的着眼点应该放在用户希望完成的任务上,而非发生在某个实体身上的技术动作。几乎在所有的情况下,需要考虑的实体总不止一个。
为了代替IsDeleted标志,我们可以用一个代表相关数据状态的字段:有效、停用、取消、弃置等等。用户可以借助这样一个状态字段回顾过去的数据,作为决策的依据。
删除数据除了破坏数据一致性,还有其它负面的后果。我们把所有数据都留在数据库里:“能不删除。就不删除。”。