Представления и их обновление — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Inital commit)
 
(Все до множественных операций)
Строка 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 пришлось бы писать каждый раз. Также, если бы таблицы [math]Students, Points[/math] и [math]Courses[/math] являлись бы результатом декомпозиции таблицы [math]StudentCourse[/math], создание данного представления позволяет избежать необходимости изменять код взаимодействия с ней.

Обновление представлений

Рассмотрим пример: в результате декомпозиции имевшейся таблицы [math]T[/math] получились таблицы [math]T_1[/math] и [math]T_2[/math]. Было создано представление [math]T[/math], объединяющее результаты запроса из двух таблиц в тот вид, в котором данные присутствовали в изначальной.
Так же существует необходимость использовать не только операции чтения, но и записи, такие, чтобы:

  • их результаты отражались [math]T_1[/math] и [math]T_2[/math];
  • вставка была взаимообратна удалению;
  • делать запись как если бы представление было таблицей;


Будем рассматривать обновления, как предварительное удаление (без проверки целостности) и последующую вставку обновленных данных.

Унарные операции

Фильтрация

Вставка кортежа в результат [math]R[/math] выполнения операции фильтрации [math]\sigma_{P}(R)[/math] возможна только при выполнении им условия [math]P[/math] фильтра. В противном случае такая строка не окажется в результате, так как будет отфильтрована: она будет вставлена в базовую таблицу, но не появится в представлении. Если кортеж удовлетворяет условию, данные можно как вставить, так и удалить.

Проекция

В проекции при вставки кортежа имеется набор атрибутов, на который значение проецируется; его необходимо дополнить значениями атрибутов, которые при проекции были выборшены: для этого выбираются значения по умолчанию, с которыми кортеж вставляется. При удалении данных из проекции, необходимо удалить все соответствующие кортежи из базового отношения: если удалить лишь один из нескольких, в проекции этот кортеж останется.

Переименование

Для выполнения вставки, происходит переименование атрибутов в исходном кортеже, после чего он вставляется. При удалении соответствующий кортеж удаляется.

Множественные операции

Объединение

объединение

Пересечение

пересечение

Разность

разность

Соединения

Обновления и SQL

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

Объявление материализованных представлений

text