从数据库中删除记录

时间:2011-10-31 06:39:02

标签: database-design

我想知道从数据库中删除记录的标准做法。

例如,用户删除了一条记录,但我们仍希望保留已删除记录的记录和来自哪个用户的记录,以便在出现错误时检索记录,或者知道是谁进行了更改。 / p>

就此而言,如果该用户离开公司,完全删除他并不是一个好主意,因为仍有链接到该用户的信息(如日志)。但是,如果我们让他离开,并且根本不显示他,那么管理员可能不知道为什么特定的用户名不可用。

另外,如果简单地隐藏已删除的记录是标准做法,那么这是否会导致很少访问数据的潜在巨大表?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

在许多项目中,我不删除记录,但将其标记为已删除设置为true为我为每个表创建的字段 例如,我使用

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

请记住,当您查询有效记录时,您必须指定

SELECT * FROM your_table
WHERE deleted = false

答案 1 :(得分:0)

首先,您的问题不是编程或数据库设计问题,更多的是业务需求问题。此外,这是一个开放式问题,因此我的回答可能是主观的。

刚才提到你最后提到的一点,“潜在的”巨大的表是一个相对的陈述。你在为每个人保留什么?它是整个就业历史的日常活动日志还是名义上的员工数据?

对于关键数据,您可以使用特殊状态列标记数据(例如,您可以将某人标记为已退役,已解雇等,而不是删除记录)。您还可以将数据移动到存档表或甚至是具有存档日期等额外字段的单独存档数据库。有许多方法可以处理数据。

今天的技术允许我们构建可以有效容纳数据字节数据的数据库。

查看您的组织需求并使用THAT作为标准,而不是认为a)这是一个设计问题,或者b)它是一个编程问题。

答案 2 :(得分:0)

如果没有进一步的使用,你不能想到将记录留在数据库中的任何未来,那么继续进行硬删除以保持表的大小。在您的情况下情况并非如此,您应该决定是否需要保留日志或保存日志,即是否进行级联删除或仅删除用户,并将日志保留为数据库中的孤儿。 / p>

如上所述,添加一个布尔列表是一个好主意。另一种方法可以是使用第二个数据库,并将从原始数据库中删除的所有记录移动到辅助数据库。

至于标准练习,我认为没有,你需要找到一个适合你需要和实施的练习。