Представления и их обновление — различия между версиями
Cuciev (обсуждение | вклад) м (Cosmetics) |
Cuciev (обсуждение | вклад) (Множественные операции, обновления) |
||
Строка 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
пришлось бы писать каждый раз. Также, если бы таблицы и являлись бы результатом декомпозиции таблицы , создание данного представления позволяет избежать необходимости изменять код взаимодействия с ней.
Обновление представлений
Рассмотрим пример: в результате декомпозиции имевшейся таблицы
Так же существует необходимость использовать не только операции чтения, но и записи, такие, чтобы:
- их результаты отражались и ;
- вставка была взаимообратна удалению;
- делать запись как если бы представление было таблицей;
Будем рассматривать обновления, как предварительное удаление (без проверки целостности) и последующую вставку обновленных данных.
Унарные операции
Фильтрация
Вставка кортежа в результат фильтрации возможна только при выполнении им условия фильтра. В противном случае такая строка не окажется в результате, так как будет отфильтрована: она будет вставлена в базовую таблицу, но не появится в представлении.
выполнения операцииЕсли кортеж удовлетворяет условию, данные можно как вставить, так и удалить.
Проекция
В проекции при вставки кортежа имеется набор атрибутов, на который значение проецируется; его необходимо дополнить значениями атрибутов, которые при проекции были выборшены: для этого выбираются значения по умолчанию, с которыми кортеж вставляется.
При удалении данных из проекции, необходимо удалить все соответствующие кортежи из базового отношения: если удалить лишь один из нескольких, в проекции этот кортеж останется.
Переименование
Для выполнения вставки, происходит переименование атрибутов в исходном кортеже, после чего он вставляется.
При удалении соответствующий кортеж удаляется.
Множественные операции
Пересечение
Для пересечения вставка кортежа выполняется как в , так и в . Так как предикатом пересечения является конъюнкция предикатов двух отношений, их проверка для кортежа не производится - в противном случае, кортеж не появится в ответе.
Аналогично, для удаления, кортеж должен быть удален из обоих отношений.
Объединение
Отсюда — алгоритм вставки для объединения : для каждого из отношений проверить соответствие кортежа предикатам каждой из сторон; в случае удовлетворения, вставить в соответствующее отношение. Если кортеж удовлетворяет обоим предикатам, он должен появиться и слева, и справа
При удалении кортеж удаляется как из
, так и из .Разность
Для разности вставка производится в .
Соединения
При вставке кортежа в естественное соединение часть его атрибутов, соответствующих , при удовлетворении предикату, вставляются в него, аналогично для .
Таким же образом, при удалении, из каждой из частей удаляются соответствующие атрибуты кортежа.
Алгоритмы вставки и удаления базируются на ограничениях целостности:
- один-к-одному: вставка и удаление производятся как для левой, так и для правой части;
- один-ко-многим: кортеж вставляется в часть "многие", а в части "один" соответствующие данные уже могут присутствовать;
- многие-ко-многим: с точки зрения реальных баз данных, данное отношение преобразуетсяв join-table, имеющую отношение "один-ко-многим" с обеих из своих сторон;
Обновления и SQL
Материализованные представления
Объявление материализованных представлений
text