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

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Cosmetics)
(Множественные операции, обновления)
Строка 52: Строка 52:
  
 
=== Множественные операции ===
 
=== Множественные операции ===
 +
==== Пересечение ====
 +
Для [[Реляционная алгебра: операции над множествами | пересечения]] <tex>R_1 \cap R_2</tex> вставка кортежа выполняется как в <tex>R_1</tex>, так и в <tex>R_2</tex>. Так как [[Реляционная алгебра: унарные операции | предикатом]] пересечения является конъюнкция предикатов двух отношений, их проверка для кортежа не производится - в противном случае, кортеж не появится в ответе.
 +
 +
Аналогично, для удаления, кортеж должен быть удален из обоих отношений.
 +
 
==== Объединение ====
 
==== Объединение ====
[[Реляционная_алгебра:_операции_над_множествами | объединение]]
+
Отсюда {{---}} алгоритм вставки для [[Реляционная алгебра: операции над множествами | объединения]] <tex>R_1 \cup R_2</tex>: для каждого из отношений проверить соответствие кортежа предикатам каждой из сторон; в случае удовлетворения, вставить в соответствующее отношение. Если кортеж удовлетворяет обоим предикатам, он должен появиться и слева, и справа
==== Пересечение ====
+
 
[[Реляционная_алгебра:_операции_над_множествами | пересечение]]
+
При удалении кортеж удаляется как из <tex>R_1</tex>, так и из <tex>R_2</tex>.
 +
 
 
==== Разность ====
 
==== Разность ====
[[Реляционная_алгебра:_операции_над_множествами | разность]]
+
Для [[Реляционная алгебра: операции_над множествами | разности]] <tex>R_1 \setminus R_2</tex> вставка производится в <tex>R_1<tex>.
 +
 
 +
Удаление также производится из <tex>R_1</tex>.
 +
 
 
=== Соединения ===
 
=== Соединения ===
 +
При вставке кортежа в [[Реляционная_алгебра:_соединения,_деление#.D0.95.D1.81.D1.82.D0.B5.D1.81.D1.82.D0.B2.D0.B5.D0.BD.D0.BD.D0.BE.D0.B5_.D1.81.D0.BE.D0.B5.D0.B4.D0.B8.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 | естественное соединение]] <tex>R_1 \Join R_2</tex> часть его атрибутов, соответствующих <tex>R_1</tex>, при удовлетворении предикату, вставляются в него, аналогично для <tex>R_2</tex>.
 +
 +
Таким же образом, при удалении, из каждой из частей удаляются соответствующие атрибуты кортежа.
 +
 +
Алгоритмы вставки и удаления базируются на ограничениях целостности:
 +
* один-к-одному: вставка и удаление производятся как для левой, так и для правой части;
 +
* один-ко-многим: кортеж вставляется в часть "многие", а в части "один" соответствующие данные уже могут присутствовать;
 +
* многие-ко-многим: с точки зрения реальных баз данных, данное отношение [[Преобразование_модели_сущность-связь_в_физическую_модель#.D0.A1.D0.B2.D1.8F.D0.B7.D0.B8_.D0.BC.D0.BD.D0.BE.D0.B3.D0.B8.D0.B5-.D0.BA.D0.BE-.D0.BC.D0.BD.D0.BE.D0.B3.D0.B8.D0.BC_2 | преобразуется]]в join-table, имеющую отношение "один-ко-многим" с обеих из своих сторон;
 +
 
=== Обновления и SQL ===
 
=== Обновления и SQL ===
 
== Материализованные представления ==
 
== Материализованные представления ==
 
=== Объявление материализованных представлений ===
 
=== Объявление материализованных представлений ===
 
text
 
text

Версия 00:38, 20 декабря 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] фильтра. В противном случае такая строка не окажется в результате, так как будет отфильтрована: она будет вставлена в базовую таблицу, но не появится в представлении.

Если кортеж удовлетворяет условию, данные можно как вставить, так и удалить.

Проекция

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

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

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

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

При удалении соответствующий кортеж удаляется.

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

Пересечение

Для пересечения [math]R_1 \cap R_2[/math] вставка кортежа выполняется как в [math]R_1[/math], так и в [math]R_2[/math]. Так как предикатом пересечения является конъюнкция предикатов двух отношений, их проверка для кортежа не производится - в противном случае, кортеж не появится в ответе.

Аналогично, для удаления, кортеж должен быть удален из обоих отношений.

Объединение

Отсюда — алгоритм вставки для объединения [math]R_1 \cup R_2[/math]: для каждого из отношений проверить соответствие кортежа предикатам каждой из сторон; в случае удовлетворения, вставить в соответствующее отношение. Если кортеж удовлетворяет обоим предикатам, он должен появиться и слева, и справа

При удалении кортеж удаляется как из [math]R_1[/math], так и из [math]R_2[/math].

Разность

Для разности [math]R_1 \setminus R_2[/math] вставка производится в [math]R_1\lt tex\gt . Удаление также производится из \lt tex\gt R_1[/math].

Соединения

При вставке кортежа в естественное соединение [math]R_1 \Join R_2[/math] часть его атрибутов, соответствующих [math]R_1[/math], при удовлетворении предикату, вставляются в него, аналогично для [math]R_2[/math].

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

Алгоритмы вставки и удаления базируются на ограничениях целостности:

  • один-к-одному: вставка и удаление производятся как для левой, так и для правой части;
  • один-ко-многим: кортеж вставляется в часть "многие", а в части "один" соответствующие данные уже могут присутствовать;
  • многие-ко-многим: с точки зрения реальных баз данных, данное отношение преобразуетсяв join-table, имеющую отношение "один-ко-многим" с обеих из своих сторон;

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

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

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

text