2015-04-26 54 views
2

我無法爲此找到更好的標題。刪除數據記錄 - 保留加入的數據

Branches   Users    Attendance 
-----------  -----------  ----------- 
branchID^   userID^   courseID^ 
branchName  userName   userID* 
        branchID* 

這是我的桌子。由於公司重新架構,我需要刪除舊分支和屬於他們的用戶。但是當我的老闆想要看到老考勤時,即使他們不存在,他也想看到舊用戶名。

這裏最好的做法是什麼?我正在考慮在分支/用戶中添加一個禁用列,以便它們在網頁上不可見。

+0

我會用刪除的用戶創建一個新表,這樣出席查詢的工作方式與現在一樣,您只需更改用戶和分支查詢以檢查用戶是否是已刪除用戶的一部分。這是我的2美分 – frenchie

+1

按照你的想法。創建一個新的「IsActive(bit)」列似乎是最好的選擇。 – naveen

回答

3

「軟刪除」標誌通常用於解決保留當前和邏輯刪除數據的要求。或者,您可以將行移動到歸檔表以獲取歷史報告。

如果您需要在兩者上進行組合報告,將當前和邏輯刪除的行都放在同一個表中會更方便。缺點是非活動行的存在會增加僅用於活動數據查詢的開銷。很大程度上取決於不活動行的百分比和行數。

0

我用這樣的解決方案:

製作Log表:

[Log] 
ID (bigint IDENTITY(1,1)) PK 
Entity_Id (bigint) FK --'Entity' table is list of my tables 
Row_Id (bigint)   --Is Id of the row of the `Entity` 
Kind (int)    --0=Create, 1=Modify, 2=Delete, 3=Undelete 
actionDate (datetime) --'= GETDATE()' 
user_Id (bigint) FK  --'User' table is list of users 

現在這個查詢給了我行的狀態:

SELECT TOP(1) 
    Kind, 
    actionDate, 
    user_Id 
FROM 
    [Log] 
WHERE 
    Entity_Id = @Entity_Id AND 
    Row_Id = @Row_Id 
ORDER BY 
    actionDate DESC 

至於結果是:

0 => Created by `user` in `actionDate` 
1 => [Last] Modified by `user` in `actionDate` 
2 => [Last] Deleted by `user` in `actionDate` 
3 => [Last] Undeleted by `user` in `actionDate` 

注意:
如果您不想清除整個數據庫,請不要刪除任何行。
而當你想刪除在基於關係的機制中做它。