Изменения

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

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

3197 байт добавлено, 04:37, 20 декабря 2021
Материализованные представления
{{В разработке}}
= Представления =
{{Определение
|id=def1|neat = 1|definition='''Представление''' {{---}} механизм, представляющий из себя именованный запрос. В момент каждого обращения к представлению, исполняется соответствующий ему SQL-запрос. При этом, представления могут использоваться как таблицы, на пример, в <code>select ... from</code>.
}}
Наиболее распространенные случаи применения:
==== Проекция ====
В [[Реляционная_алгебра: унарные операции | проекции]] при вставки кортежа имеется набор атрибутов, на который значение проецируется; его необходимо дополнить значениями атрибутов, которые при проекции были выборшеныотброшены: для этого выбираются значения по умолчанию, с которыми кортеж вставляется.
При удалении данных из проекции, необходимо удалить все соответствующие кортежи из базового отношения: если удалить лишь один из нескольких, в проекции этот кортеж останется.
* один-к-одному: вставка и удаление производятся как для левой, так и для правой части;
* один-ко-многим: кортеж вставляется в часть «многие», а в части «один» соответствующие данные уже могут присутствовать;
* многие-ко-многим: с точки зрения реальных баз данных, данное отношение [[Преобразование_модели_сущность-связь_в_физическую_модель#.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 ===
== Материализованные представления ==
{{Определение|id=def2|definition='''Материализованное представление''' (МП) {{---}} в отличие от [[#def1 | представления]], является «слепком» данных на определенный момент времени, который хранящимся физически в виде отдельной таблицы и не изменяется при изменении базовой версии.}}Преимущества:* быстрота выборки: МП может быть сформировано на основе сложного подзапроса, и, из-за того, что данные будут сохранены, этот запрос не будет пересчитываться повторно;* возможность «фиксации» данных; Недостатки:* для работы с актуальными данными, появляется необходимость обновления МП;* физически хранимые данные могут занимать большие объемы памяти; === Синтаксис == Объявление материализованных представлений = <font color=blue>create materialized view <font color=red>имя</font>text <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 color=green> -- в некоторых БД</font> <font color=red>]</font> <font color=blue>as <font color=red>запрос<font color = black></font> Режимы обновления:* <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> ==== Пример ==== <font color = green> -- МП для подсчета текущих средних баллов студентов, обновляемое раз в день:</font> <font color=blue>create materialized view <font color=black>AveragePoints</font> <font color=blue>refresh next <font color=black>dateadd(day, now(), 1)</font> <font color=blue>as select <font color=black>SId, avg(Points) <font color=blue>from <font color=black>Points <font color=blue>group by <font color=black>SId</font>
436
правок

Навигация