【问题标题】:Hard vs Soft Deletes on an sports/gaming results application体育/游戏结果应用程序上的硬删除与软删除
【发布时间】:2016-12-02 01:28:26
【问题描述】:

我正在开发一个系统,该系统基本上将记录当地体育俱乐部的结果,数据将包括结果、球队、比赛、球员等类型的东西。

我只是想知道什么是数据库设计的最佳解决方案以及我如何处理数据库中“删除”条目的普遍共识,我的选择如下:

  1. 硬删除 - 例如删除 db 条目(以及任何相关的级联行)
  2. 软删除 - 使用 'deleted_timestamp' 标志 - 如果它具有时间戳值,则认为它已删除,并且没有人可以看到此条目(除了我自己通过 cPanel 直接访问数据库以允许轻松恢复一行)
  3. 存档表 - 使用 硬删除 从主表中删除条目后,我会将此条目推送到具有原始表中关联的 primary_key 的存档表中。

人们认为优点和缺点是什么?根据我的情况,首选的解决方案是什么?

【问题讨论】:

  • 取决于您的用例。您是否需要恢复记录或对已删除项目进行审计跟踪?
  • 选项 3 很少是一个好主意;选项 2 更为典型,并且不排除对已“删除”一段时间的记录使用选项 1(为您提供各种“回收站”)。
  • @ceejayoz 我想我需要一些线索。例如,假设蓝队有 100 个结果,然后有一天决定解散。我想删除该团队,但我仍然想要他们的所有结果,因为它们将与其他团队相关,因此需要保留该信息。 (这有意义吗?)我正在考虑软删除 atm
  • @Zabs 我不确定团队的解散是否应该保证软删除,特别是如果仍有数据将他们与活跃的团队联系起来。最好使用 disbanded_when 字段,并且当团队与“活动数据”没有任何关联时,会间歇性地运行一个进程来标记团队进行软删除。
  • 是否应该在 StackExchange 的其他地方添加类似这样的“基于意见”的问题?

标签: mysql database database-design


【解决方案1】:

硬删除

优点:

-最容易实现

-没有系统开销(硬盘空间、执行时间、代码复杂度)

缺点:

-数据永远消失了

软删除

优点:

-数据不会永远消失

-数据可以像没有被删除一样轻松管理(也许让管理员看到旧条目并恢复删除,或类似的东西。数据仍然在原来的同一个表中)

缺点:

-维护代码成本高吗?在每个查询中,您应该记住在哪里过滤已删除的数据以及在哪里不过滤

-表可能会大幅增长,从而大幅降低查询性能

已归档:

优点:

-数据不会永远消失

-包含未删除数据的表将保持小而干净,就像在硬删除解决方案中一样

缺点:

-很难将存档数据作为当前数据进行管理(例如,查询显示按某个值排序的已删除和未删除条目,与软删除相比,需要执行额外的代码)

这就是我可以在 5 分钟内想到的。我肯定还缺少其他要点

编辑:我认为软删除最适合您的需要,因为不涉及繁重的计算

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2021-07-22
    • 1970-01-01
    • 2013-10-08
    • 2018-03-30
    • 2017-03-24
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多