МОВУ запиту за зразком

Одним з найбільш широко відомих прикладів мови, заснованого на численні доменів, є мова запитів за зразком (Query-By-Example – QBE) [814] (Фактично QBE одночасно втілює в собі засоби обчислення доменів та обчислення кортежів, але перше в ньому домінує) Його синтаксис є дуже привабливим і простим для інтуїтивного сприйняття він заснований на ідеї внесення записів у порожні таблиці Наприклад, формулювання на мові QBE запиту: Визначити імена постачальників,

які постачають щонайменше одну деталь, що поставляється постачальником S2 може виглядати приблизно так

Пояснення Користувач запитує систему вивести на екран три порожні таблиці (одну для постачальників і дві для поставок), потім внести в них показані вище запису Записи, що починаються з символу підкреслення, представляють собою приклади елементів (тобто змінні області визначення в численні доменів) інші записи являють собою літеральние значення Користувач запитує систему надати йому (Р” – Скорочення від present) імена постачальників (_NX), такі, що якщо постачальник має номер _sx, то постачальник _sx поставляє деяку деталь _РХ, а ця деталь

_РХ, В свою чергу, поставляється постачальником S2 Порівняння цього формулювання QBE

з еквівалентною їй формулюванням в обчисленні кортежів або доменів (див приклади

835 і 874) показує, що її відмінність від таких формулювань полягає у відсутності явно заданих кванторов10 це служить ще однією причиною того, що мова QBE є простим для інтуїтивного сприйняття Має також сенс порівняти цю версію запиту QBE з формулюванням на мові SQL (залишаємо це, як вправу для читача)

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

881 Визначити номери постачальників, які перебувають у Парижі, які мають статус> 20 (приклад 871)

Зверніть увагу, наскільки просто можна представити операції порівняння > і =. Слід також відзначити, що немає необхідності явно задавати елемент прикладу, якщо він більше ніде не згадується (але й не буде помилкою явне завдання елемента прикладу, такого як P_sx) Крім того, заслуговує на увагу те, що символьні рядкові значення, такі як Paris, можна задавати, не укладаючи їх в лапки (але не буде також помилкою застосування таких лапок, а іноді вони навіть потрібні, наприклад, якщо рядок включає пробіли)

Можливо також ввести запис Р” стосовно до всієї рядку, наприклад, як показано нижче

10 До речі, аналогічне зауваження відноситься і до мови QUEL (див, наприклад, [85])

Цей приклад еквівалентний наступному, в якому запис Р” присутній в кожній позиції стовпця в рядку

З даного прикладу випливає ще один висновок: у системі повинні бути передбачені засоби, що дозволяють редагувати на екрані порожні таблиці, додаючи і видаляючи стовпці і рядки, а також розширюючи і звужуючи стовпці Це дозволило б коригувати структуру таблиць таким чином, щоб вони відповідали вимогам будь-яких операцій, який повинні бути сформульовані користувачем зокрема, це дало б можливість видаляти стовпці, які не вимагаються в розглянутій операції Наприклад, у першій формулюванні на мові QBE обговорюваного приклад можна було б видалити стовпець SNAME І отримати наступну таблицю

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

882Определіть номера всіх поставляються деталей, видаливши непотрібні дублікати

У даній таблиці UNQ є скороченням від unique – унікальний (цей запис відповідає ключовим словом DISTINCT в мові SQL)

883Получіть номери і дані про статус постачальників, що знаходяться в Парижі, спочатку виконавши сортування в порядку убування статусу, а потім – у порядку зростання номерів

Тут запис АТ” позначає сортування в порядку зростання, a DO” – В порядку убування Числа в круглих дужках вказують послідовність сортування стовпців від старшого до молодшого в даному прикладі STATUS є старшим стовпцем, as # – молодшим

884 Отримати номери і дані про статус постачальників, які або перебувають в Парижі, або мають статус> 20, або відповідають обом умовам (модифікована версія прикладу 881)

Умови, задані в одному рядку, розглядаються як зєднані один з одним логічним оператором І (Див, припустимо, приклад 881) Для того щоб зєднати дві умови логічним оператором АБО, їх необхідно задати в різних рядках, як показано нижче

Ще один підхід до формування цього запиту полягає у використанні так званого поля умови (Condition box), як показано нижче

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

885 Визначити деталі, вага яких знаходиться в межах від 16 до 19

включно

886Для всіх деталей визначити номер деталі і вага деталі в грамах (приклад

862)

887Определіть номера постачальників, які постачають деталь Р2 (приклад 751)

У даному випадку до рядку таблиці SP неявно застосований квантор існування Цей запит можна виразити інакше, як показано нижче

Визначити імена постачальників SX, таких що існує поставка, що характеризується тим, що постачальник SX поставляє деталь Р2

Таким чином, мова QBE неявно підтримує квантор існування EXISTS (слід також відзначити, що ця неявна мінлива області значень визначена на ставленні, а не на домені, і саме тому вище було зазначено, що мова QBE включає деякі засоби обчислення кортежів) Але даний язик не поддержівает11 визначення NOT EXISTS Внаслідок цього деякі запити (Наприклад, Визначити імена постачальників, які постачають деталі всіх типів

– див приклад 875) не можна уявити на мові QBE, і ця мова не є реляційно повним

888 Визначити всі пари номерів постачальників і номерів деталей, такі що постачальник знаходиться в тому ж місті, де зберігається розглянута деталь (модифікована версія прикладу 863)

Для цього запиту потрібні три порожні таблиці: по одній для відносин S і Р (показані тільки необхідні стовпці) і одна для результату Зверніть увагу на те, як задані елементи прикладу, що дозволяють повязати між собою ці три таблиці В цілому даний запит можна виразити інакше, як показано нижче

Визначити такі пари номерів постачальників і номерів деталей, скажімо, SX і РХ, що і SX, і РХ знаходяться в одному і тому ж місті сх

889 Визначити всі пари номерів постачальників, таких що обидва постачальника в кожній парі знаходяться в одному місті (приклад 865)

У разі необхідності для визначення додаткової умови _SX < _SY Може використовуватися поле умови.

8810 Визначити загальну кількість поставляються деталей Р2

У мові QBE підтримуються всі звичайні операції агрегування

11 Щонайменше, не підтримує належним чином Дане визначення підтримується в ньому лише частково На перших порах фактично в мові QBE була передбачена повна підтримка визначення NOT EXISTS, але ця підтримка завжди була під сумнівом Основна проблема полягала в тому, що не було способу вказати порядок, в якому повинні були застосовуватися різні неявні квантори, але, на жаль, цей порядок має значення, якщо присутні які-небудь оператори заперечення NOT В результаті деякі вирази QBE були двозначними Детальний обговорення даного питання можна знайти в [83] Див також упр 82

8811Для кожної поставляється деталі визначити номер деталі і загальний обсяг поставки (приклад 868)

Запис G забезпечує групування (вона відповідає конструкції GROUP BY

в мові SQL)

8812Определіть номери всіх деталей, що поставляються більше ніж одним постачальником

8813Определіть номера деталей, які або важать більше 16 фунтів, або поставляються постачальником S2, або відповідають і тому, й іншому умові (приклад 878)

8814Вставіть в таблицю Р дані про деталі з номером Р7 (місто Афіни, вага 24,

назва і колір в даний час не відомі)

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

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

8815 Видалити дані про всі поставки, в яких кількість поставляються деталей було більше 300

Запис D знаходиться під імям таблиці

8816 Змінити колір деталі Р2 на жовтий, збільшити її вагу

на пять і вказати у відповідній колонці місто Осло

8817&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Для всіх постачальників, що знаходяться в Лондоні,

змінити обсяг поставки на пять

89 РЕЗЮМЕ

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

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

Вираз обчислення кортежів складається з кортежу-прототипу і необовязковою

конструкції WHERE, що містить логічний вираз або правильно побудовану формулу (Well-Formed Formula – WFF) Подібна правильно побудована формула може включати квантори (EXISTS І FORALL), вільні і повязані посилання на змінні, логічні (булеві) оператори (AND, OR, NOT та ін) і тд Кожна вільна змінна, яка зустрічається в правильно побудованої формулі, повинна бути також

згадана у кортежі-прототипі

Примітка У даний главі явно це питання не порушувалося, але вираження реляційного числення призначені по суті для тих же цілей, що і вирази реляційної алгебри (див розділ 76 глави 7)

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

вираз реляційної алгебри, готуючи тим самим грунт для вибору

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

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

реляційної алгебрі забезпечуються операціями EXTEND і SUMMARIZE) Потім

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

Запит SQL являє собою табличне вираз Зазвичай така конструкція містить єдине вираз вибірки, проте підтримуються і різні типи явних виразів операцій зєднання, причому вираження зєднання і вибірки можуть комбінуватися довільним чином за допомогою операторів UNION, INTERSECT і EXCEPT Також згадувалося про можливість використання конструкція ORDER BY ДЛЯ визначення впорядкованості рядків у таблиці, що є результатом обчислення даного табличного виразу (будь-якого виду)

Зокрема, були описані наступні компоненти виразів вибірки

■ Базоваконструкція SELECT, в тому числі використання ключового слова DISTINCT, скалярних виразів, введення імен результуючих стовпців і іс користування скорочення SELECT *

■&nbsp&nbsp&nbsp&nbsp Конструкція FROM, включаючи використання змінних області значень

■&nbsp&nbsp&nbsp&nbsp Конструкція WHERE, включаючи використання оператора EXISTS

■&nbsp&nbsp&nbsp&nbsp Конструкція GROUP BY і HAVING, включаючи використання агрегуються функцій

COUNT, SUM, AVG І ТД

■ Використання підзапитів (Наприклад) в конструкціях12 SELECT, FROM І WHERE

Крім того, тут був описаний концептуальний алгоритм обчислення виразів вибірки мови SQL (основа для формального визначення цих виразів) Коротко можна відзначити, що цей алгоритм передбачає формування декартова твори таблиць, зазначених у конструкції FROM, застосування операції скорочення до цього твору відповідно до логічним вираженням, зазначеним у конструкції WHERE, і нарешті, застосування операції проекції до результатів операції скорочення по стовпцях, зазначеним у конструкції SELECT АЛЕ слід відразу ж зробити застереження, що це короткий опис є далеко не повним більш докладні відомості наведені в [420]

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

Джерело: Дейт К Дж, Введення в системи баз даних, 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>

*

*