業務偽刪除該這么設計?現在大數據時代,數據是很重要的,所以對于一些數據系統一般不會做物理刪除,刪除也會有備份,所以需要設計一套偽刪除的邏輯,但在下才疏學淺,對這一套邏輯了解不深,想向各位請教請教!下面是鄙人搜索得來的兩種方法,但個人覺得兩種方法都不是特別好,想問下各位有什么更好的方法沒?1.一般系統采用記錄加DeleteAt字段來判斷數據是否刪除,但這樣每次查詢(單表,多表聯查)都需要加上DeleteAt判斷,系統上復雜了一個維度。而且如果數據又有唯一索引時,就需要加上DeleteAt字段一起做唯一索引,這樣隨著數據量增加,索引就會消耗很多的空間。2.還有一種做法是加一張表做刪除歸檔表,刪除的記錄從表中刪除然后遷移到刪除歸檔表中,這樣偽刪除也完成了,但如果做數據恢復的時候就比較麻煩了,(刪除歸檔表怎么設計暫不清楚,想請教請教)。回復一下回答里只用一個status字段標記數據狀態的不好之處只用一個status字段標記,當有唯一鍵存在時有缺陷,這種唯一鍵的場景還比較多。講下場景:系統要求一個用戶只能創建一個項目,當然項目我可以刪除重建。只有一個status字段標記項目狀態, 1 啟用 2 刪除project表 user_id project_id status 三個字段,組成唯一鍵user_id project_id statusu1 p1 2u1 p2 1好上面就是用戶u1創建一個項目p1后,刪除重新建立了項目p2,然后現在來看,如果用戶把p2也刪除,就會出現刪除異常情況,違反了表唯一鍵約束,所以只用一個status字段標記的缺點就暴露出來了。之前在本人的項目中也是采用status字段標記的方式,如果刪除后又重建就會先去找已經刪除的記錄重新啟用,但這種做法是不對的,因為之前刪除的項目關聯了其他記錄,或者存在一些之前id標記的數據統計記錄,如果啟用之前的刪除的項目記錄,在需求上就不對了。
2 回答

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
兩種方法都挺好的。
刪除歸檔表就是。比如你有一個content
表,新建一個content_deleted
表。每當在content
表中刪數據的時候就同時把該數據新增到content_deleted
表里面.
我沒有更好的方法,偽刪除本身就是一個需求,一個需求會讓程序的復雜度增加我認為是一個正常的操作

HUH函數
TA貢獻1836條經驗 獲得超4個贊
兩種方式都在用
說下第一種,我用status字段表示,刪除時就更新該記錄的字段值值為-1。這么做還有幾個好處,比如-1代表刪除,0代表停用,1代表啟用....還可以擴展更多用法。
添加回答
舉報
0/150
提交
取消