
- •Віртуальні таблиці (візії) Визначення візії
- •Перейменування атрибутів візії
- •Модифікація змісту візій
- •Тема 14. Обмеження та тригери в sql Активні елементи
- •Ключі відношень Види ключів і обмеження
- •Оголошення первинного ключа
- •Ключі та індекси
- •Оголошення зовнішнього ключа
- •Стратегії забезпечення посилальної цілісності
- •Обмеження рівня атрибутів та кортежів
- •Обмеження not null
- •Обмеження check рівня атрибуту
- •Обмеження check рівня кортежу
- •Модифікація обмежень
- •Тригери в sql Тригери як правила „подія-умова-дія”
- •Тригери instead of
- •Тригери у Transact sql
- •Безпека
- •Категорії збережених процедур Системні збережені процедури
- •Локальні збережені процедури
- •Тимчасові збережені процедури
- •Розширені збережені процедури
- •Основи програмування у Transact-sql
- •Блоки операторів
- •Умовне виконання
- •Використання збережених процедур Виклик збереженої процедури
- •Створення збереженої процедури
- •Безпека даних
- •1.2. Реєстрація користувачів
- •Керування правами доступу
- •Кому надаються права доступу
- •Умови надання прав доступу
- •1.3.3. Об’єкти, на які поширюються права доступу
- •Операції, щодо яких специфікуються права доступу
- •Можливість передавання прав доступу іншим особам
- •Специфікація повноважень
- •Обов’язкові методи захисту
- •Ведення журналів доступу
- •Обхід системи захисту
- •Використання представлень для фільтрації повноважень
- •Хто може створювати представлення?
Віртуальні таблиці (візії) Визначення візії
Відношення, створене командою CREATE TABLE, є персистентним, тобто таким, що зберігає зміст, допоки не буде явно змінене командами INSERT, DELETE, UPDATE, DROP.
Інша категорія відношень (неперсистентні) не створюється на фізичному рівні. Вони не зберігають кортежі фізично, а відбирають дані з інших відношень кожного разу під час звертання до них. Вони зберігають фізично лише текст відповідного запиту. Такі відношення називають:
Віртуальні таблиці (virtual tables);
Представлення (views);
Візії.
Відношення є загальною назвою для персистентних відношень і для неперсистентних (візій). Персистентні відношення програмісти схильні називати таблиці (базові таблиці, базові відношення).
Рис.13.5. Таблиці та візії
Вираз створення візії:
CREATE VIEW R AS Q;
де R – назва візії,
Q - запит, який є визначенням візії; при зверненні до візії з певним запитом система виконає запит Q, після чого використає результат для задоволення свого запиту.
Рис.13.6. Візії в БД системи класу ERP „Регістри”
Приклад 13.9. Нехай треба створити візію, яка є частиною відношення
а саме значення компонентів title i year тих кортежів, які містять інформацію про фільми, зняті на студії Paramount.
Приклад 13.10. Нехай нас цікавлять дані про всіх акторів, які знімались у фільмах студії Paramount.
Припустимо в контексті одного запиту об’єднувати таблиці та візії.
Перейменування атрибутів візії
Нехай ми маємо намір надати атрибутам візії імена, відмінні від успадкованих від схем базових відношень (як-от для обчислюваних атрибутів). Для цього в інструкції оголошення візії після її назви в круглих дужках треба перелічити нові імена. (Те ж можна виконати в тексті запиту службовим словом AS або навіть без нього).
Приклад 13.11. Нехай нас цікавлять назви фільмів та їхні продюсери.
Напр., аби знайти ім’я (або імена) продюсера фільму Gone With the Wind, треба виконати запит
SELECT prodName FROM MovieProd WHERE movieTitle=’Gone With the Wind’
Модифікація змісту візій
В разі виконання певних досить жорстких умов припустимо звертатись до візії з командами вставки (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 має охоплювати достатньо атрибутів, аби при спробі вставки кортежу в візію система змогла присвоїти іншим атрибутам значення по замовчанню, передбачені в базовій таблиці. Тобто обов’язкові поля таблиці, у яких нема значень по замовчанню, мають бути у візії.
Приклад 13.12. Повернімося до прикладу 13.9.
Спробуємо вставити новий кортеж у візію.
Візія ParamountMovie задовольняє формальним вимогам стандарту SQL для модифікації, оскільки побудована на виборі з одної таблиці
Але є проблема:
Атрибут таблиці studioName не входить у набір атрибутів візії. Тому при додаванні кортежу компоненту studioName таблиці Movie буде присвоєне значення NULL, а не ‘Paramount’, як хотілось би.
Рішення. Треба внести у визначення візії атрибут studioName, незважаючи на те, що в відношенні-результаті виконання візії він буде містити одне для всіх кортежів значення ‘Paramount’. Оновлена інструкція створення візії:
Команда додавання кортежу в ParamountMovie тоді така:
Атрибути таблиці Movie такі, як lenth, inColor, producerC# невідомі під час додавання кортежу. Якщо для атрибуту lenth у схемі Movie передбачене значення по замовчанню 0, у відношення Movie було б додано кортеж:
Візії, що оновлюються, припускають також видалення кортежів.
Приклад 13.13. Нехай треба видалити з візії ParamountMovie фільми, в назві яких присутнє слово “Trek”. Для цього застосовуємо команду
Ця команда перетворюється в еквівалентну інструкцію видалення кортежів з таблиці Movie, де в реченні WHERE буде додаткова умова з визначення візії:
Аналогічно, команди оновлення візії (якщо вони припустимі) транслюються в інструкції зміни змісту відповідних кортежів базової таблиці.
Рис.13.6. Перетворення команди оновлення візії на команду оновлення базової таблиці.
Нарешті, ще одна команда модифікації – видалення візії. Ії можна виконати незалежно від того, чи оновлювана візія. Приклад:
Після її виконання візія зникає, базова таблиця – ні. Якщо виконати команду
то зникне і базова таблиця, і візія.
Рис.13.7. Наслідки видалення візії та базової таблиці.