我需要在MySQL中存储一系列数字或日期时间值,最好是在一列中。不幸的是,由于MySQL中没有真正的数组或设置数据类型,同样似乎没有范围数据类型,所以我在这里陷入了一些僵局,希望能够提出一些聪明的东西。
范围的常见用例例如是存储事件的开始和结束时间,或者给定产品的最低和最高价格。
在我的情况下,我只需要存储一本书的年份。在某些情况下,存在歧义,我记录的那一年可能是例如810-820。当然,一种方法是使用单独的year_min
和year_max
列,然后在没有差异的情况下将相同的数据存储在两列中。
然而,我所拥有的条目中只有一小部分实际上需要存储这样的范围,而且我非常喜欢只查询一个简单的BETWEEN 750 AND 850
- 并避免两者都有{{1点击两列,以及98%的情况下冗余的数据重复。
您推荐的方法是什么?任何最佳实践提示?我知道如何调整体面的两列查询。我希望还有另一种方法可以解决这个问题...(不,我不太可能切换到PostgreSQL 只是以获得他们range types的好处。)
答案 0 :(得分:1)
我建议使用两列解决方案,尽管它不那么性感或聪明。假设您使用一列实现此功能。然后您的数据库变为非关系型,因为给定的记录和列现在指向多个值(year_min
和year_max
)。因此,即使您的架构看起来很整洁,您也可能会以更困难的查询形式失去这种好处。