删除数据记录 - 保持联接数据

时间:2015-04-26 04:18:24

标签: asp.net sql-server

我无法找到更好的标题。

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

这是我的餐桌。由于公司重组,我需要删除旧分支和属于它们的用户。但是,当我的老板想要看到旧的出勤时,即使他们不存在,他也希望看到旧的用户名。

这里最好的做法是什么?我想在分行/用户中添加一个已禁用的列,以便它们在网页上不可见。

2 个答案:

答案 0 :(得分:3)

A"软删除" flag通常用于满足保留当前和逻辑删除数据的要求。或者,您可以将行移动到归档表以进行历史报告。

如果您需要在两者上进行组合报告,则在同一个表中同时包含当前和逻辑删除的行会更方便。缺点是非活动行的存在可能仅为活动数据的查询增加更多开销。很大程度上取决于非活动行的百分比和行数。

答案 1 :(得分: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`
  

注意:
  如果您不想清除整个数据库,请不要删除任何行   当你想删除时,请在基于关系的机制中进行删除。