Изменения

Перейти к: навигация, поиск

Представления и их обновление

5124 байта добавлено, 20:56, 29 декабря 2021
м
Больше текста богу текста
{{В разработке}}
= Представления =
{{Определение
|id=def1|neat = 1|definition='''Представление''' {{---}} механизм, представляющий из себя именованный запрос. В момент каждого обращения к представлению, исполняется соответствующий ему SQL-запрос. При этом, представления могут использоваться как таблицы, на пример, в <code>select ... from</code>.
}}
<br>
Наиболее распространенные случаи применения:
* Макросы {{---}} выделение общей части нескольких запросов;
* Независимость от данных {{---}} использование представлений вместо декомпозированной таблицы для сохранения механизма взаимодействия для чтения со стороны клиента;
* Сокрытие данных;
<br>
== Синтаксис ==
Объявление представления с именем <code><font color = red>имя</font color = black></code> для представления запроса <code><font color = red>запрос</font color = black></code>: <font color = blue>create view <font color = red>имя<font color = blue> as <font color = red>запрос<font color = greenblack> -- объявление  Удаление представления по имени <code><font color = red>имя</fontcolor = black></code>: <font color = blue>drop view <font color = red>имя<font color = green> -- удаление представления по его имени</fontblack>
==== Примеры ====
<font color = green> -- Представление для подсчета текущих средних баллов студентовцен в магазинах: </font> <font color = blue>create view <font color = black>AveragePointsAveragePrice(SIdShopId, AvgPointsAvgPrice) <font color = blue>as select <font color = black>SIdShopId, avg(PointsPrice) <font color = blue>from <font color = black>PointsPrices</fontcolor = black>
<font color = green> -- Представление для получения имени и фамилии студента </font> <font color = green> -- названия магазина с текущим количеством балловтекущими ценами, полученных им на каждом курсеиз товаров: </font> <font color = blue>create view <font color = black>StudentCourseShopItem(FNSN, LN, NPN, P) <font color = blue>as select <font color = black>s.FirstName, s.LastNameName, ci.Name, p.PointsPrice</font> <font color = blue>from <font color = black>Students Shops s <font color = blue>natural join <font color = black>Points Prices p <font color = blue>natural join <font color = black>Courses cItems i<font color = black></font>
Данный пример, в частности, демонстрирует удобство использования представлений {{---}} без их использования указанное выше выражение с тремя <code>join</code> пришлось бы писать каждый раз. Также, если бы таблицы <tex>StudentsShops, PointsPrices</tex> и <tex>CoursesItems</tex> являлись бы результатом декомпозиции таблицы <tex>StudentCourseShopItem</tex>, создание данного представления позволяет избежать необходимости изменять код взаимодействия с ней.
== Обновление представлений ==
=== Унарные операции ===
==== Фильтрация ====
Вставка кортежа в результат <tex>R</tex> выполнения операции [[Реляционная_алгебраРеляционная алгебра: унарные операции | фильтрации]] <tex>\sigma_{P}(R)</tex> возможна только при выполнении им условия <tex>P</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:
* Унарные операции:
** обновляемые;
* Множественные операции:
** необновляемые, несмотря на теоретическую возможность для обновления и пересечения и, с определенными ограничениями, для разности;
* Соединения
** один-к-одному {{---}} обновляемые;
** один-ко-многим {{---}} обновляемые только со стороны «многие»;
** многие-ко-многим {{---}} необновляемые (там, где поддерживаются);
 
== Материализованные представления ==
{{Определение|id=def2|definition='''Материализованное представление''' {{---}} в отличие от [[#def1 | представления]], является «слепком» данных на определенный момент времени, который хранящимся физически в виде отдельной таблицы и не изменяется при изменении базовой версии.}}Преимущества:* быстрота выборки: материализованное представление может быть сформировано на основе сложного подзапроса, и, из-за того, что данные будут сохранены, этот запрос не будет пересчитываться повторно;* возможность «фиксации» данных; Недостатки:* для работы с актуальными данными, появляется необходимость обновления материализованное представление;* физически хранимые данные могут занимать большие объемы памяти; === Синтаксис === <font color=blue>create materialized view <font color=red>имя</font> <font color=red>[</font> <font color=blue> refresh <font color=red>[{<font color=blue>fast<font color=grey>|<font color=blue>complete<font color=red>}] [<font color=blue>on <font color=red>{<font color=blue>commit<font color=grey>|<font color=blue>demand<font color=red>}]</font> <font color=red> [<font color=blue>start with <font color=red>время] [<font color=blue>next <font color=red>время]</font> <font color=red>]</font> <font color=blue>as <font color=red>запрос<font color = black> Некоторые БД поддерживают указание времени первого и последующих обновлений: <font color=red>[<font color=blue>start with <font color=red>время] [<font color=blue>next <font color=red>время]<font color=black> Режимы обновления:* <code>fast</code>: инкрементальные обновления в зависимости того, какие фрагменты данных были изменены в базовых таблицах этого отношения. Не рекомендуется использовать в условиях частого обновления исходной таблицы, для некоторых запросов данный режим может не поддерживаться;* <code>complete</code>: полный пересчет; Частота обновлений:* <code>commit</code>: при завершении любой операции;* <code>demand</code>: при вызове команды <code>refresh materialized view</code>;  <font color=blue>refresh materialized view <font color=red>имя<font color = black> ==== Пример ====Материализованное представление для подсчета текущих средних цен в магазинах, обновляемое раз в день: <font color=blue>create materialized view <font color=black>AveragePrice</font> <font color=blue>refresh next <font color=black>dateadd(day, now(), 1)</font> <font color=blue>as select <font color=black>ShopId, avg(Price) <font color=blue>from <font color=black>Prices <font color=blue>group by <font color=black>ShopId<font color=black> == См. также ==* [[Реляционная алгебра: унарные операции]]* [[Реляционная алгебра: операции над множествами]]* [[Реляционная алгебра: соединения, деление]]* [[Преобразование модели сущность-связь в физическую модель]]* [[Базы данных]] = Объявление материализованных представлений =Литература ==text# https://www.kgeorgiy.info/courses/dbms/# Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом "Вильяме", 2005. — 1328 с.# Gulutzan P., Pelzer T.(1999) SQL-99 complete, really. Gilroy,CA:CMP Books [[Категория: Базы данных]]
436
правок

Навигация