2013-03-02 62 views
1

我有一個複雜的模式與許多實體和關係。我想定義一個可以撤消的邏輯刪除操作。我曾考慮給每個表添加'isDeleted'標誌,但似乎對我有缺陷。 我也考慮添加一個類似於原始模式的歸檔模式,以及每次刪除操作以將數據移到那裏。似乎需要大量代碼來編寫「刪除」和「取消刪除」操作(特別是因爲我想模仿刪除邏輯delte的casade。)。從數據庫邏輯刪除

最後,我不確定在哪裏處理邏輯刪除事件 我使用EF,所以我可以在代碼中完成它,或者我可以在DB中使用刪除觸發器。

我會appreiciate關於如何以優雅的方式實現邏輯刪除任何recomendations。謝謝。

回答

3

我工作的每個公司都一直使用邏輯刪除標誌並通過代碼進行管理。添加一個歸檔模式是一個巨大的開銷,而IMO增加的優化(編碼和性能都不明智)不值得額外付出努力。

+1

刪除標誌的缺點是,當您在刪除操作中節省工作時,您需要將isDeleted = false檢查添加到每個查詢。 – 2013-03-02 06:59:37

+0

@omer schleifer作爲索引一部分的每個數據庫中的「已刪除」列和查詢範圍中的默認值要容易得多,並且將業務邏輯放入代碼中,而不是數據庫中。如果您想恢復或只查看已刪除的記錄怎麼辦?所以我懷疑任何其他嘗試是否值得超負荷和複雜。 – YvesR 2013-03-02 18:08:19

0

由於這是一個OLTP數據庫,所以我沒有使用IsDeleted標誌的問題。如果您擔心性能問題,我將繼續使用IsDeleted標誌並通過批處理將其移至歸檔,而不是在線。

我總是記住一件事,以避免過度設計某些東西 - 除非是問題,否則這不是問題。