Создание пользовательского типа PostgreSQL, который является набором других типов? - PullRequest
3 голосов
/ 28 июля 2011

Тип информации, которую я хочу хранить в этом типе, например: «330,30 евро / тонна» или «25,15 долл. США / кг».

Итак, в основном:

  • Цена указана в десятичном формате.
  • Валюта как FK для другой таблицы.
  • Единица веса в виде FK для другого стола.

Когда я делаю запросы, я бы хотел получить прямой доступ к участникам, например, "selling_price.price" или "selling_price.currency".

И я хотел бы также иметь возможность сортировать по этому полю ... Я понимаю, что это создает целый ряд проблем, поскольку нам необходимо конвертировать валюты и единицы веса.

Одним из решений было бы добавить четвертый элемент, который хранит ту же информацию в стандартизированном формате (например, доллары США / кг в виде числа с плавающей запятой), сортировать по нему, а затем обновлять его всякий раз, когда мы обновляем курсы валют.

Итак, в основном, этот пользовательский тип (назовем его PRICE_PER_UNIT) будет хранить:

  • Цена указана в десятичном формате.
  • Валюта как FK.
  • Единица веса как FK.
  • Значение в стандартизированном формате.

И сортировка по этому полю должна быть выполнена по стандартизированному полю, как число с плавающей запятой.

Поскольку я никогда раньше не делал ничего подобного в SQL, я понятия не имею, как вообще начать с этим ... Кто-нибудь?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Если вы не используете бета-версию 9.1, избегайте таких типов PostgreSQL, как чума. Их очень сложно обновлять, и только в 9.1 вы можете добавлять или удалять значения из перечислений или изменять атрибуты. Для других версий вы ограничены переименованием, сменой владельца и изменением схемы.

Возможно, вы захотите хранить «стандартизированную» цену для сортировки. Здесь я предполагаю, что вы говорите о хранении всего в (скажем) долларах США за килограмм. Каждый раз, когда меняются курсы валют, вам придется обновлять каждую строку в вашей таблице. Вместо этого вы можете сохранить коэффициент пересчета для валюты в долларах США и сохранить коэффициент пересчета для веса в кг, а затем отсортировать на основе рассчитанного значения (коэффициенты преобразования из таблиц типа валюты и веса присоединены к вашей таблице данных ).

1 голос
/ 28 июля 2011

PostgreSQL поддерживает CREATE TYPE для создания составных типов.Я думаю, что это лучшее место для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...