我必须保存几年的时间间隔,例如:
id intervalYears
1 2014/2015
2 2015/2016
3 2016/2017
等等。这些年就像学年,所以第一年必须小于第二年,但大于或等于实际年份。
那么,如何保存这个数据类型呢?我应该分开日期并添加一些约束吗?
我必须保存几年的时间间隔,例如:
id intervalYears
1 2014/2015
2 2015/2016
3 2016/2017
等等。这些年就像学年,所以第一年必须小于第二年,但大于或等于实际年份。
那么,如何保存这个数据类型呢?我应该分开日期并添加一些约束吗?
如果可能,只存储第一个值
看起来您根本不需要存储两个数字。
如果这些类似于纳税年度,即“2014/2015 财政年度”,您只需始终如一地存储一部分。
如果您存储
2014
,您的应用程序就会知道这是从 2014 年开始的学年。所以它可以毫无歧义地显示“2014/2015学年”。如果你真的需要一个范围
如果您确实需要范围并且您的样本数据没有表达这一点,例如您可能需要存储
2012/2015
,那么两int2
列将是一个不错的选择。正如@Neil 已经展示的那样,您将使用CHECK
约束将范围限制为一个学年的合理值,并强制要求下限小于上限。或者,您可以使用新的 ish 和特定于 PostgreSQL 的
int4range
类型:根据范围类型的文档。这为您提供了更多的运算符,但代价是在处理基本查询和客户端应用程序时变得更加繁琐。
您甚至可以
DOMAIN
对其进行改造以限制其范围。例如
(在范围类型之前,我会建议在复合类型上使用域,但
int4range
在各个方面都比复合类型好)。很可能所有这些都是不必要的 - 如果您不需要可变长度范围,即它总是 someyear/thenextyear,您应该只存储第一年。
您可以使用两
smallint
列: