2011-11-19 210 views
0

記錄刪除的最佳做法是什麼? 哪個選項最正確?sql刪除相關記錄?

例如

有以下情況:

---- ----用戶

INT usr_id

VARCHAR名

va rchar姓

布爾deleted_yn


--- subjects--

INT subject_id

VARCHAR標題

布爾deleted_yn


--- subject_to_user ---

INT subject_to_user_id

INT usr_id

INT subject_id

布爾deleted_yn


如果我想刪除用戶或受我需要刪除關係 - subject_to_user?

爲什麼我問,因爲在工作中有時用戶刪除一些信息,然後我們必須恢復該數據。 目前我們刪除相關數據,但恢復非常困難;

所以我問什麼是刪除最佳做法? 哪個選項最正確?

我認爲刪除相關數據是正確的,但這取決於情況。

刪除那裏我的意思是標記deleted_yn true/false

回答

3

最佳做法是不刪除任何東西。爲刪除

添加立柱稍稍旗項目「請將isDeleted」和大多數查詢您添加了「請將isDeleted WHERE =假」

+0

當然通過刪除那裏我的意思是,標記 - deleted_yn;所以問題是一樣的,我需要將標記相關的數據刪除嗎? – marechs

+0

特別是如果您目前進行大量數據恢復。 –

+1

這取決於數據庫的結構 - 如果你想所有的相關數據被標記爲刪除或不... – Yacov

0

在subject_to_user的相關數據是關係怎麼樣?帶ID。

如果您從用戶和主題中刪除而不是subject_to_user,那麼告訴您不會創建一個已經在subject_to_user中的ID的新用戶?

這個想法是刪除所有相關的數據。如果您需要恢復,則始終可以擁有另一組名爲deleted_user,deleted_subject和deleted_subject_to_user的表。當你從你的主表中刪除時,移動到之前的那些。

+0

想法:通過前綴delete_將數據移動到表格_有一定的意義,我會記住這一點,並試試這個:) – marechs

+0

你只需要兩倍的表格。 – MPelletier

+0

如果採取這種方法,您還可以添加deleted_dt字段,以便按日期/時間進行恢復。 – phatfingers

0

Udi Dahan(我受到了無情的影響)在這個話題上寫了一篇優秀的博客文章。你可以閱讀它here,但總結是反映現實生活中發生的事情。

例如,在現實世界中,訂單被「取消」,「返回」但從未真正刪除 - 上下文非常重要。