軟刪除和硬刪除的處理方法


硬刪除

硬刪除就是傳統的物理刪除,直接將該記錄從數據庫中刪除。但是是人總會犯錯誤,在誤操作刪除了重要數據后,如果想要恢復該數據,需要鎖表再去訪問日志文件。這樣會造成大量的人力資源浪費,現在的開發不推介這種方式。

軟刪除

軟刪除又叫邏輯刪除,標記刪除,與我們常說的刪除不同,並不是真的從數據庫中將這條記錄去除,而是會設置一個字段,常見的有:isDelete或者state等字段來標記刪除狀態。當該字段為0的時候為未刪除狀態,為1時則是刪除狀態。

在現實情況中,很多時候我們說的刪除並不是真的是刪除的本意,因為站在用戶的角度來看,並不是一種刪除的狀態:
訂單不是被刪除的,是被“取消”的。
員工不是被刪除的,是被“解雇”的(也可能是退休或者暫時離職了)。
職位不是被刪除的,是被“填補”的(或者招聘申請被撤回)。
所以這些時候,我們並不能真的把記錄刪除,所以軟刪除就出現了。

當然,我們更希望用一下代表狀態的詞來代替isDelete,就比如我們項目中已經使用的:有效、停用、棄用等等。
而在查詢時只需要加上一個判斷即可成功篩出軟刪除的對象了。

例:select user.id, user.password from tbl_user where isDelete = 0

 

 

軟刪除和硬刪除的處理方法

實際上,並不是所有的記錄都有必要被一直保留,過多的數據會導致查詢效率低下,數據庫臃腫。
比如許多程序的日志文件只會存留最近一周或者最近一月。對於更久的數據需要物理刪除。

那么有沒有既能實現軟刪除保留需要的數據又能在數據量過大的時候進行物理刪除的辦法呢,答案是有的。
可以為state字段賦予另一個意義,當它是2時(當然別的數值也行)不再保留,直接物理刪除。
或者再聲明一個字段isRecycle,來表示該記錄需不需要直接刪除。
這樣在定期維護數據庫的同時也可以刪除不再需要的記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM