mysql - 体育/游戏结果应用程序中的硬删除与软删除

标签 mysql database database-design

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

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

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

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

最佳答案

硬删除

优点:

-最容易实现

-无系统开销(HDD 空间、执行时间、代码复杂性)

缺点:

-数据永远消失了

软删除

优点:

-数据不会永远消失

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

缺点:

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

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

已存档:

优点:

-数据不会永远消失

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

缺点:

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

这就是我 5 分钟内能想到的。我肯定还遗漏了其他几点

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

关于mysql - 体育/游戏结果应用程序中的硬删除与软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916404/

相关文章:

php - 在 SQL 查询中使用 div 值

php - Onload : If UserID in database exists, 将 javascript 变量设置为 true

mysql - 主键 RDBMS 中的多值属性

mysql - 在 MySQL Workbench 中创建数据库

sql - 单租户、多应用数据库设计?

mysql - 此更新/连接中的语法错误在哪里?

php - 如何从数据库创建 4 维数组

mysql - 获取Bugzilla中用户的所有产品

Mysql 一个单元格中有多个值

php - mysql - 计算两个变量的总条目数