Найти тему
programmer's notes (python and more)

Реляционные базы данных. Приложение к урокам о команде select (часть 2). PostgreSQL. Представления (views)

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Представления в PostgreSQL

Обычные представления

Представление (view) это ещё один объект базы данных PostgreSQL, наряду с таблицами. Представление состоит из запроса к одной или нескольким таблицам. Созданное, таким образом, представление далее будет хранится к базе данных. И к нему можно обращаться как к обычной таблице с помощью команды select.

Пример создания представления

create view myv1 as
select id, fio, id_f from student order by fio;

в результате создаётся объект, который можно увидеть в консоли в разделе Представления (views).

Обратиться к нему можно обычным способом, как будто это таблица:

select * from myv1;

И получим список студентов на основе таблицы student.

Но интересно то, что к представлению можно применять команды редактирования

insert into myv1 (fio, id_f) values ('Кроликов', 1)

в результате в таблицу student будет добавлена строка.

Точно также можно выполнять другие команды редактирования, например

delete from myv1 where id=20;

Соответственно будет удалена строка, удовлетворяющая указанному условию.

Но представление может иметь и более сложную структуру

create view my1 as
select s.id, s.fio, s.id_f, o.ocenka
from student s left join ocenki o on s.id=o.id_s;

Представление, таким образом, связано сразу с двумя таблицами. И соответственно

select * from my1

даст список студентов со всеми их оценками.

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

Замечание
Можно ли в представлении обращаться не только к таблицам, но и к другим представлениям? Да, конечно. Нет никаких ограничений.

Материализованные представления

В PostgreSQL реализованы так называемые материализованные представления. Их отличие от обычных представлений заключается в следующем:

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

Создать материализованное представление можно так

create materialized view my1 as
select s.id, s.fio, s.id_f, o.ocenka
from student s left join ocenki o on s.id=o.id_s;

Для обновление хранящихся результатов материализованного представления используется команда

refresh materialized view my1

Пока всё

См. также

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Представления это только витрина, а что за ней - мы не знаем
Представления это только витрина, а что за ней - мы не знаем