2015-11-25 4 views
-1

У меня странная ситуация в дизайне моей БД. Я имею в виду, что тип значения поля может быть нормальным целым числом или числом между диапазоном. Я объясняю себя примером:числовой диапазон тип данных postgresql

Возраст столбца может быть числом (18) или диапазоном между (18-30). Как я могу представить это с помощью postgresql?

Thx!

+1

Postgres имеет встроенный [целочисленный тип диапазона] (http://www.postgresql.org/docs/9.4/static/rangetypes.html) –

+0

Также встроенным в 'numrange' (для числовых диапазонов) или [вы можете создавать дополнительные типы диапазонов] (http://www.postgresql.org/docs/current/static/rangetypes.html#RANGETYPES-DEFINING). – pozs

ответ

1

Существует несколько разных способов сделать это.

  1. магазин VARCHAR
  2. Хранить два значения нижней границы и верхняя граница
  3. Если есть только выбрать набор диапазонов вы можете создать таблицу поиска для этого набора и сохранить внешний ключ к этой справочной таблице ,
+0

ah great !! Спасибо!! Я думал в первом варианте :) Но третий - это больше, что мне нужно! Супер –

1

Вы можете сделать большее количество, например 18 x 1000 + 0 = 18000 за 18 и 18 x 1000 + 30 = 18030 за (18, 30).

Когда вы его получите, вы получите first = round(number/1000) для первого номера и second = number - first для второго номера.

Вы также можете сохранить их как точку http://www.postgresql.org/docs/9.4/static/datatype-geometric.html#AEN6730.

3

Целое число range может представлять как одно целое значение, так и диапазон. Одно значение:

select int4range(18,18,'[]'); 
int4range 
----------- 
[18,19) 

")" в результате выше означает, исключающими.

Диапазон:

select int4range(18,30,'[]'); 
int4range 
----------- 
[18,31) 
Смежные вопросы