Материал: 10БД

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

10. Лекція

ТЕМА: Уявлення

МЕТА: Дати поняття уявлень. Визначити роль уявлень в питаннях безпеки даних. Описати процес управління уявленнями: створення, зміна, вживання, видалення уявлень.

ПЛАН

1 Визначення уявлення

2 Оновлення даних в уявленнях

3 Переваги використаня уявлень

4 Недоліки використання уявлень

1 Визначення уявлення

Уявлення, або перегляди (VIEW), є тимчасовими, похідними (інакше - віртуальними) таблицями і є об'єктами бази даних, інформація в яких не зберігається постійно, як в базових таблицях, а формується динамічно при зверненні до них. Звичайні таблиці відносяться до базових, тобто таких, що містять дані і постійно знаходиться на пристрої зберігання інформації. Уявлення не може існувати саме по собі, а визначається тільки в рамках однієї або декількох таблиць. Вживання уявлень дозволяє розробнику бази даних забезпечити кожному користувачу або групі користувачів відповідні способи роботи з даними, що вирішує проблему простоти їх використовування і безпеки. Вміст уявлень вибирається з інших таблиць за допомогою виконання запиту, причому при зміні значень в таблицях дані в уявленні автоматично міняються.

Уявлення - це фактично той же запит, який виконується всякий раз при участі в якій-небудь команді. Результат виконання цього запиту в кожний момент часу стає змістом уявлення. У користувача створюється враження, що він працює із справжньою, реально існуючою таблицею.

У СУБД є дві можливості реалізації уявлень. Якщо його визначення просте, то система формує кожний запис уявлення в міру необхідності, поступово прочитуючи початкові дані з базових таблиць. У разі складного визначення СУБД доводиться спочатку виконати таку операцію, як матеріалізація уявлення, тобто зберегти інформацію, з якої складається уявлення, в тимчасовій таблиці. Потім система приступає до виконання призначеної для користувача команди і формування її результатів, після чого тимчасова таблиця віддаляється.

Уявлення - це виконаний запит, що зберігається в базі даних, який виглядає подібно звичайній таблиці і не вимагає для свого зберігання дискової пам'яті. Для зберігання уявлення використовується тільки оперативна пам'ять. На відміну від інших об'єктів бази даних уявлення не займає дискової пам'яті за винятком пам'яті, необхідної для зберігання визначення самого уявлення.

Створення і зміни уявлень в стандарті язика і реалізації в MS SQL Server співпадають і представлені наступною командою:

<визначення_уявлення> ::=

{ CREATE| ALTER} VIEW імя_уявлення

[(імя_столбца [,...n])] [WITH ENCRYPTION] AS SELECT_оператор [WITH CHECK OPTION]

Розглянемо призначення основних параметрів.

За умовчанням імена стовпців в уявленні відповідають іменам стовпців в початкових таблицях. Явна вказівка імені стовпця потрібна для обчислюваних стовпців або при об'єднанні декількох таблиць, що мають стовпці з однаковими іменами. Імена стовпців перераховуються через кому, відповідно до порядку їх проходження в уявленні.

Параметр WITH ENCRYPTION наказує серверу шифрувати SQL-код запиту, що гарантує неможливість його несанкціонованого перегляду і використовування. Якщо при визначенні уявлення необхідно приховати імена початкових таблиць і стовпців, а також алгоритм об'єднання даних, необхідно застосувати цей аргумент.

Параметр WITH CHECK OPTION наказує серверу виконувати перевірку змін, вироблюваних через уявлення, на відповідність критеріям, визначеним в операторі SELECT. Це означає, що не допускається виконання змін, які приведуть до зникнення рядка з уявлення. Таке трапляється, якщо для уявлення встановлений горизонтальний фільтр і зміна даних приводить до невідповідності рядка встановленим фільтрам. Використовування аргументу WITH CHECK OPTION гарантує, що зроблені зміни будуть відображені в уявленні. Якщо користувач намагається виконати зміни, що приводять до виключення рядка з уявлення, при заданому аргументі WITH CHECK OPTION сервер видасть повідомлення про помилку і всі зміни відхилюватимуть.

Приклад 10.1. Показати в уявленні клієнтів з Москви.

Створення уявлення:

CREATE VIEW view1 AS

SELECT КодКлієнта, Прізвище, МістоКлієнта

FROM Клієнт

WHERE МістоКлієнта='Москва'

Приклад 10.1. Представлення клієнтів з Москви.

Вибірка даних з уявлення:

SELECT * FROM view1

Звернення до уявлення здійснюється за допомогою оператора SELECT як до звичайної таблиці.

Уявлення можна використовувати в команді так само, як і будь-яку іншу таблицю. До уявлення можна будувати запит, модифікувати його (якщо воно відповідає певним вимогам), обєднувати з іншими таблицями. Зміст уявлення не фіксований і обновляється кожного разу, коли на нього посилаються в команді. Уявлення значно розширюють можливості управління даними. Зокрема, це прекрасний спосіб дозволити доступ до інформації в таблиці, приховавши частину даних.

