经过90天后,该广告将不再有效(即到期),但我希望为了档案目的保留该广告。
问题:从数据库设计最佳实践和查询性能的角度来看,是将旧的广告 A)保存在与当前广告相同的表中,还是B)将已过期的广告移动到一个已过期的表中并从当前列表中删除该广告更好?
换句话说,
选项A):
table_classified_listing:
car_id
expired = true | false
...
选项B):
// only current listing in this table (expired = false)
table_classified_listing:
car_id
...
// only expired listing in this table (expired = true)
expired_table_classified_listing:
car_id
...
更新:
我对A选项的担忧在于,当我在MySQL数据库中运行EXPLAIN
时,它说它正在使用expired
作为主键进行索引。然而,对于我的查询搜索性能来说,更重要的是使用price
字段,因为我正在基于price > X
进行搜索。这就是为什么我考虑选择B选项。
A
,但我建议不要使用is_enabled
,除非该字段真的很重要,而是在数据库中记录time_entered
,然后在代码中计算过期间隔或使用视图。我可以看到一种使用情况出现,即人们希望查看30天以上的分类列表。 - Evan Carroll