我无法找到更好的标题。
Branches Users Attendance
----------- ----------- -----------
branchID^ userID^ courseID^
branchName userName userID*
branchID*
这是我的餐桌。由于公司重组,我需要删除旧分支和属于它们的用户。但是,当我的老板想要看到旧的出勤时,即使他们不存在,他也希望看到旧的用户名。
这里最好的做法是什么?我想在分行/用户中添加一个已禁用的列,以便它们在网页上不可见。
答案 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`
注意:
如果您不想清除整个数据库,请不要删除任何行 当你想删除时,请在基于关系的机制中进行删除。