Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m_DBSQL_mu.docx
Скачиваний:
28
Добавлен:
17.03.2016
Размер:
373.51 Кб
Скачать

Представлення

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

Оператор визначення уявлення має наступний вигляд:

Синтаксис:

CREATE VIEW <імя_представлення> [<список_ стовпців>] AS <SQL-запит>

Якщо список стовпців не зазначений, то в представлення увійдуть всі стовпці із запиту, на основі яких вона створена, з відповідними іменами. У SQL-запиті можна використовувати обчислювані поля, угруповання, підзапит, однак при цьому слід враховувати обмеження, що відображають природу представлень. Після створення представлення його можна використовувати в запитах нарівні з таблицями. На основі представлень можна створювати нові представлення.

Як приклад створимо представлення, яке приховує інформацію про адреси студентів (таке представлення прийнято називати вертикальним).

CREATE VIEW NEW _СТУДЕНТ ID, ПІБ, ID_Cons

AS SELECT ID_Stud, СПрізв, Консультант FROM СТУДЕНТ

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

Нехай визначено представлення, що містить середній бал кожного студента:

CREATE VIEW СЕРЕДНІЙ_БАЛ (СНом, Студент, СерБал)

AS SELECT ID_Stud, СПрізв, AVG (Оцінка)

FROM СТУДЕНТ, УСПІШНІСТЬ GROUP BY ID_Stud, СПрізв

Тепер знайдемо студентів, чий середній бал більше 4.5:

SELECT СНом, Студент, СерБал FROM СРЕДНІЙ_БАЛЛ

WHERE СерБал > 4.5

Цей правильний, на перший погляд, запит буде відкинутий, оскільки насправді сформований невірний запит з умовою на агрегатну функцію в реченні WHERE:SELECT ID_Stud, СПрізв, AVG (Оцінка)

FROM СТУДЕНТ, УСПІШНІСТЬ

WHERE AVG (Оцінка)> 4.5

GROUP BY ID_Stud, СПрізв

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

• У запиті, на основі якого створено представлення, повинно бути відсутнім слово DISTINCT.

• У реченні FROM запиту, на основі якого створено уявлення, повинна бути тільки одна таблиця.

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

• У пропозиції WHERE не повинен стояти вкладений запит.

• У запиті не повинно міститися пропозицій GROUP BY і HAVING. Крім того, слід пам'ятати ряд обмежень при використанні групових представлень (заснованих на запитах з угрупуваннями).

• Не можна використовувати вбудовані функції.

• Не можна використовувати оператори JOIN, GROUP BY і HAVING.

• Підзапит не може посилатися на групове представлення.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]