Так, в прикладі 10.1 уявлення просто обмежує доступ користувача до даних таблиці Клієнт, дозволяючи бачити тільки частину значень.

Виконаємо команду:

INSERT INTO view1 VALUES (12,'Петров', 'Самара')

Це допустима команда в уявленні, і рядок буде доданий за допомогою представлення view1 в таблицю Клієнт. Проте, коли інформація буде додана, рядок зникне з уявлення, оскільки назва міста відмінна від Москви. Іноді такий підхід може стати проблемою, оскільки дані вже знаходяться в таблиці, але користувач їх не бачить і не в змозі виконати їх видалення або модифікацію. Для виключення подібних моментів служить WITH CHECK OPTION у визначенні уявлення. Фраза розміщується у визначенні уявлення, і всі команди модифікації піддаватимуться перевірці.

ALTER VIEW view1

SELECT КодКлієнта, Прізвище, МістоКлієнта

FROM Клієнт

WHERE МістоКлієнта='Москва'

WITH CHECK OPTION

Приклад 10.2. Створення уявлення з перевіркою команд модифікації.

Для такого уявлення вищезазначена вставка значень відхилюватиметься системою.

Таким чином, уявлення може змінюватися командами модифікації DML, але фактично модифікація впливає не на саме уявлення, а на базову таблицю.

Уявлення видаляється командою:

DROP VIEW імя_уявлення [,...n]

2 Оновлення даних в уявленнях

Не всі уявлення в SQL можуть бути модифіковані. Уявлення, що модифікується, визначається наступними критеріями:

  • грунтується тільки на одній базовій таблиці;

  • містить первинний ключ цієї таблиці;

  • не містить DISTINCT в своєму визначенні;

  • не використовує GROUP або HAVING в своєму визначенні;

  • по можливості не застосовує в своєму визначенні підзапити;

  • не використовує константи або виразу значень серед вибраних полів виводу;

  • в уявлення повинен бути включений кожний стовпець таблиці, що має атрибут NOT NULL ;

  • оператор SELECT уявлення не використовує агрегуючі (підсумкові) функції, з'єднання таблиць, збережені процедури і функції, визначені користувачем;

  • грунтується на одиночному запиті, тому об'єднання UNION не дозволено.

Якщо уявлення задовольняє цим умовам, до нього можуть застосовуватися оператори INSERT, UPDATE, DELETE. Відмінності між уявленнями, що модифікуються і уявленнями, призначеними тільки для читання, не випадкові. Цілі, для яких їх використовують, різні.

З уявленнями, що модифікуються, в основному обходяться точно так, як і з базовими таблицями. Фактично, користувачі не можуть навіть усвідомити, чи є об'єкт, який вони запрошують, базовою таблицею або уявленням, тобто перш за все це засіб захисту для приховання конфіденційних або таких, що не відносяться до потреб даного користувача частин таблиці.

Уявлення в режимі <тільки для читання> дозволяють одержувати і форматувати дані більш раціонально. Вони створюють цілий арсенал складних запитів, які можна виконати і повторити знову, зберігаючи одержану інформацію. Результати цих запитів можуть потім використовуватися в інших запитах, що дозволить уникнути складних предикатів і понизити вірогідність помилкових дій.

CREATE VIEW view2 AS

SELECT Клієнт.Прізвище, Клієнт.Фірма, Операція.Кількість

FROM Клієнт INNER JOIN Операція ON Клиент.КодКлієнта=Операція.КодКлієнта

Приклад 10.3. уявлення, що не модифікується, з даними з різних таблиць.

CREATE VIEW view3(Тип, Заг_залишок) AS

SELECT Тип, Sum(Залишок)

FROM Товар

GROUP Тип

Приклад 10.4. уявлення, що не модифікується, з угрупуванням і підсумковими функціями.

Звичайно в уявленнях використовуються імена, одержані безпосередньо з імен полів основної таблиці. Проте іноді необхідно дати стовпцям нові імена, наприклад, у разі підсумкових функцій або обчислюваних стовпців.

CREATE VIEW view4(Код, Назва, Тип, Ціна, Податок) AS

SELECT КодТовара, Назва, Тип, Ціна, Цена*0.05 FROM Товар

Приклад 10.5. Уявлення, що модифікується, з обчисленнями.

Переваги і недоліки уявлень

