ПІДТРИМКА ВИСТАВ У МОВІ SQL

У цьому розділі будуть розглянуті засоби підтримки уявлень, що у мові SQL (до часу написання даної книги в мові SQL не була передбачена підтримка знімків) Насамперед, розглянемо синтаксис оператора створення подання CREATE VIEW, як показано нижче (Тут для стислості не розглядається цілий ряд опцій і альтернатив, зокрема, можливість визначити уявлення як має деякий структурований тип за допомогою ключового слова ОF.)

CREATE VIEW &ltview name&gt AS &lttable exp&gt

[ WITH [ &ltquali£ier&gt ] CHECK OPTION ]

Пояснення

3 Значення параметра &lttable   exp&gt являє собою визначення представ лення

4 Конструкція WITH CHECK OPTION, якщо вона вказана, означає, що операції вставки (INSERT) та оновлення (UPDATE) для даного поданні будуть отме нени у разі порушення обмежень цілісності, зазначених у визначенні подання Тому необхідно враховувати, що подібні операції будуть Окан Чіван невдачею лише в тому випадку, коли конструкція WITH CHECK OPTION за дана явно, тобто за замовчуванням будь-які операції вставки і оновлення кортежів бу дуть завершуватися успішно На підставі висновків, зроблених в розділі 104, можна зробити висновок, що такий спосіб організації роботи логічно не виправданий Тому настійно рекомендується на практиці завжди вказувати опцію WITH CHECK OPTION у визначеннях будь-яких створюваних представленій7 [105]

7 Безумовно, мова йде тільки про оновлюваних виставах Як ми переконаємося пізніше, в мові SQL уявлення часто не є оновлюваними, і наявність опції WITH CHECK OPTION в таких випадках неприпустимо відповідно до вимог мови SQL

Приклади

1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp CREATE VIEW GOOD_SUPPLIER

AS SELECT SS#, SSTATUS, SCITY FROM  S

WHERE SSTATUS &gt 15

WITH CHECK OPTION

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp CREATE VIEW REDPART

AS SELECT PP#, PNAME, PWEIGHT AS WT, PCITY FROM  P

WHERE PCOLOR = Red WITH CHECK OPTION

;

3 CREATE VIEW PQ

AS SELECT PP#, ( SELECT SUM ( SPQTY ) FROM   SP

WHERE SPP# = PP# ) AS TOTQTY FROM P

У мові SQL це подання не розглядається як оновлюється, тому конструкція WITH CHECK OPTION повинна бути опущена

4&nbsp CREATE VIEW CITY_PAIR

AS SELECT DISTINCT SCITY AS SCITY, PCITY AS PCITY FROM S, SP, P WHERE SS# = SPS# AND SPP# = PP#

У мові SQL це подання також не розглядається як оновлюється, тому конструкція WITH CHECK OPTION повинна бути опущена

5&nbsp CREATE VIEW HEAVY_REDPART

AS SELECT RPP#, RPPNAME, RPWT, RPCITY FROM REDPART AS RP

WHERE RPWT &gt 120

WITH CHECK OPTION

Існуюче подання може бути видалено за допомогою оператора DROP VIEW,

синтаксис якого наведено нижче

DROP VIEW &ltview name&gt &ltbehavior&gt

У цьому операторі (як звичайно) параметр &ltbehavior&gt, який вказує спосіб видалення, може приймати значення RESTRICT І CASCADE ЯКЩО задана опція RESTRICT, а видаляється уявлення десь використовується (наприклад, у визначеннях інших уявлень або в обмеженнях цілісності), то дана операція DROP закінчиться невдачею Якщо ж вказана опція CASCADE, то виконання даної операції DROP завершиться успішно і спричинить неявне застосування операторів DROP .. CASCADE до всіх компонентів бази даних, в яких в даний час використовується дане подання

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

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

Оновлення даних у представлених

У мові SQL підтримка засобів поновлення уявлень залишається обмеженою Причину такого стану справ надзвичайно важко обгрунтувати якимись розумними доводами Фактично, в цій області стандарт мови SQL залишається ще більш непробивним, ніж обично8 Нижче наведена типова витяг з цього стандарту (лише трохи відредагована для узгодження з поточним контекстом)

Вираз запиту &ltquery expression^ QE1, є оновлюваних тоді і тільки тоді, коли кожен вираз запиту &ltquery expression&gt або кожна специфікація запиту «juery specification^ QE2, яка просто міститься в QE1, відповідає наступним вимогам

а) QE1 включає QE2 без проміжних виразів, відмінних від запитів на зєднання, <Поп join query expression>, які визначають собою КОНСТРУКЦІІ9 UNION DISTINCT, EXCEPT ALL АБО EXCEPT

DISTINCT

б) Якщо QE1 просто містить вираз, відмінне від запиту на зєднання (Non Join Query Expression – NJQE), який визначає конструкцію UNION ALL, то має місце наступне:

■ вираз NJQE безпосередньо містить вираз запиту , LO, і терм запиту term&gt, RO, такі що жодна таблиця

L0, в цілому лежить в основі лист-відносини, не є також таблицею R0, в

цілому лежить в основі лист-відносини

■ для кожного стовпця у вираженні NJQE основоположні стовпці в табли цах, позначених, відповідно, як L0 і RO, є одночасно або оновлюваними, або не оновлюваними

в) QE1 включає QE2 без проміжних виразів, відмінних від запитів на соеди ня, <Поп join query expression>, які визначають собою конструк цію INTERSECT

г) QE2 є обновлюваним

Зверніть увагу: по-перше, наведене вище правило являє собою тільки один із багатьох правил, які повинні розглядатися в їх поєднанні при визначенні того, чи є оновлюваних дане уявлення, по-друге, всі розглянуті правила не приведені в одному місці, а розкидані по багатьом різним частинам документа, і, в третіх, у всіх цих правилах згадується безліч різноманітних додаткових концепцій і конструкцій, таких як оновлюваний стовпець (updatable column), таблиця, в цілому лежить в основі лист-відносини (leaf generally underlying table), вираз, відмінне від запитів на зєднання (Non join query term), які, в свою чергу, визначені зовсім в інших частинах документа

8 Цитата з [1011]: Стандарт SQL був і продовжує залишатися барєром на шляху до розробки (не кажучи вже про здійснення) загальних методів оновлення уявлень.

9 Ми не згадували про це в главі 8, але в стандарті SQL: 1999 додатково передбачена можливість ство явно задавати специфікатор DISTINCT замість ALL в поєднанні з ключовими словами UNION, INTERSECT і EXCEPT Аналогічним чином, може бути також явно заданий специфікатор ALL замість DISTINCT в поєднанні з ключовим словом SELECT Але необхідно враховувати, що за замовчуванням з ключовими словами UNION, INTERSECT І EXCEPT застосовується DISTINCT, з ключовим СЛОВОМ SELECT за замовчуванням застосовується ALL

З цих міркувань автор навіть не намагається навести тут точне визначення уявлень, які є поновлюваними в мові SQL Але неформально можна відзначити, що в мові SQL як оновлювані розглядаються уявлення, перераховані нижче

1 Уявлення, які визначені як скорочення та / або проекція однієї базо вої таблиці

2 Подання, визначені як зєднання один до одного або один до багатьох двох базових табліц10 (у разі зєднання Один до багатьох Оновлюється мій є тільки сторона багато)

3 Подання, визначені виразами UNION ALL або INTERSECT з двома окремими базовими таблицями

4 Деякі комбінації варіантів, які відносяться до описаних вище випадків 1 -3

Мало того, навіть ці обмежені варіанти трактуються неправильно через те, що в мові SQL недостатньо широко використовується таке поняття, як предикат, і особливо у звязку з тим фактом, що в мові SQL дозволяються дублікати рядків І вся ця картина ускладнюється ще більше з огляду на те, що в мові SQL розпізнаються чотири окремі випадки, коли дане подання може бути обновлюваним, потенційно обновлюваним, просто обновлюваним або застосовним для вставкі11 (де поняття оновлюваний відноситься до операторів UPDATE і DELETE, а поняття застосовний для вставки – до операторів INSERT, і подання не може бути застосовним для вставки, якщо воно не є обновлюваним) Але що стосується описаного вище випадку 1, то необхідно сформулювати відповідні вимоги трохи точніше А саме, подання SQL безумовно є обновлюваним, якщо задовольняються всі перераховані нижче вісім умов

1 Табличне вираз, що визначає уявлення, має бути простим ви раженіем вибірки, тобто воно не повинно містити жодного з ключових слів JOIN, UNION, INTERSECT АБО EXCEPT

2 Пропозиція SELECT У виразі вибірки не повинно безпосередньо содер жати ключове слово DISTINCT

3 Кожен обираний елемент у реченні SELECT (після будь-яких необхідних розширень цього списку, заданих шаблоном зірочка, *) повинен бути име ньому шпальти (можливо, уточненими і при необхідності супроводжуваним фра зой AS), що представляє просте посилання на стовпець вихідної таблиці (див п 5),

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

1 У стандарті SQL ці терміни визначені формально, але не дано ніякого натяку на те, яке їх інтуїтивне значення і чому вони були обрані Зверніть увагу на порушення в цьому прин ципов 9 і 10, які були описані в підрозділі Напрями створення механізму оновлення пред ставлений розділу 104

причому таке посилання на стовпець ні в якому разі не повинна зявлятися більше одного разу

4 Конструкція FROM у вираженні вибірки повинна містити точно одне посилання на таблицю

5 Це посилання на таблицю повинна задавати або базову таблицю, або представ ня, що відповідає вимогам пп 1-8

Примітка Таблиця, задана за допомогою посилання на таблицю, називається основоположною таблицею для розглянутого оновлюваного подання (див п 3)

6 Заданий вираз вибірки не повинно включати конструкцію WHERE з ПОдз просом, в якому міститься конструкція FROM, що посилається на ту ж таблицю, що й основна конструкція FROM, зазначена в п 4

7 Вираз вибірки не повинно включати пропозиції GROUP BY

8 Вираз вибірки не повинно включати пропозиції HAVING

106 РЕЗЮМЕ

Подання – Це, по суті, іменоване реляционное вираз Представлення можна розглядати якпохідну віртуальну змінну відносини Операції над уявленнями зазвичай реалізуються за допомогою процедури підстановки,що складається в заміні посилання наімяподання тим виразом, який це поданнявизначаєПроцедура підстановки працює коректно завдякиреляційному властивості замкнутостіДля операційвибіркипроцес підстановки коректно виконується в 100% випадків (принаймні, теоретично, але не обовязково на практиці для існуючих продуктів) Для операцій поновлення процес підстановки коректно виконується також в 100% випадків (знову ж, теоретично, але не обовязково на практиці) Однак для деяких уявлень (наприклад, уявлень, що визначаються в термінах операції формування підсумків) спроба оновлення зазвичай призводить до помилки, оскільки порушуються встановлені в системі обмеження цілісності У цій главі також розглядався великий набірпринципів, яким повинна задовольняти схема оновлення Була детально розглянута робота схеми оновлення для вистав, визначених у термінах операційобєднання, перетину, різниці, скорочення, проекції, зєднання і розширення Для кожної з цих операцій були описані відповідні правила виведення предиката

Також була порушена проблема уявлень і логічної незалежності від даних Існує два аспекти такої незалежності: аспект зростання і аспект реструктуризації Серед інших переваг уявлень можна відзначити їх здатність приховувати дані і, отже, забезпечувати певний рівень захисту, а також їх здатність виступати в ролі скороченою записи і тим самим спрощувати роботу користувачів Були розглянуті два важливих принципи – принцип взаємозамінності

якого, зокрема, випливає, що подання повинні бути оновлюваними) і принцип відносності бази даних

Відхилившись на деякий час від основної теми, ми коротко обговорили використання знімків (Іноді званих також матеріалізовані уявленнями, хоча від цього терміна слід повністю відмовитися) І нарешті, в розділі коротко були описані ті розділи мови SQL, які мають відношення до обговорюваної теми

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*