2011-10-31 211 views
0

我想知道從數據庫中刪除記錄的標準做法。從數據庫中刪除記錄

作爲一個例子,用戶已經刪除了一條記錄,但我們仍然希望記錄刪除的記錄以及哪個用戶,以便在出現錯誤時檢索它,或者知道是誰進行了更改。

在該注意事項中,如果該用戶離開公司,那麼完全刪除他似乎不是一個好主意,因爲仍有與此用戶關聯的信息(如日誌)。但是,如果我們離開他,並且不顯示他,管理員可能不知道爲什麼某個特定的用戶名不可用。另外,如果簡單地隱藏已刪除的記錄是標準做法,那麼這是不是會導致潛在的巨大表非常少訪問數據?

在此先感謝您的幫助。

+2

部分數據不應該被刪除,但會被標記爲「無效」。我通常避免刪除帳戶,而是停用它們。在數據庫中也使用約束來避免不一致的數據 – galchen

回答

0

首先你的問題是不是一個真正的編程或爲此事數據庫設計的問題,這是更多的業務需求問題。而且這是一個開放式的問題,因此我的回答可能是主觀的。

剛纔提到的最後一點是關於第一個問題,「潛在」巨大的表是一個相對的陳述。你爲每個人保留什麼?它是否是他們整個就業歷史的日常活動日誌,還是標稱的員工數據?

對於關鍵數據,您可以使用特殊狀態列標記數據(例如,您可以將某人標記爲退休,開除等,而不是刪除記錄)。您還可以將數據移動到歸檔表或甚至單獨的歸檔數據庫,並附帶額外的歸檔日期等。處理數據的方法有很多。

今天的技術使我們能夠建立可有效存儲peta字節數據的數據庫。

看看你的組織需求,並使用THAT作爲標準,而不是認爲a)這是一個設計問題,或b)它是一個編程問題。

+0

你有一個點艾哈邁德。業務決策已經完成,我正在尋找如何實施它。用戶示例是我遇到的最簡單的示例。其他示例包括從任何表中刪除記錄並保留某人刪除記錄。 –

3

在許多項目中,我不刪除記錄,但將它們標記爲已刪除的設置爲true,爲我爲每個表創建的字段。
因此,例如我用

UPDATE my_table SET deleted = true 
WHERE id = ... 

請記住,當你查詢的有效記錄,你必須指定

SELECT * FROM your_table 
WHERE deleted = false 
+0

+1對於deleted = true。宏看來非常好的做法。但是如果擁有數百萬條記錄並且總是出現新的,新的和新的記錄呢?你不覺得它可以超載數據庫嗎? –

+1

好吧,也許吧。無論如何,將索引放在已刪除的字段上可以幫助你。考慮一下:如果你需要保存記錄沒有很多快速的替代方法;) – Marco

+0

@AwaisQarni:看看我以前的評論;我忘了通知你,對不起 – Marco

0

如果沒有進一步的使用,並且您不能再考慮將數據記錄在數據庫中,那麼請繼續進行硬刪除以檢查表的大小。在您的情況中,情況並非如此,您應該決定是否需要保留日誌或應保存日誌,即是否執行級聯刪除或僅刪除用戶,並將日誌保留爲數據庫中的孤立文件。

如上所述,添加一個布爾列表是一個好主意。另一種方法是使用第二個數據庫,並將從原始數據庫中刪除的所有記錄移動到輔助數據庫。

至於標準的做法,我不認爲有任何,你需要找到適合你的需要和實施的做法。

+0

第二個數據庫是一個好主意,但可能不切實際,因爲某些數據仍然需要出現在當前/活動數據庫中。例如。您刪除了一個用戶,但是他所做的任何更新都必須保持活動狀態。這是需要考慮的事情,但... –