[英]sql delete related records?
刪除記錄的最佳做法是什么? 哪個選項最正確?
例如
有以下情況:
表
----用戶----
int usr_id
varchar 名稱
varchar 姓氏
布爾刪除_yn
---科目--
整數主題_id
varchar 標題
布爾刪除_yn
---subject_to_user---
int subject_to_user_id
int usr_id
整數主題_id
布爾刪除_yn
如果我想刪除用戶或主題,是否需要刪除關系 - subject_to_user?
為什么我要問,因為在工作中有時用戶會刪除一些信息,然后我們必須恢復這些數據。 目前我們刪除了相關數據,但恢復非常困難;
所以我在問什么是刪除的最佳做法? 哪個選項最正確?
我認為刪除相關數據是正確的,但這取決於情況。
通過刪除那里我的意思是標記 deleted_yn 真/假
最佳做法是不刪除任何內容。 只需將項目標記為已刪除
添加列“IsDeleted”並在大多數查詢中添加“WHERE IsDeleted=False”
在數據庫中將數據標記為已刪除非常好,但在某些情況下,您可能需要真正從數據庫中刪除數據以符合數據法規。
使用 postgresql 時,您可以使用“USING”關鍵字刪除相關數據,以將刪除查詢組合到相關表中。 例如
DELETE FROM observed_topics
USING analyzed_documents
WHERE analyzed_documents.id = observed_topics.document_id
AND analyzed_documents.author = 'the_man_with_the_right_to_be_forgotten';
DELETE FROM analyzed_documents
WHERE author = 'the_man_with_the_right_to_be_forgotten';
將首先刪除與一些文檔相關的observed_topics
,在第二個語句中我們刪除實際文檔。
subject_to_user 中的相關數據是如何關聯的? 帶身份證。
如果您從 user 和 subject 中刪除,但沒有從 subject_to_user 中刪除,那么是什么告訴您不會創建一個 ID 已經在 subject_to_user 中的新用戶?
這個想法是刪除所有相關數據。 如果您需要恢復,您始終可以擁有另一組名為 deleted_user、deleted_subject 和 deleted_subject_to_user 的表。 當您從主表中刪除時,請移至之前的表。
Udi Dahan(我深信不疑地受其影響)寫了一篇關於這個主題的優秀博客文章。 你可以在這里閱讀它,但摘要是為了反映現實生活中發生的事情。
例如,在現實世界中,訂單被“取消”、“退回”但從未真正刪除——上下文非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.