18
Практика
1. Реализуйте в приложении возможность установки розничной
цены книг с указанной пользователем даты (сейчас дата
просто игнорируется).
Предыдущая история изменений цен должна сохраняться.
Для этого добавьте в таблицу retail_prices информацию
о периоде действия цены и внесите необходимые изменения
в функции get_retail_price и set_retail_price.
2. Создайте составной тип для формата издания, состоящего из
размеров типографского листа и доли листа. Также создайте
приведение для этого нового типа к текстовому.
Замените тип данных столбца format таблицы books
и убедитесь, что интерфейс с приложением не изменился.
1. Интервал действия розничной цены можно представить по-разному:
●
двумя столбцами типа timestamptz («дата с» и «дата по»);
●
одним столбцом типа timestamptz («дата с»), при этом цена считается
действующей до следующей даты в другой строке таблицы;
●
одним столбцом диапазонного типа tstzrange.
Реализуйте последний вариант. Обратите внимание:
●
В функции set_retail_price придется изменять две строки таблицы,
и это должно корректно работать в случае, если несколько
пользователей устанавливают цену одновременно.
●
Функция get_retail_price должна получать цену на текущий момент.
Используйте функцию current_timestamp (возвращающую время
начала транзакции), а не clock_timestamp. Это будет важно при
последующих изменениях.
2. Формат издания записывается в виде WxH/N, где W и H — ширина
и высота типографского листа, с которым работает печатная машина,
и который разрезается потом на N одинаковых частей (страниц книги).
Поэтому N как правило представляет собой степень двойки.
Несмотря на то, что отношение длины страницы к ширине может быть
разным, форматы книг можно упорядочить, сравнивая площади
страниц, которые равны W*H/N.
При замене типа столбца обратите внимание на блокировку, которая
при этом удерживается.