Представления и их обновление — различия между версиями
Cuciev (обсуждение | вклад) (Inital commit) |
Cuciev (обсуждение | вклад) (Все до множественных операций) |
||
Строка 1: | Строка 1: | ||
{{В разработке}} | {{В разработке}} | ||
+ | |||
+ | {{Определение | ||
+ | |definition='''Представление''' {{---}} механизм, представляющий из себя именованный запрос. В момент каждого обращения к представлению, исполняется соответствующий ему запрос. При этом, представления могут использоваться как таблицы, на пример, в <code>select ... from</code>. | ||
+ | }} | ||
+ | Наиболее распространенные случаи применения: | ||
+ | * Макросы {{---}} выделение общей части нескольких запросов; | ||
+ | * Независимость от данных {{---}} использование представлений вместо декомпозированной таблицы для сохранения механизма взаимодействия для чтения со стороны клиента; | ||
+ | * Сокрытие данных; | ||
+ | <br> | ||
+ | |||
+ | == Синтаксис == | ||
+ | <font color = blue>create view <font color = red>имя<font color = blue> as <font color = red>запрос<font color = green> -- объявление представления </font> | ||
+ | <font color = blue>drop view <font color = red>имя<font color = green> -- удаление представления по его имени</font> | ||
+ | |||
+ | ==== Примеры ==== | ||
+ | <font color = green> -- Представление для подсчета текущих средних баллов студентов: </font> | ||
+ | <font color = blue>create view <font color = black>AveragePoints(SId, AvgPoints) <font color = blue>as select <font color = black>SId, avg(Points) <font color = blue>from <font color = black>Points</font> | ||
+ | |||
+ | <font color = green> -- Представление для получения имени и фамилии студента </font> | ||
+ | <font color = green> -- с текущим количеством баллов, полученных им на каждом курсе: </font> | ||
+ | <font color = blue>create view <font color = black>StudentCourse(FN, LN, N, P) <font color = blue>as select <font color = black>s.FirstName, s.LastName, c.Name, p.Points</font> | ||
+ | <font color = blue>from <font color = black>Students s <font color = blue>natural join <font color = black>Points p <font color = blue>natural join <font color = black>Courses c<font color = black></font> | ||
+ | |||
+ | Данный пример, в частности, демонстрирует удобство использования представлений {{---}} без их использования указанное выше выражение с тремя <code>join</code> пришлось бы писать каждый раз. Также, если бы таблицы <tex>Students, Points</tex> и <tex>Courses</tex> являлись бы результатом декомпозиции таблицы <tex>StudentCourse</tex>, создание данного представления позволяет избежать необходимости изменять код взаимодействия с ней. | ||
+ | |||
+ | == Обновление представлений == | ||
+ | Рассмотрим пример: в результате декомпозиции имевшейся таблицы <tex>T</tex> получились таблицы <tex>T_1</tex> и <tex>T_2</tex>. Было создано представление <tex>T</tex>, объединяющее результаты запроса из двух таблиц в тот вид, в котором данные присутствовали в изначальной. | ||
+ | <br> | ||
+ | Так же существует необходимость использовать не только операции чтения, но и '''записи''', такие, чтобы: | ||
+ | * их результаты отражались <tex>T_1</tex> и <tex>T_2</tex>; | ||
+ | * '''вставка''' была '''взаимообратна удалению'''; | ||
+ | * делать запись как если бы '''представление было таблицей'''; | ||
+ | <br> | ||
+ | Будем рассматривать обновления, как предварительное удаление (без проверки целостности) и последующую вставку обновленных данных. | ||
+ | |||
+ | === Унарные операции === | ||
+ | ==== Фильтрация ==== | ||
+ | Вставка кортежа в результат <tex>R</tex> выполнения операции [[Реляционная_алгебра: унарные операции | фильтрации]] <tex>\sigma_{P}(R)</tex> возможна только при выполнении им условия <tex>P</tex> фильтра. В противном случае такая строка не окажется в результате, так как будет отфильтрована: она будет вставлена в базовую таблицу, но не появится в представлении. | ||
+ | Если кортеж удовлетворяет условию, данные можно как вставить, так и удалить. | ||
+ | |||
+ | ==== Проекция ==== | ||
+ | В [[Реляционная_алгебра: унарные операции | проекции]] при вставки кортежа имеется набор атрибутов, на который значение проецируется; его необходимо дополнить значениями атрибутов, которые при проекции были выборшены: для этого выбираются значения по умолчанию, с которыми кортеж вставляется. | ||
+ | При удалении данных из проекции, необходимо удалить все соответствующие кортежи из базового отношения: если удалить лишь один из нескольких, в проекции этот кортеж останется. | ||
+ | |||
+ | ==== Переименование ==== | ||
+ | Для выполнения вставки, происходит переименование атрибутов в исходном кортеже, после чего он вставляется. | ||
+ | При удалении соответствующий кортеж удаляется. | ||
+ | |||
+ | === Множественные операции === | ||
+ | ==== Объединение ==== | ||
+ | [[Реляционная_алгебра:_операции_над_множествами | объединение]] | ||
+ | ==== Пересечение ==== | ||
+ | [[Реляционная_алгебра:_операции_над_множествами | пересечение]] | ||
+ | ==== Разность ==== | ||
+ | [[Реляционная_алгебра:_операции_над_множествами | разность]] | ||
+ | === Соединения === | ||
+ | === Обновления и SQL === | ||
+ | == Материализованные представления == | ||
+ | === Объявление материализованных представлений === | ||
+ | text |
Версия 03:49, 19 декабря 2021
Определение: |
Представление — механизм, представляющий из себя именованный запрос. В момент каждого обращения к представлению, исполняется соответствующий ему запрос. При этом, представления могут использоваться как таблицы, на пример, в select ... from . |
Наиболее распространенные случаи применения:
- Макросы — выделение общей части нескольких запросов;
- Независимость от данных — использование представлений вместо декомпозированной таблицы для сохранения механизма взаимодействия для чтения со стороны клиента;
- Сокрытие данных;
Синтаксис
create view имя as запрос -- объявление представления drop view имя -- удаление представления по его имени
Примеры
-- Представление для подсчета текущих средних баллов студентов: create view AveragePoints(SId, AvgPoints) as select SId, avg(Points) from Points
-- Представление для получения имени и фамилии студента -- с текущим количеством баллов, полученных им на каждом курсе: create view StudentCourse(FN, LN, N, P) as select s.FirstName, s.LastName, c.Name, p.Points from Students s natural join Points p natural join Courses c
Данный пример, в частности, демонстрирует удобство использования представлений — без их использования указанное выше выражение с тремя join
пришлось бы писать каждый раз. Также, если бы таблицы и являлись бы результатом декомпозиции таблицы , создание данного представления позволяет избежать необходимости изменять код взаимодействия с ней.
Обновление представлений
Рассмотрим пример: в результате декомпозиции имевшейся таблицы
Так же существует необходимость использовать не только операции чтения, но и записи, такие, чтобы:
- их результаты отражались и ;
- вставка была взаимообратна удалению;
- делать запись как если бы представление было таблицей;
Будем рассматривать обновления, как предварительное удаление (без проверки целостности) и последующую вставку обновленных данных.
Унарные операции
Фильтрация
Вставка кортежа в результат фильтрации возможна только при выполнении им условия фильтра. В противном случае такая строка не окажется в результате, так как будет отфильтрована: она будет вставлена в базовую таблицу, но не появится в представлении. Если кортеж удовлетворяет условию, данные можно как вставить, так и удалить.
выполнения операцииПроекция
В проекции при вставки кортежа имеется набор атрибутов, на который значение проецируется; его необходимо дополнить значениями атрибутов, которые при проекции были выборшены: для этого выбираются значения по умолчанию, с которыми кортеж вставляется. При удалении данных из проекции, необходимо удалить все соответствующие кортежи из базового отношения: если удалить лишь один из нескольких, в проекции этот кортеж останется.
Переименование
Для выполнения вставки, происходит переименование атрибутов в исходном кортеже, после чего он вставляется. При удалении соответствующий кортеж удаляется.
Множественные операции
Объединение
Пересечение
Разность
Соединения
Обновления и SQL
Материализованные представления
Объявление материализованных представлений
text