mysql - 使数据库中的记录过期的最佳方法/选项是什么?

标签 mysql database-design

这些天我似乎在处理很多数据库,我不能因为各种原因只删除一条记录,包括稍后它们可以稍后显示(比如不再存在的产品)或者只是保留过去的历史。

所以我的问题是如何最好地使记录过期。

我经常添加一个 date_expired 列,它是日期时间字段。通常,我会查询 where date_expired = 0date_expired = 0 OR date_expired > NOW() ,具体取决于数据将来是否会过期。与此类似,我也添加了一个字段调用expired_flag。当设置为 true/1 时,记录被认为已过期。这可能是最简单的方法,但您需要记住在任何时候只需要当前项目时包含过期子句。

我看到的另一种方法是将记录移动到存档表中,但是当有大量表需要历史表时,这会变得非常困惑。它还使值(比如国家)的检索变得更加困难,因为您必须首先进行左连接(例如),然后进行第二次查询以查找实际值(或使用修改后的左连接重做查询)。

另一个选项,我没有见过,也没有完全尝试过,是有一个表,其中包含所有过期记录的所有数据或它的某种形式——某种历史表。在这种情况下,检索将更加困难,因为您可能需要搜索一个巨大的表,然后解析数据。

是否有其他更好的解决方案或修改?

我正在使用 MySQL(带有 PHP),所以我不知道其他数据库是否有更好的方法来处理这个问题。

最佳答案

我更喜欢日期过期字段方法。但是,有时有两个日期(初始日期和过期日期)很有用。因为如果数据会过期,了解它何时处于事件状态通常很有用,这也意味着知道它何时开始存在。

关于mysql - 使数据库中的记录过期的最佳方法/选项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656827/

相关文章:

c# - 方法 'Open' 没有重载需要 1 个或多个参数

mysql - MySQL 中函数的返回值

sql - 酒店预订系统 : optimal SQL db structure for querying

mysql:选择所有被通知的人

sql - 搜索跨越大量表格的数据 - 设计问题

mysql - 如何布局我的数据库?

mysql - 计算一些数据数组不起作用

mysql - 如何通过与另一列的值进行比较来更新一列的多个值?

mysql - 按多列值查询分组

mysql - 是否可以设计一个通用的多对多联结表?