我有一个汽车分类清单的数据库。
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。
发布于 2009-12-22 07:12:23
选项A)这样,您可以将所有数据放在一个地方,并且可以更容易地创建用于报告、列出用户历史条目等的查询。任何速度问题都应该通过该列上的数据库索引来缓解。选项B)是过早优化。
发布于 2009-12-22 07:11:33
一般性建议(你必须填补空白;- ):
重复的一个问题是它可能会增加工作量(编写查询、测试查询.)。但是所有的技术(特别是现代技术)都允许你减少或取消复制。
例如,使用ORM,您可以拥有一个映射到公共字段但没有表的抽象实体,以及两个映射到表的子类。没有重复列信息。而且ORM也可以创建您的数据库脚本,所以您甚至没有这些脚本(当然,您应该手工查看它们以获得生产数据库)。
问题中更新后的更新:
你可以创建你想要的索引,别担心。如果您要查找的性能用于查询X上的价格未过期的数据,则创建一个索引(过期,价格),然后您就可以了:-)
发布于 2009-12-22 07:09:50
不要使用B,它基本上是分离属性。
我的做法是基本上使用两个日期列代替。ValidFromDate和ValidToDate.
https://stackoverflow.com/questions/1944627
复制相似问题