Модифікація змісту подань

В разі виконання певних досить жорстких умов припустимо звертатись до подання з командами вставки (INSERT), видалення (DELETE), та оновлення (UPDATE) кортежів. Для деяких порівняно простих подань (подань, що оновлюються – updatable) система в змозі перетворити команду модифікації такого подання в еквівалентну інструкцію зміни змісту базової таблиці. Стандарт SQL містить формальне визначення умов, які сприяють можливості модифікації подань. У грубому наближенні ці правила можна викласти так:

Подання припускає модифікацію, якщо воно визначене на основі запиту, який передбачає вибір (SELECT – не SELECT DISTINCT) значень певних атрибутів одного відношення R, яке в свою чергу також може бути поданням, що відповідає цим вимогам).

CREATE VIEW S AS

SELECT DISTINCT L FROM R, S WHERE C;

Додаткові технічні нюанси:

  • Речення WHERE C не повинно містити відношення R у складі жодного підзапиту.
  • Список речення SELECT L має охоплювати достатньо атрибутів, аби при спробі вставки кортежу в подання система змогла присвоїти іншим атрибутам значення по замовчанню, передбачені в базовій таблиці. Тобто обов’язкові поля таблиці, у яких нема значень по замовчанню, мають бути в поданні.

Приклад 5.29. Повернімося до прикладу 5.9.

Спробуємо вставити новий кортеж у візію.

Подання ParamountMovie задовольняє формальним вимогам стандарту SQL для модифікації, оскільки побудована на виборі з одної таблиці

Але є проблема:

Атрибут таблиці studioName не входить у набір атрибутів подання. Тому при додаванні кортежу компоненту studioName таблиці Movie буде присвоєне значення NULL, а не ‘Paramount’, як хотілось би.

Рішення. Треба внести у визначення подання атрибут studioName, незважаючи на те, що в відношенні-результаті виконання подання він буде містити одне для всіх кортежів значення ‘Paramount’. Оновлена інструкція створення візії:

Команда додавання кортежу в ParamountMovie тоді така:

Атрибути таблиці Movie такі, як lenth, inColor, producerC# невідомі під час додавання кортежу. Якщо для атрибуту lenth у схемі Movie передбачене значення по замовчанню 0, у відношення Movie було б додано кортеж:

Візії, що оновлюються, припускають також видалення кортежів.

Приклад 5.30. Нехай треба видалити з подання ParamountMovie фільми, в назві яких присутнє слово “Trek”. Для цього застосовуємо команду

Ця команда перетворюється в еквівалентну інструкцію видалення кортежів з таблиці Movie, де в реченні WHERE буде додаткова умова з визначення подання:

Аналогічно, команди оновлення візії (якщо вони припустимі) транслюються в інструкції зміни змісту відповідних кортежів базової таблиці.

Рис.5.29. Перетворення команди оновлення подання на команду оновлення базової таблиці.

Нарешті, ще одна команда модифікації – видалення подання. Ії можна виконати незалежно від того, чи оновлюване подання. Приклад:

Після її виконання подання зникає, базова таблиця – ні. Якщо виконати команду

то зникне і базова таблиця, і подання.

Рис.5.30. Наслідки видалення подання та базової таблиці.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: