Кубанский государственный университет
Опубликован: 24.12.2013 | Доступ: свободный | Студентов: 681 / 8 | Длительность: 24:28:00
Лекция 9:

Язык QBE (Query-by-example)

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

9.3 Подъязык DML

Подъязык DML как и в SQL представлен тремя командами —вставка (I.), удаление (D.) и обновление (U.). Пример вставки строки приведен в таблице 9.12.

Таблица 9.12. Вставка строки
emp ename mgr sal deptno
I. JONES 7638 43550 40

Удалим из emp всех сотрудников отдела 40 (таблица 9.13)

Таблица 9.13. Удаление сотрудников отдела 40
emp ename mgr sal deptno
D. 40

Более сложный пример удаления всех сотрудников, работающих в отделе продаж (таблица 9.14) требует использования подзапросов. Подзапросы можно использовать и в командах обновления.

Таблица 9.14. Удаление сотрудников отдела продаж
emp ename mgr sal deptno
D. _D_
dept deptno dname loc
_D_ SALES

Обновление записей понимается несколько труднее. Для примера с командой U. (таблица 9.15) необходимо пояснить, что столбец ename образует первичный ключ и не может быть изменен. Поэтому значение "ALLEN" понимается транслятором как условие поиска строк, а значение 3050 действительно заменяет старое значение заработной платы.

Таблица 9.15. Обновление записи
emp ename mgr sal deptno
U. ALLEN U.3050

9.4 Создание таблицы

Покажем на примере (таблица 9.16), как создается таблица с именем newtab и столбцами name, sal, mgr, dept. Начав с пустого шаблона, пользователь заполняет заголовки именами полей. Команда I. перед именем таблицы newtab означает "создать таблицу с именем newtab". Команда I. справа от newtab относится ко всей строке заголовков столбцов.

Таблица 9.16. Создание таблицы newtab
I.newtab I. name sal mgr dept
TYPE I. %String %Integer %Integer %Integer
LENGTH I. 30 5 4 2
KEY K NK NK NK

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

В нашем инструменте свойства столбцов определяют всего три строки:

  • TYPE задает тип данных. В нашем инструменте используются типы принятые в COS;
  • LENGTH задает ширину поля;
  • KEY указывает поля первичного ключа (значение K это Key - ключ, NK это NonKey - не ключ).

В других реализациях используются еще две строки:

  • DOMAIN — имя домена
  • SYSNULL (System Null) задает необязательный символ, обозначающий null-значение.

Возможны изменения таблиц. Для того, чтобы добавить столбец, достаточно вызвать описание таблицы и командой имя_столбца добавить столбец, описав его свойства. Удаление столбца производится командой D. Можно переименовывать столбцы (таблица 9.17)

Таблица 9.17. Переименование столбца
tabl U.sal=salary

Покажем, как создается представление (view) по имени st со столбцами name и dname (таблица 9.18)

Таблица 9.18. Создание представления
I.view st I. name dname
I. _N_ _DN_
emp ename mgr sal deptno
_N_ _D_
dept deptno dname loc
_D_ _DN_

SQL-аналог этого представления:

CREATE VIEW st (name, dname) AS SELECT   name, dname 
FROM emp, dept
WHERE emp.deptno=dept.deptno

9.5 QBE в системах управления базами данных

Из-за легкости усвоения QBE распространен довольно широко. Он используется в Microsoft Access, в СУБД Base OpenOffice, встроен во многие средства для разработки информационных систем, например, Hibernate. Существуют отдельные программы, предоставляющие язык QBE для широкого круга баз данных, использующих интерфейсы ODBC или JDBC.

На (рисунке 9.4 вы найдете пример интерфейса QBE для Microsoft Access.

 QBE в Microsoft Access

Рис. 9.4. QBE в Microsoft Access

Вы теперь самостоятельно можете понять, какой запрос представлен на последнем рисунке. Как видите, знание основных принципов построения графического интерфейса QBE позволяет легко разобраться с незнакомой ранее реализацией.

9.6 Так что такое QBE?

То, что QBE —это язык, основанный на исчислении предикатов на доменах, мы уже отметили. Естественно, он обладает свойством реляционной полноты.

Важнее другая его особенность. В QBE неразрывно соединены две компоненты — графическая и вербальная. Первая образуется динамической системой шаблонов, представляющих фрагмент схемы базы необходимый для решения конкретной задачи. Поля шаблонов могут быть заполнены командами, переменными и условиями выбора и соединения, представляющими вербальную компоненту языка. И мы видели, что такое сочетание вербальной и графической компонент в одном языке может быть весьма удобным.

Наверное, лингвист сказал бы, что SQL, в отличие от QBE, чисто вербальный язык. Любая возможная инструкция в нем есть одномерная последовательность слов (цепочка). Возможные структуры этих цепочек описываются некоторой грамматикой.

И еще. В используемом вами инструменте постоянно предлагался эквивалент команды на языке SQL. Это делается чисто в учебных целях, чтобы связать в вашем представлении оба языка. Конечно, QBE можно транслировать в SQL. Но отсюда не следует, что QBE —это такой способ представления SQL. Например, в Cache можно транслировать команды QBE в COS-процедуры, предназначенные для работы с глобалами, хранящими данные таблиц. В большинстве других СУБД пользователь не может написать подобный транслятор из-за того, что не имеет доступа к структурам хранения на низком уровне.

Что шире SQL или QBE? В последних версиях SQL существенно шире. Например, в нашем инструментальном средстве для QBE эквивалента UNION нет.

Есть веские основания полагать, что QBE никогда не догонит SQL. Дело в том, что графические компоненты чрезвычайно удобны, но существенно ограничены. Слишком сложные образы только затрудняют восприятие.

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >