ПІДТРИМКА ВИСТАВ У МОВІ SQL
У цьому розділі будуть розглянуті засоби підтримки уявлень, що у мові SQL (до часу написання даної книги в мові SQL не була передбачена підтримка знімків) Насамперед, розглянемо синтаксис оператора створення подання CREATE VIEW, як показано нижче (Тут для стислості не розглядається цілий ряд опцій і альтернатив, зокрема, можливість визначити уявлення як має деякий структурований тип за допомогою ключового слова ОF.)
CREATE VIEW <view name> AS <table exp>
[ WITH [ <quali£ier> ] CHECK OPTION ]
Пояснення
3 Значення параметра <table exp> являє собою визначення представ лення
4 Конструкція WITH CHECK OPTION, якщо вона вказана, означає, що операції вставки (INSERT) та оновлення (UPDATE) для даного поданні будуть отме нени у разі порушення обмежень цілісності, зазначених у визначенні подання Тому необхідно враховувати, що подібні операції будуть Окан Чіван невдачею лише в тому випадку, коли конструкція WITH CHECK OPTION за дана явно, тобто за замовчуванням будь-які операції вставки і оновлення кортежів бу дуть завершуватися успішно На підставі висновків, зроблених в розділі 104, можна зробити висновок, що такий спосіб організації роботи логічно не виправданий Тому настійно рекомендується на практиці завжди вказувати опцію WITH CHECK OPTION у визначеннях будь-яких створюваних представленій7 [105]
7 Безумовно, мова йде тільки про оновлюваних виставах Як ми переконаємося пізніше, в мові SQL уявлення часто не є оновлюваними, і наявність опції WITH CHECK OPTION в таких випадках неприпустимо відповідно до вимог мови SQL
Приклади
1         CREATE VIEW GOOD_SUPPLIER
AS SELECT SS#, SSTATUS, SCITY FROM S
WHERE SSTATUS > 15
WITH CHECK OPTION
2         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  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  CREATE VIEW HEAVY_REDPART
AS SELECT RPP#, RPPNAME, RPWT, RPCITY FROM REDPART AS RP
WHERE RPWT > 120
WITH CHECK OPTION
Існуюче подання може бути видалено за допомогою оператора DROP VIEW,
синтаксис якого наведено нижче
DROP VIEW <view name> <behavior>
У цьому операторі (як звичайно) параметр <behavior>, який вказує спосіб видалення, може приймати значення RESTRICT І CASCADE ЯКЩО задана опція RESTRICT, а видаляється уявлення десь використовується (наприклад, у визначеннях інших уявлень або в обмеженнях цілісності), то дана операція DROP закінчиться невдачею Якщо ж вказана опція CASCADE, то виконання даної операції DROP завершиться успішно і спричинить неявне застосування операторів DROP .. CASCADE до всіх компонентів бази даних, в яких в даний час використовується дане подання
Вибірка даних з уявлень
Як було відзначено в розділі 103, поточна версія стандарту SQL гарантує правильне виконання всіх операцій вибірки даних з будь-яких уявлень На жаль, цього не можна сказати про деяких сучасних програмних продуктах, а також про версії стандарту, що передують SQL: 1992
Оновлення даних у представлених
У мові SQL підтримка засобів поновлення уявлень залишається обмеженою Причину такого стану справ надзвичайно важко обгрунтувати якимись розумними доводами Фактично, в цій області стандарт мови SQL залишається ще більш непробивним, ніж обично8 Нижче наведена типова витяг з цього стандарту (лише трохи відредагована для узгодження з поточним контекстом)
Вираз запиту <query expression^ QE1, є оновлюваних тоді і тільки тоді, коли кожен вираз запиту <query expression> або кожна специфікація запиту «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 безпосередньо містить вираз запиту
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 с: Ил – Парал тит англ
Схожі статті:
- Harvest: ключ до управління проектами. Частина 2 (0)
- Коротке порівняння Oracle SQL і ANSI SQL (0)
- Погляд на Windows XP SP3 beta (0)
- Установка Windows Vista SP1 (0)
- Як написати AJAX-додаток (0)
- Найсмачніші консерви з тих (0)
- Оновлення операційної системи (0)
Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.
Коментарів поки що немає.
Ваш отзыв
Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>