Механізм уявлення - могутній засіб СУБД, що дозволяє приховати реальну структуру БД від деяких користувачів за рахунок визначення уявлень. Будь-яка реалізація уявлення повинна гарантувати, що стан відношення, що представляється, точно відповідає стану даних, на яких визначено це уявлення. Звичайно обчислення уявлення проводиться кожного разу при його використовуванні. Коли уявлення створюється, інформація про нього записується в каталог БД під власним ім'ям. Будь-які зміни в даних адекватно відобразяться в уявленні - в цьому його відмінність від дуже схожого на нього запиту до БД. В той же час запит є як би <миттєвою фотографією> даних і при зміні останніх запит до БД необхідно повторити. Наявність уявлень в БД необхідна для забезпечення логічної незалежності даних. Якщо система забезпечує фізичну незалежність даних, то зміни у фізичній структурі БД не впливають на роботу призначених для користувача програм. Логічна незалежність має на увазі той факт, що при зміні логічної структури даних вплив на призначені для користувача програми також не виявляється, а значить, система повинна уміти вирішувати проблеми, пов'язані із зростанням і реструктуризацією БД. Очевидно, що із збільшенням кількості даних, бережених в БД, виникає необхідність її розширення за рахунок додавання нових атрибутів або відносин - це називається зростанням БД. Реструктуризація даних має на увазі збереження тієї ж самої інформації, але змінюється той, що її розташовує, наприклад, за рахунок перегруповування атрибутів у відносинах. Припустимо, деяке відношення через які-небудь причини необхідно розділити на два. З'єднання одержаних відносин в уявленні відтворює початкове відношення, а у користувача складається враження, що ніякій реструктуризації не проводилося. Крім рішення проблеми реструктуризації уявлення можна застосовувати для проглядання одних і тих же даних різними користувачами і в різних варіантах. За допомогою уявлень користувач має нагоду обмежити об'єм даних для зручності роботи. Нарешті, механізм уявлень дозволяє приховати службові дані, не цікаві користувачам.

У разі виконання СУБД на персональному комп'ютері, що окремо стоїть, використовування уявлень звичайно має на меті лише спрощення структури запитів до бази даних. Проте у разі розрахованої на багато користувачів мережної СУБД уявлення грають ключову роль у визначенні структури бази даних і організації захисту інформації. Розглянемо основні переваги вживання уявлень в подібному середовищі.

3 Переваги використаня уявлень

Незалежність від даних

За допомогою уявлень можна створити злагоджену, незмінну картину структури бази даних, яка залишатиметься стабільною навіть у разі зміни формату початкових таблиць (наприклад, додавання або видалення стовпців, зміни зв'язків, розділення таблиць, їх реструктуризації або перейменування). Якщо в таблицю додаються або з неї віддаляються стовпці, що не використовуються в уявленні, то змінювати визначення цього уявлення не буде потрібно. Якщо структура початкової таблиці переупорядковується або таблиця розділяється, можна створити уявлення, що дозволяє працювати з віртуальною таблицею колишнього формату. У разі розділення початкової таблиці, колишній формат може бути віртуально відтворений за допомогою уявлення, побудованого на основі з'єднання знов створених таблиць - кінцево, якщо це виявиться можливим. Останню умову можна забезпечити за допомогою приміщення у всі знов створені таблиці первинного ключа колишньої таблиці.

Актуальність

Зміни даних в будь-якій з таблиць бази даних, вказаних у визначальному запиті, негайно відображається на вмісті уявлення.

Підвищення захищеності даних

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

Зниження вартості

Уявлення дозволяють спростити структуру запитів за рахунок об'єднання даних з декількох таблиць в єдину віртуальну таблицю. В результаті багатотабличні запити зводяться до простих запитів до одного уявлення.

Додаткові зручності

Створення уявлень може забезпечувати користувачів додатковими зручностями - наприклад, можливістю роботи тільки з дійсно потрібною частиною даних. В результаті можна добитися максимального спрощення тієї моделі даних, яка знадобиться кожному кінцевому користувачу.

Можливість настройки

Уявлення є зручним засобом настройки індивідуального образу бази даних. В результаті одні і ті ж таблиці можуть бути пред'явлені користувачам в абсолютно різному вигляді.

Забезпечення цілісності даних

Якщо в операторі CREATE VIEW буде вказана фраза WITH CHECK OPTION, то СУБД стане здійснювати контроль за тим, щоб в початкові таблиці бази даних не був введений жоден з рядків, що не задовольняють пропозиції WHERE у визначальному запиті. Цей механізм гарантує цілісність даних в уявленні.

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

Проте використовування уявлень в середовищі SQL не позбавлено недоліків.

4 Недоліки використання уявлень

Обмежені можливості оновлення

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

Структурні обмеження

Структура уявлення встановлюється у момент його створення. Якщо визначаючий запит представлений у формі SELECT * FROM_, то символ * посилається на всі стовпці, існуючі в початковій таблиці на момент створення уявлення. Якщо згодом в початкову таблицю бази даних додадуться нові стовпці, то вони не з'являться в даному уявленні до тих пір, поки це уявлення не буде видалено і знов створено.

Зниження продуктивності

Використовування уявлень пов'язано з певним зниженням продуктивності. В одних випадках вплив цього чинника абсолютно незначний, тоді як в інших воно може послужити джерелом істотних проблем. Наприклад, уявлення, визначене за допомогою складного багатотабличного запиту, може зажадати значні витрати часу на обробку, оскільки при його дозволі буде потрібно виконувати з'єднання таблиць всякий раз, коли знадобиться доступ до даного уявлення. Виконання дозволу уявлень зв'язано з використанням додаткових обчислювальних ресурсів.