Database design 从数据库中删除记录

Database design 从数据库中删除记录,database-design,Database Design,我想知道从数据库中删除记录的标准做法 例如,一个用户删除了一条记录,但我们仍然希望保留一个记录,记录删除的记录以及从哪个用户删除的记录,以便在出现错误时检索该记录,或者知道是谁进行了更改 在这一点上,如果该用户离开公司,将其完全删除听起来不是一个好主意,因为仍有信息(如日志)链接到此用户。但是,如果我们把他留在里面,只是不显示他,管理员可能不知道为什么特定的用户名不可用 此外,如果简单地隐藏已删除的记录是标准做法,那么这是否会导致潜在的巨大表中包含很少访问的数据 提前感谢您的帮助。在许多项目中,

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

例如,一个用户删除了一条记录,但我们仍然希望保留一个记录,记录删除的记录以及从哪个用户删除的记录,以便在出现错误时检索该记录,或者知道是谁进行了更改

在这一点上,如果该用户离开公司,将其完全删除听起来不是一个好主意,因为仍有信息(如日志)链接到此用户。但是,如果我们把他留在里面,只是不显示他,管理员可能不知道为什么特定的用户名不可用

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


提前感谢您的帮助。

在许多项目中,我不会删除记录,但会将它们标记为已删除设置为true,这是我为每个表创建的字段。
比如我用

UPDATE my_table SET deleted = true
WHERE id = ...
请记住,在查询有效记录时,必须指定

SELECT * FROM your_table
WHERE deleted = false

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

首先要提到的最后一点,“潜在的”巨大表是一个相对的陈述。你为每个人保留了什么?是他们整个雇佣历史的日常活动日志还是名义上的员工数据

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

今天的技术使我们能够构建能够有效存储PB级数据的数据库


看看您的组织需求,并将其作为标准,而不是认为a)这是一个设计问题,或b)这是一个编程问题

如果没有进一步的用途,并且您想不出在数据库中保留记录的未来,那么继续执行硬删除操作以保持表的大小。在您的情况下,情况并非如此,您应该决定是否需要保留日志或保存日志,即是执行级联删除还是仅删除用户,并将日志作为孤立日志保留在数据库中

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


至于标准做法,我认为没有,您需要找到一种适合您的需要和实施的做法。

有些数据不应删除,而应标记为“非活动”。我通常避免删除帐户,而是停用它们。还可以在数据库中使用约束,以避免deleted=true时数据+1不一致。这似乎是一个很好的方法。但是如果有数百万张唱片,而且总是有新的、新的、新的唱片出现呢?你们不认为它会使数据库过载吗?嗯,也许吧。在已删除字段上放置索引对您仍然有帮助。考虑一下:如果你需要记录,没有很多快速的选择;阿瓦伊斯卡尼:看看我之前的评论;我忘了通知你,sorry@Marco这听起来是最可行的主意。出现的问题是,一些东西,如用户名,将无法被重用(如果它们是链接的,它们应该被重用吗?)。我想这是我需要做的权衡。@TheoScholiadis:是的,我想这就是我们必须付出的代价来拥有这个功能……艾哈迈德,你说得对。商业决策已经做出,我正在寻找如何实施它。用户示例是我遇到的最简单的示例。其他示例包括从任何表中删除记录并保留某人删除的记录。第二个数据库是一个好主意,但可能不切实际,因为某些数据仍需要显示在当前/实时数据库中。例如,您删除了一个用户,但他所做的任何更新都必须保持活动状态。但这是值得思考的。。。