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

Языки реляционных баз данных

Аннотация: В начале лекции будут рассмотрены понятия исчисления и исчислений на кортежах и доменах. Будет показана возможность их использования в качестве языков запросов к реляционным базам данных. В следующих главах вы увидите, что два наиболее известных языка запросов SQL и QBE построены на основе этих исчислений.
Ключевые слова: СУБД, представление, место

В соответствии с принятым стилем изложения вы будете создавать примеры запросов в обоих исчислениях, используя уже известный вам инструмент WinRDBI. Материал лучше осваивается, если решать примеры. И когда вас просят потренироваться писать запросы на языках, которые не используются в промышленных СУБД, это не означает просьбу посетить кладбище погибших языков и отдать дань почившим. Многое из того, что вы при этом узнаете, переносится на действующие языки. Вы будете лучше понимать пути развития языков и подготовитесь к восприятию будущих нововведений.

Затем обратимся к лингвистике естественных языков для того, чтобы выяснить ограничения, которые они накладывают на восприятие мира носителями этих языков. Это позволит нам предположить наличие подобных или еще более сильных ограничений в искусственных языках и объяснить необходимость совместного использования нескольких таких языков.

Мы введем также общее представление о когнитивном направлении в науке и покажем, почему этот аспект важен для языков программирования вообще и языков баз данных в частности.

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

7.1 Ограниченность языка реляционной алгебры

Возможности языка реляционной алгебры ограничены. Перечислим некоторые типы запросов, не выразимых средствами реляционной алгебры:

  • запросы, требующие дать в ответе список отношений и/или атрибутов, удовлетворяющих определенным условиям (например, "в каких отношениях имеется атрибут sal?");
  • запросы, требующие рекурсии.

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

Типичный пример запроса второго типа рассмотрен далее. Станет понятно, что для записи такого запроса язык должен использовать рекурсию.

Мы будем работать с таблицами учебной схемы Scott, заимствованной из Oracle. В ней таблица emp (сотрудники) содержит иерархическую структуру организации. empno — табельный номер, ename — имя сотрудника, job — должность, mgr — табельный номер непосредственного начальника, hiredate — дата приема на работу, sal — зарплата, comm — комиссионные, deptno — номер отдела (таблица 7.1).

Таблица 7.1. Содержимое таблицы emp
* empno ename job hiredate sal comm mgr deptno
7369 SMITH CLERK 17-12-1980 800 7902 20
7499 ALLEN SALESMAN 20-02-1981 1600 300 7698 30
7521 WARD SALESMAN 22-02-1981 1250 500 7698 30
7566 JONES MANAGER 02-04-1981 2975 7839 20
7654 MARTIN SALESMAN 28-09-1981 1250 1400 7698 30
7698 BLAKE MANAGER 01-05-1981 2850 7839 30
7782 CLARK MANAGER 09-06-1981 2450 7839 10
7788 SCOTT ANALYST 09-12-1982 3000 7566 20
7839 KING PRESIDENT 17-11-1981 5000 10
7844 TURNER SALESMAN 08-09-1981 1500 0 7698 30
7876 ADAMS CLERK 12-01-1983 1100 7788 20
7900 JAMES CLERK 03-12-1981 950 7698 30
7902 FORD ANALYST 03-12-1981 3000 7566 20
7934 MILLER CLERK 23-01-1982 1300 7782 10

Отследим цепочку начальников Смита. Его непосредственный начальник имеет табельный номер 7902. Это аналитик Форд. Его начальник с табельным номером 7566 —менеджер Джонс, а у того начальник — президент Кинг с табельным номером 7839.

В таблице emp удалось записать иерархическую структуру организации, связывая строки через значения столбцов empno и mgr.

Для поиска непосредственных начальников каждого сотрудника достаточно написать простой запрос: proj E1.ENAME ПОДЧИНЁННЫЙ, E2.ENAME НАЧАЛЬНИК (join E1.MGR=E2.EMPNO (EMP E1, EMP E2)). Записи вида E1.ENAME ПОДЧИНЁННЫЙ, EMP E1 означает переименование E1.ENAME в ПОДЧИНЁННЫЙ, EMP в E1.

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

Чтобы рекурсия была возможна, язык запросов должен был позволить повторение соединения каждого построенного отношения с исходным до тех пор, пока не найдется сотрудник, не имеющий начальника. Этого язык реляционной алгебры делать не позволяет. Однако в поздних версиях языка SQL, который мы будем изучать в следующей главе, рекурсивные запросы возможны.