DROP VIEW IF EXISTS flights_v; Как мы уже говорили ранее, представление является фактически сохраненным за-
просом к базе данных. Этот запрос получает имя, которым можно впоследствии вос-
пользоваться в предложении FROM команды SELECT для получения результатов это-
го запроса.
PostgreSQL предлагает свое расширение — так называемое материализованное пред-
ставление. Упрощенный синтаксис команды CREATE MATERIALIZED VIEW, предна-
значенной для создания материализованных представлений, таков:
CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name [ (column_name [, ...] ) ] AS query [ WITH [ NO ] DATA ]; Материализованное представление заполняется данными в момент выполнения ко-
манды для его создания, если только в команде не было фразы WITH NO DATA. Если
же она была включена в команду, тогда в момент своего создания представление дан-
ными не заполняется, а для заполнения его данными нужно использовать команду
REFRESH MATERIALIZED VIEW.
Материализованное представление очень похоже на обычную таблицу. Однако оно
отличается от таблицы тем, что не только сохраняет данные, но также запоминает
запрос, с помощью которого эти данные были собраны.
В нашей учебной базе данных «Авиаперевозки» имеется материализованное пред-
ставление — «Маршруты» (routes). Как вы могли заметить, таблица «Рейсы» (flights)
содержит избыточность: для одного и того же номера рейса, отправляющегося в раз-
личные дни, повторяются коды аэропортов отправления и назначения, а также код
самолета. Таким образом, из этой таблицы можно извлечь информацию о маршруте,
т. е. номер рейса, аэропорты отправления и назначения. Эта информация не зависит
от конкретной даты вылета.
Опишем все столбцы представления, а SQL-команду для его создания приведем в гла-
ве 6.
Описание атрибута Имя атрибута Тип PostgreSQL Номер рейса
flight_no
char(6)
Код аэропорта отправления
departure_airport
char(3)
Название аэропорта отправления
departure_airport_name
text
Город отправления
departure_city
text
Код аэропорта прибытия
arrival_airport
char(3)
Название аэропорта прибытия
arrival_airport_name
text
Город прибытия
arrival_city
text
Код самолета, IATA
aircraft_code
char(3)
Продолжительность полета
duration
interval
Дни недели, когда выполняются рейсы
days_of_week
integer[]
97
Обратите внимание на тип данных последнего столбца — «Дни недели, когда выпол-
няются рейсы». Это массив целых чисел.
Если впоследствии вам потребуется обновить данные в материализованном пред-
ставлении, то выполните команду