Модели и смыслы данных в Cache и Oracle

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

Разбить на страницы
Показывать лекцию целиком

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

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

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

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

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

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

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

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

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

    7.2 Понятие исчисления. Свойства исчислений

    В соответствии с общими понятиями семиотики будем выделять синтаксис (способ записи чего-либо), семантику (смыслы) и прагматику (способы употребления). Эта трехчастная конструкция называется треугольником Фреге. Заметим, что насыщение баз данных смыслами мало изучено, но может представлять большой интерес как для практики, так и для обучения.

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

    7.2.1 Логические исчисления

    Определение. Исчисление — это "дедуктивная система, т.е. способ задания множества путем указания исходных элементов (аксиом исчисления) и правил вывода, каждое из которых описывает, как строить новые элементы из исходных и уже построенных. Выводом в исчислении G называется такое линейно упорядоченное множество, что всякий его элемент Р является либо аксиомой исчисления G, либо заключением применения какого-либо принадлежащего О правила вывода, причем все посылки этого применения предшествуют Р в выводе".

    Дедуктивной называют систему, в которой работает дедуктивный вывод.

    Исчисление высказываний изучает логические связи между высказываниями, рассматриваемыми как единое целое, без учета их строения. Значений истинности два. Третье значение истинности "полуистинно-полуложно" (или значение "не знаю"), связанное с NULL, здесь не используется.

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

    7.2.2 Алгебра множеств и логика

    Когда вы будете пытаться понять разницу в эффективности языков, основанных на исчислениях и на реляционной алгебре, обратите внимание на то, что в школьной математике принято допускать одну неточность. Операции над множествами и логические операции там часто иллюстрируют на примере линейно упорядоченных множеств. То есть работают с интервальными, а не произвольными множествами. Потому операции над множествами и эквивалентные операции над соответствующими предикатами, по сути, совпадают, точнее, находятся во взаимно-однозначном соответствии.

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

    7.2.3 Предикаты

    Исчисление высказываний не позволяет оперировать обобщенными утверждениями, содержащими переменные. Этот недостаток устраняется использованием предикатов.

    Определение. Предикат $$P(X_1,\dots,X_n)$$ —это утверждение $$Р$$ об объектах $$X_1,\dots,X_n$$.

    Сами объекты $$X_1,\dots,X_n$$могут рассматриваться как переменные, означивая которые мы получаем из предиката высказывания с разными значениями истинности. Можно понимать предикат как функцию в множество значений истинности $$\{0,1\}$$. Примеры:

  • Высказывание: погода (вторник, дождь).
  • Предикат: погода $$(D, W)$$.
  • Здесь "погода" — предикатный символ (предикат); $$D$$ и $$W$$ — переменные; "вторник", "дождь" — константы.

    Одноместные предикаты обозначают свойства (например, "быть человеком"), предикаты двухместные и с большей арностью обозначают отношения и операции. Пример: двухместный предикат "выше, чем".

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

    Кванторы

    Широко используются:

  • квантор всеобщности $$\forall$$ — "для всех".
  • квантор существования $$\exists$$ — "существует".
  • Реже употребляется: сильный квантор существования $$\exists !$$ - "существует единственный". Примеры:

  • $$\forall X ~ X+1>X$$
  • $$\exists X ~ X/2=4$$
  • $$\exists !X ~ X/2=4$$
  • Переменная, на которую навешен квантор, называется связанной. Например, в формулах $$\forall X (X=Y)$$ и $$\exists X (X=Y)$$ переменная $$X$$ связана, а $$Y$$ свободна.

    7.2.4 Понятие исчисления

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

    Кроме знаков ничего нет — никаких смыслов. Но исчисление может быть интерпретировано. И вот тогда появляется семантика.

    Исчисление состоит из:

  • набора символов, образующих алфавит (символ —не обязательно буква, например, слово);
  • набора правильно построенных формул — ППФ (well-formed formulas — WFF);
  • выделенного подмножества правильно построенных формул, называемых аксиомами;
  • правил вывода, определяющих способ получения формул из других формул.
  • Выделяют логические аксиомы, определяющие базовую логику. Специфика теории может потребовать добавления нелогических аксиом.

    Мы будем рассматривать исчисления с конечным алфавитом, конечным числом аксиом и формулами конечной длины.

    Правила вывода

    Используются, в частности, следующие правила вывода:

  • modus ponens (правило отделения): Если $$А$$ и $$A\Rightarrow B$$— истинны, то выводимо $$В$$.
  • modus tollens: Если $$A\Rightarrow B$$ истинно и $$В$$ — ложно, то выводимо —$$\rceil А$$.
  • Формальное доказательство формулы $$А$$ в исчислении — это построение конечной последовательности формул $$A_1, A_2,\dots,A_n$$, причем, $$А = А_n$$. Каждая из формул $$A_i$$ этой цепочки либо аксиома, либо получена из других формул с помощью правил вывода. $$А$$ называется теоремой. С помощью символа "доказуемо" $$\vdash$$ запишем этот факт как $$\vdash А$$.

    Свойства исчисления

    Определяющими свойствами любого исчисления являются полнота и непротиворечивость.

    Определение (Полнота). Формальная теория называется полной, если для любого высказывания А логики предикатов или $$\vdash A$$ или $$\vdash\urcorner A$$

    Определение (Непротиворечивость). Формальная теория называется непротиворечивой, если формула $$A\\urcorner A$$ в ней недоказуема для произвольного высказывания А теории.

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

    7.2.5 Языки запросов, основанные на логических исчислениях

    Реляционная алгебра определяет набор операций, комбинируя которые, можно создать отношение, которое представляет ответ на запрос.

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

    Знания только реляционной алгебры даже для практики недостаточно, потому что два наиболее известных языка для работы с реляционными базами данных — SQL (Structured Query Language) и QBE (Query-by-Example) — основаны, соответственно, на реляционных исчислениях на кортежах и доменах.

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

  • язык реляционной алгебры служит своеобразным эталоном для языков запросов к реляционной базе данных;
  • вторая причина в том, что современные языки, предназначенные для работы с базами данных, не удается сделать достаточно мощными, используя единственную математическую модель; так, в SQL реляционной модели данных соответствуют только очень простые запросы.
  • Определение. Язык запросов к базе данных, способный моделировать реляционную алгебру, обладает свойством реляционной полноты. Используемые в практике языки сверхполны, то есть кроме реляционных запросов, они позволяют делать много чего еще. Понятно, что реляционно-неполные языки интереса не представляют.

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

    7.3 Исчисление высказываний

    Определение. Высказывание — это утверждение, которое имеет однозначно определенное значение истинности. Высказывание в логике предикатов — это формула, все переменные которой связаны кванторами.

    Заметьте, что нас по-прежнему не волнует смысл. Иначе говоря, исчисление дает форму, в которой могут быть сделаны правильные выводы, то есть утверждает, что из набора ППФ можно (или нельзя) построить заданную ППФ. И ничего более.

    Определение. Символы исчисления высказываний — это символы высказываний А,В,С, ..., символы значений истинности Т,_1_ и символы логических связок $$\vee$$,$$\$$, $$\urcorner$$, $$\Rightarrow$$.

    Определение. Правильно построенные формулы (ППФ):

  • символ высказывания или значения истинности есть ППФ;
  • отрицание ППФ есть ППФ;
  • конъюнкция и дизъюнкция ППФ есть ППФ;
  • импликация одной ППФ в другую ППФ есть ППФ.
  • Системы аксиом исчисления высказываний (например, аксиоматика Кли-ни) хорошо исследованы, но мы их не рассматриваем, так как не будем строить доказательства, исходя из выбранной системы аксиом.

    7.4 Исчисление предикатов

    7.4.1 ППФ в исчислении предикатов

    Логика высказываний расширяется до логики предикатов путем включения в формулы утверждений, являющихся предикатами. Естественно, появляются и предикатные переменные. Поэтому определение ППФ усложняется.

    Определение (Терм).

  • переменные $$X_1,\dots,X_n$$ и константы $$C_1,\dots,C_m$$— это термы;
  • если $$f(\cdot,\dots,\cdot)$$ — функция $$n$$ переменных, ставящая в соответствие изучаемым объектам другой объект, и $$t_1,\dots,t_k$$ —термы, то $$f(t_1,\dots,t_k)$$—терм;
  • Определение (Формула).

  • если $$P(\cdot,\dots,\cdot)$$— $$n$$-местный предикат, а $$t_1,\dots,t_n$$— термы, то $$P(t_1,\dots,t_n)$$— (атомарная) формула;
  • если $$А$$ и $$В$$ — формулы, то $$A\B$$, $$A\vee B$$, $$A\Rightarrow B$$ — формулы;
  • если $$А$$ — формула, то $$\rceil A$$ — формула;
  • если $$А(Х)$$ — формула, содержащая переменную $$X$$, то$$\forall X A(X)$$, $$\exists X A(X)$$ — формулы.
  • 7.4.2 Замечание о функциональных символах

    При внимательном прочтении приведенного выше определения терма должны возникнуть вопросы:

  • Чем функциональный символ отличается от предикатного символа?
  • А зачем вообще нужны функциональные символы?
  • Ответ на первый вопрос: $$n$$-местный предикат на множестве $$М$$ задает отображение$$M^n\to \{\top,\bot\}$$, а $$n$$-местная функция определяет отображение$$M^n\to M$$.

    Ответ на второй вопрос: 0-местная функция $$M^0\to M$$ отождествляется с элементом множества $$М$$. Не всегда удобно иметь отдельный символ для каждого элемента множества $$М$$. Функциональные символы позволяют дать более сжатое представление. Например, фраза естественного языка "моя левая нога" может пониматься как существование левой ноги у субъекта "Я" и записываться как функция "ЛеваяНога(Я)", что позволяет не именовать по отдельности левые ноги всех людей.

    Учтите, что за определенной таким образом функцией не предполагается никакой процедуры ее вычисления.

    7.4.3 Определение узкого исчисления предикатов

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

    Определение. Символы исчисления предикатов — это символы переменных, констант, функций и предикатов, символы значений истинности $$\top,\bot$$ , символы логических связок $$\vee ,\, \urcorner, \Rightarrow$$ и кванторы общности $$\forall$$ и существования $$\exists$$.

    Правильно построенные формулы и входящие в них термы определены выше. Набор аксиом включает аксиомы исчисления высказываний и следующие дополнительные аксиомы:

  • $$\forall X A(X)\Rightarrow A(t)$$
  • $$A(t)\Rightarrow\existsxA(x)$$, где $$t=t(x_1,\dots,x_n)$$ - терм и в формуле A нет кванторов $$\forall xi,\exists xi,(i-1,\dots,n)$$
  • Дополнительные правила вывода:

  • Если $$B\Rightarrow A(x)$$, то $$B\Rightarrow \forallxA(x)$$
  • Если $$A\Rightarrow B(x)$$, то $$\forallxA(x)\Rightarrow B$$.
  • К дополнительным правилам вывода относят еще "исключение ", "введение " и "универсальное инстанцирование".

    Определение. "Исключение " —это вывод истинности обоих конъюнктов $$А$$ и $$В $$из истинности $$А\В$$.

    Определение. "Введение " — это вывод истинности $$А\В$$ из истинности обоих конъюнктов А и В.

    Определение (Правило универсального инстанцирования). Если любую переменную, стоящую под квантором всеобщности, заменить на любой терм из области определения, то полученное выражение истинно. Например, если терм А принадлежит той же области определения, что $$X$$, и $$\forall XP(X)$$, то выводимо $$Р(А)$$.

    7.4.4 Порядок исчисления предикатов

    Исчисление первого порядка: В исчислении первого порядка можно связывать знаком квантора только переменные, но не функции или предикаты.

    Исчисление высших порядков: В исчислении предикатов высших порядков можно связывать знаком квантора не только переменные, но и функции и предикаты.

    Пусть требуется найти отношение, в котором имеется заданный атрибут $$SAL$$. Это запрос в логике второго порядка. Ему соответствует формула:

    $$\exists Р ~ (SAL~ есть предикатная переменная в Р)$$

    в которой квантор навешен на имя предиката Р.

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

    Прикладное исчисление предикатов: В такое исчисление введены дополнительные знаки констант, функций, операций, предикатов и дополнительные аксиомы, связывающие эти новые знаки.

    Пример: Исчисление предикатов с равенством.

    7.5 Реляционное исчисление предикатов на кортежах

    В реляционном исчислении на кортежах (Tuple Relation Calculus — TRC) правильные формулы строятся как описания условий, которым должны удовлетворять кортежи, образующие искомые отношения. Эти условия в простейшем варианте имеют вид: $$\{t|P(t)\}$$. Здесь $$t$$ — переменная, обозначающая некоторый кортеж, а $$Р(t)$$ —предикат. Формула исчисления кортежей описывает множество всех таких кортежей, для которых предикат принимает значение "истина". Общий вид правильно построенных формул исчисления на кортежах приведен в разделе 7.5.5.

    7.5.1 Состав предиката Р(i) в исчислении на кортежах

    Элементарными образующими предиката $$Р(t) $$являются атомы трех видов — переменные кортежи, отношения между кортежами и отношения между кортежем и константой. Опишем их:

  • Переменные кортежи: $$t\in R$$, где $$r$$— отношение. Данный атом имеет значение "истина", если кортеж $$t$$ принадлежит отношению $$r$$. При этом если отношение имеет схему $$R$$, то и кортеж $$t$$ имеет такую же схему.
  • Специфика реляционного исчисления на кортежах в том, что элементы рассматриваемого множества — это кортежи, которые обязательно принадлежат некоторым отношениям. И переменные в нем — это переменные кортежи.
  • Пример: Пусть отношение СОТРУДНИК имеет схему {ИМЯ, ФАМИЛИЯ, ОТЧЕСТВО, ВОЗРАСТ}. Утверждение $$t\in$$ СОТРУДНИК, означает, что $$t$$ является кортежем отношения СОТРУДНИК, и имеет ту же схему: {ИМЯ, ФАМИЛИЯ, ОТЧЕСТВО, ВОЗРАСТ}.
  • Отношения между кортежами (записываются в точечном синтаксисе): $$s.A\Theta t.B$$, где $$s$$ и $$t$$ — некоторые кортежи, $$А$$ и $$В$$ — имена атрибутов, $$S$$ и $$R$$ — множества атрибутов, причем $$A\in R$$ и$$B\in R$$, а $$\Theta$$ — оператор сравнения. Этот атом принимает значение "истина", тогда и только тогда, когда атрибут $$А$$ кортежа $$s$$ находится в отношении $$\Theta$$ с атрибутом $$В$$ кортежа 1 Например, если $$s,t\in$$ СОТРУДНИК, то $$s$$.ВОЗРАСТ < $$t$$.ВОЗРАСТ истинно, если возраст сотрудника s меньше возраста сотрудника .
  • Отношения между кортежем и константой: $$s.A\Theta c$$, где $$s$$ — некоторый кортеж, $$A$$ — имя атрибута ( $$A\in S$$ ), а $$c$$ — константа из домена атрибута $$A$$ . Атом принимает значение "истина", если значение атрибута кортежа находится в отношении $$\Theta$$с константой $$c$$. Например, $$s$$.ВОЗРАСТ < 40 истинно, если возраст сотрудника $$s$$ меньше 40.
  • 7.5.2 Правильно построенные формулы исчисления на кортежах

    Могут использоваться логические операции, кванторы и скобки. Рекурсивное определение правильно построенных формул:

  • Атом — это ППФ.
  • Если $$Р$$ и $$Q$$ — ППФ, то $$P\vee Q, ~P\Q,~\urcorner P$$ будут ППФ.
  • Если $$Р$$ — ППФ, то $$\exists X ~P(X)$$ — ППФ.
  • Если $$Р$$ — ППФ, то $$\forallX ~ P(X)$$ — ППФ.
  • Если $$Р$$ — ППФ, то $$(Р)$$ - ППФ.
  • Ничто иное не является ППФ.
  • Замечание. Квантор существования в инструментальном средстве WinRDBI обозначается как EXISTS, квантор всеобщности как FORALL.

    7.5.3 Сопоставление операторов реляционной алгебры и формул исчисления на кортежах

  • Объединение: $$R\cup S=\{t|t\in R\vee t\in S\}$$
  • Разность: $$R-S=\{t|t\in R\(\urcorner(t\in S))\}$$
  • Селекция: $$sel_F(R)=\{t|t\in R\F\}$$
  • Здесь $$R$$ и $$S$$ — отношения, $$F$$ — формула.

    7.5.4 О реляционной полноте языка запросов

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

  • включения арифметики и вычисления однострочных функций;
  • включения агрегатных (многострочных) функций;
  • иногда за счет вычисления транзитивного замыкания отношения.
  • 7.5.5 Синтаксис запросов TRC в WinRDBI

    Запрос (ППФ) имеет вид: $$\{t_1,\dots,t_n|F(t_1,\dots,t_n)\}$$, где $$F$$ — формула исчисления, а$$t_1,\dots,t_n$$ — кортежные переменные, действующие как глобальные переменные в $$F$$ и определяющие схему результата.

    Обозначим $$t$$ и $$t_i$$ — переменные кортежи, $$a_j$$ — атрибут, $$с$$ — константа уровня домена, $$\vartheta$$ — оператор сравнения. Тогда атомами будут: $$r(t),~t_{i\cdot}a_m\vartheta t_{j\cdot}\varthetac$$. Пусть $$F,~F_1,~F_2$$ — формулы. Тогда формулами будут: $$(F),~ not F,~ F_1$$ and $$F_2,~ F_1~ or~ F_2$$. Если $$t$$ свободна (переменная свободна в формуле, если она не квантифицирована действием exists или forall) в $$F(t)$$, то формулами будут $$(\exists t) F(t),~ (\forall t) F(t)$$.

    7.5.6 Реляционная полнота реляционного исчисления на кортежах

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

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

    Сравнение реляционной алгебры и исчисления на кортежах
    Реляционная алгебра Реляционное исчисление на кортежах
    $$sel_{condition}(R)$$ $$\{r|R(r)~and~condition\}$$
    $$proj\{a_i,\dots,a_j\}(R)$$ $$\{R_{\cdot}a_i,\dots,R_{\cdot}a_j|R(r)\}$$
    $$R\cup S$$ $$\{t|R(t)~or~S(t)\}$$
    $$R-S$$ $$\{t|R(t)~and~not~S(t)\}$$
    $$Q\times R$$ $$\{q,r|Q(q)~and~R(r)\}$$

    Рассмотрим несколько примеров.

    7.5.7 Примеры запросов в исчислении на кортежах

    Войдите в WinRDBI, откройте базу empTraining.rdb и файл empTrain-ing.trc с набором запросов в исчислении на кортежах (рисунок 7.1).

    (рис 7.1) Примеры запросов в исчислении на кортежах

    Все запросы имеют единую структуру вида {ti,... ,tn\F (ti,...,tn)}. Разберитесь с десятком примеров, особенно сложных, помещенных в конце списка в правом окне.

    Обратите внимание на создание новых отношений (рисунок 7.2), и соединения отношений, например, в запросе "Какие курсы предлагаются в области баз данных?" (рисунок 7.3).

    (рис 7.2) Создание нового отношения по данным существующих отношений (рис 7.3) Соединение отношений technologyArea и trainingCourse

    Как вы помните, (exists A) это квантор существования.

    7.6 Реляционное исчисление на доменах

    В реляционном исчислении на доменах (Domain Relational Calculus — DRC) область определения переменных не кортежи отношения, а набор доменов.

    Отношение состоит из кортежей, в которые входят значения, принадлежащие доменам. Поэтому необходимо как-то показывать, что некоторые значения на доменах входят в один кортеж. С этой целью в исчисление на доменах, в отличие от исчисления на кортежах, вводится дополнительный набор предикатов, выражающих условия принадлежности (доменов кортежу).

    Пусть $$r$$—это $$n$$-арное отношение с атрибутами $$A_1,A_2,\dots,A_n$$. Тогда условие принадлежности можно записать так: $$r(A_{i_1}:V_{i_1},A_{i_2}:V_{i_2},\dots,A_{i_m}:V_{i_m}$$, где $$V_{i_j}$$ - это либо константа, либо имя доменной переменной.

    Условие принадлежности истинно тогда и только тогда, когда в отношении г существует кортеж, содержащий заданные значения $$V_{i_j}$$ указанных $$j$$-тых атрибутов кортежа $$r$$, то есть $$A_{i_j}$$.

    Если $$V_{i_j}$$— константа, то условие на атрибут$$A_i$$. зависит от текущих значений доменных переменных; если же $$V_{i_j}$$— имя доменной переменной, то условие принадлежности может принимать разные значения истинности при разных значениях этой переменной.

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

    Сравните форму записи запроса в исчислении на доменах $$\{d_1,\dots,d_n|F(d_1,\dots,d_n)\}$$ и аналогичную форму для исчисления на кортежах $$\{t_1,\dots,t_n|F(t_1,\dots,t_n)\}$$.

    7.6.1 Синтаксис запросов DRC в WinRDBI

    Запрос имеет вид: $$\{d_1,\dots,d_n|F(d_1,\dots,d_n)\}$$, где $$F$$ — формула исчисления, а $$d_1,\dots,d_n$$ — доменные переменные, действующие как глобальные переменные в и определяющие схему результата.

    Результатом запроса DRC будет множество всех образованных кортежей$$\{d_1,\dots,d_n\}$$, для которых формула $$F$$ истинна.

    Обозначим: $$d_i$$ — переменная-домен, $$с$$ — константа уровня домена, $$\vartheta$$ — оператор сравнения. Тогда атомами будут: $$r(d_1,d_2,\dots,d_n),~d_i\vartheta d_j, ~d_i\vartheta $$.

    Пусть $$F,~F_1,~F_2$$ — формулы. Тогда формулами будут: $$(F),~ not~ F,~ F_1~ and~F_2,~ F_1~ or~ F_2$$. Если $$d$$ свободна (свободная переменная не квантифицирована действием $$\exists$$ или $$\forall$$) в $$F(d)$$, формулами будут $$(\exists d)F(d)$$, $$(\forall d)F(d)$$.

    7.6.2 Реляционная полнота реляционного исчисления на доменах

    Как в исчислении на кортежах, для доказательства достаточно выразить операции реляционной алгебры через операции исчисления. Обозначим условия принадлежности через $$R(r_1,\dots,r_n)$$. Сведем представления в таблицу 7.3.

    Сравнение реляционной алгебры и исчисления на доменах
    Реляционная алгебра Реляционное исчисление на доменах
    $$sel_{condition}(R)$$ $$\{r_1,\dots,r_n|R(r_1,\dots,r_n)~and~condition\}$$
    $$proj\{a_i,\dots,a_j\}(R)$$ $$\{r_1,\dots,r_n|R(r_1,\dots,r_n)\}$$
    $$R\cup S$$ $$\{d_1,\dots,d_n|R(d_1,\dots,d_n)~or~S(d_1,\dots,d_n)\}$$
    $$R-S$$ $$\{d_1,\dots,d_n|R(d_1,\dots,d_n)~and~not~S(d_1,\dots,d_n)\}$$
    $$Q\times R$$ $$\{q_1,\dots,q_m,r_1,\dots,r_n|Q(q_1,\dots,q_mn)~and~R(r_1,\dots,r_n)\}$$

    7.6.3 Примеры запросов в исчислении на доменах

    Войдите в WinRDBI, откройте базу empTraining.rdb и файл empTrain-ing.drc с набором запросов в исчислении на доменах. Форма записи запроса в исчислении на доменах

    $$\{d_1,\dots,d_n|F(d_1,\dots,d_n)\}$$

    похожа на аналогичную форму для исчисления на кортежах

    $$\{t_1,\dots,t_n|F(t_1,\dots,t_n)\}$$,

    но формула исчисления на доменах обязательно содержит условие приадлежности домена кортежу. Пример запроса:

    qSelection :=
    { EID, ELast, EFirst, ETitle, ESalary | employee(EID, ELast, EFirst, ETitle, ESalary) and ESalary > 100000 };
    

    Переменные EID, ELast, EFirst, ETitle, ESalary доменные, а employee(EID, ELast, EFirst, ETitle, ESalary) — условие связи.

    В следующем запросе takenCourse :={ EID | akes(EID, _, _, _, _)}; перед вертикальной чертой упомянута только одна доменная переменная. Поэтому в условии соединения знаками подчеркивания пришлось отметить остальные "безразличные" переменные. Запрос "Какие курсы предлагаются в области баз данных?", в котором предлагается вывести атрибуты cID, cTitle, cHours, дает пример соединения (рисунок 7.4

    (рис 7.4) Соединение отношений technologyArea и trainingCourse

    Сравните его с эквивалентным запросом в исчислении на кортежах (рисунок 7.3)

    7.7 Запросы, основанные на реляционной алгебре и на исчислениях

    Результат выполнения любой операции алгебры — это элемент базисного множества. В случае реляционной алгебры - отношение. Ранее было показано, что соединение двух отношений выполняется через декартово произведение, то есть сначала выполняется декартово произведение, а потом на нем выполняется операция селекции. На практике, если таблицы большие, то результата такого запроса придется ждать очень долго. Поэтому от реализации реляционной алгебры отказались очень давно.

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

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

    7.8 Гипотеза Сепира-Уорфа и искусственные языки

    Как отличить математика от нематематика? Показывая на север, вы спрашиваете, можно ли попасть в точку расположенную от вас на юге. Тот, кто скажет "можно", и будет математик. А кто такой лингвист? Это человек, который сначала учится говорить на языке, а потом понимать его.

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

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

    Рассмотрим используемые нами искусственные языки с точки зрения лингвистики естественных языков.

    Давно известна гипотеза Сепира-Уорфа, сформулированная, конечно, для естественных языков. Процитируем Уорфа: "Мы выделяем в мире явлений те или иные категории и типы совсем не потому, что они (категории и типы) самоочевидны; напротив, мир предстает перед нами как калейдоскопический поток впечатлений, который должен быть организован нашим сознанием, а это значит — в основном, языковой системой, хранящейся в нашем сознании. . . Мы сталкиваемся, таким образом, с новым принципом относительности, который гласит, что сходные физические явления позволяют создать сходную картину вселенной только при сходстве или, по крайней мере, при соотносительности языковых систем".

    Все, что мы можем выразить в языке, является отображением каких-то мысленных структур, связанных с языком. И ничего с этим поделать нельзя. Первая работа Сепира была сделана на материале языков у американских индейцев, у которых нет понятия "отрезок времени". То, что мы называем отрезком времени, для них — процесс. Они четко знают, что есть некая подготовка к действию, совершение действия, что-то после этого действия следует. Они не могут сказать "через три дня", а только "прожив три дня". Наш отрезок времени для них — это процесс, и его нужно каким-то образом пройти. Все мы находимся в плену тех языков, которыми мы владеем. Если индейцы с их языками показались вам примитивными, вспомните, как трудно было после школьного Бейсика осваивать функциональное и логическое программирование. Как сказала одна моя студентка: "Пролог хороший язык, но если бы в него еще добавили циклы!"

    По-видимому, гипотеза Сепира-Уорфа в полной мере применима к искусственным языкам. Прежде всего, мы работаем в рамках терминосистем используемых языков программирования и предметной области, которые не всегда четко фиксируются и имеют наклонность меняться со временем. Вы думаете, что русский крестьянин 200 лет тому назад, не смог бы объяснить что такое самолет? "Да это такая лодка, которая крепится под углом к течению, на колесиках к тросу натянутому поперек реки. Она без усилий человека сама идет на другой берег. Потому и называется самолет".

    Термин "язык" воспринимается по-разному в компьютерных науках и в лингвистике. В искусственных языках изучаются в первую очередь синтаксис и прагматика, то есть способ употребления. Смыслами данных занимаются не слишком активно. Как вы увидите позже, семантика недостаточно отражается в базах данных, даже если используются модели, названные в главе 2 семантическими. Необходимы усилия для того, чтобы обогатить базу данных смыслами и создать программное обеспечение, которое эти смыслы воспринимает.

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

    Заметим, что все естественные языки (ЕЯ) —это наивные модели почти одного и того же окружающего нас мира. Естественно, есть нюансы, определяемые условиями обитания. Естественный язык живет, пока живут его носители и сохраняется их образ жизни. Существует понятие "вмещающая среда". Для естественных языков - это люди, книги, аудио- и видеозаписи, компьютеры и т.д.

    Естественные языки складывались в процессе длительной эволюции.

    Искусственные языки (ИЯ) существенно отличаются от естественных по происхождению и вмещающей среде, зачастую предполагающей в качестве носителей языка кроме человека еще и компьютер. Сфера их применения существенно уже. Именно поэтому несколько ИЯ часто используются совместно.

    Из всех функций ЕЯ в ИЯ в полной мере развита только коммуникативная. Не нужна, естественно, экспрессивная функция (выражение эмоций). Недостаточно развита аккумулятивная функция, обеспечивающая сохранение опыта и знаний или способ обозначения своей идентичности. Обычно, "поговорив" с машиной, мы не можем изменить лексику языка, на котором она с нами общается. В настоящее время знания в базах данных, как правило, не создаются машиной и не аккумулируются. В языках баз данных нет запросов, использующих знания, характерные для предметной области. Например, мы не можем написать запрос на поиск лошадиных фамилий, как в рассказе Чехова "Лошадиная фамилия", в котором персонаж пытается вспомнить фамилию, относящуюся к лошадям, и в самом конце он вспоминает ее — Овсов. Заметим, что использование онтологий уже позволяет решить эту задачу. Подключив онтологии к базам данных, можно формировать необычные запросы, учитывающие не только данные базы, но и их смыслы. Если, например, запрос возвращает пустой ответ, то, может быть, иногда имеет смысл, исходя из семантики задачи, изменить условия запроса и добиться содержательного ответа?

    В искусственных языках почти не используется конструктивная функция ЕЯ, которую в контексте ИЯ можно рассматривать как функцию формирования знаний. Например, есть таблицы, в них есть строки определенного формата. А как в базу внести строчку формата, которого нет? Вообще говоря, никак. Даже если заменить вставку строки на команду создания отношения, своего для каждой такой строки, то необходимо сначала выяснить их смысл и определить, что с ними потом делать?

    7.8.1 Сочетание двух языков

    Существуют смешанные языки программирования, в которых один язык встраивается в другой. Типичный пример — серверные страницы (ASP, JSP, CSP), в которых в текст на одном языке, например HTML, можно вставлять скриптлеты — тексты на другом языке.

    В листинге 7.1 показан пример серверной страницы JSP (Java Server Pages). Вмещающий текст написан на HTML, а вставки (выражения, скрипт-леты, объявления) — на Java. Выражение вставляет вычисляемое значение непосредственно в формируемую HTML-страницу. Скриптлет дает часть кода для формируемого метода серверной страницы. Основной язык баз данных табличного или реляционного типа — SQL — с самых первых стандартов предполагался встраиваемым в другие языки: C, Алгол, Кобол, Java и т.д.

    <HTML>
    <HEAD>
    <TITLE>Пример JSP</TITLE>
    </HEAD>
    <BODY>
    <H2>Выражение и скриптлет JSP</H2>
    <UL>
    <LI>Дата и время: <%= new java.util.Date() %></LI>
    <LI><%
    java.util.Date hDate = new java.util.Date();
    out.println("Дата и время:"+hDate);
    %></LI>
    </UL>
    </BODY>
    </HTML>
    

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

    Основные особенности ИЯ, отличающие их от ЕЯ:

  • ИЯ конструируются эксплицитно (явно), а не складываются в процессах деятельности и общения носителей языка.
  • ИЯ не могут получать информацию, не имеющую заранее подготовленного шаблона, не могут соотносить ее с уже имеющейся информацией. ИЯ не поддерживают метафорического мышления. В базах данных можно задать только четкий вопрос. То есть можно найти Иванова, но найти людей, в каком-то смысле похожих на Иванова нельзя. Правда, для этого существуют информационно-поисковые системы (ИПС), но пока что с задачей они справляются плохо. Так что и в базах, и в ИПС нужны существенные усовершенствования.
  • Носители ИЯ качественно неоднородны — человек "с улицы", человек специалист предметной области, человек программист, машина с определенным программным обеспечением и т.д. Выделенные группы также неоднородны. Например, два программиста, работающих с разными объектными языками, не обязательно понимают одинаково все термины объектной технологии.
  • Обилие невербальных языков и невербальных компонентов ИЯ. Пример языка с вербальной и невербальной компонентой - Query-by-Example, описанный далее в главе 9. Широко применяется встраивание одного вербального языка в другой.
  • Одновременное использование нескольких языков, своих для каждой модели данных или вида деятельности. Например, создаете интерфейс на Java, по анализу данных выходите в правила на языке Jess, а результаты их работы передаете обратно в Java.
  • Ограничения на графические языки, вызванные особенностями восприятия и распознавания образов человеком. Известна статья "Волшебное число 7 ± 2", в которой показано, что человек способен одновременно работать с примерно семью кластерами информации — от пяти до девяти в зависимости от способностей человека.
  • В языках специфичных для предметной области DSL (Domain Specific Language), в системах управляемых моделями MDA (Model Driven Architecture) может сужаться область применения языка а, значит, и число его "носителей". В MDA предполагается существование некоторого универсального интерпретатора. Достаточно разработать модель информационной системы, а интерпретатор обеспечит работу приложения. С одной стороны, это эффективный способ повышения уровня языка разработки. С другой стороны, специфичность языка моделирования может определить узость применения.

    Опыт показывает, что если язык или среда разработки используется мало, то он, как минимум, плохо развивается. Например, Eclipse нравится очень многим программистам, и поэтому в 2008 году под Eclipse насчитывалось 1090 утвержденных плагинов, беспрецедентно увеличивших его возможности.

    7.8.2 Когнитивное направление в науке

    Когнитивизм — это направление в гуманитарной науке, изучающее знание и познание, восприятие мира в процессе деятельности людей, причем ". . . исследуются не просто наблюдаемые действия, а их ментальные репрезентации (внутреннее представление модели), символы, стратегии человека, которые и порождают действия на основе знаний". Иначе говоря, вы можете одно и то же показать в разных формах — в одних это понятно, в других требует какого-то обдумывания, размышления.

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

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

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

    привязать вводимые понятия к уже имеющимся понятиям, а потом их развивать. Следует помнить, что мы создаем приложения, с которыми работают человек и компьютер. Поэтому нужно заботиться не только о компьютере (быстродействие, память, надежность и т.п.), но и о человеке. Человек — самое слабое звено в работе и в процессе создания информационных систем. Если форма представления модели, языка или интерфейса не когнитивна, т.е. с ней в вашем мышлении ничего не связано, то вы многого не понимаете. Очевидно, все, что показывают человеку в интерфейсе, должно быть "схвачено" им, должно работать образное восприятие. Скажем, таблица для человека — это, прежде всего, некий образ, воспринимаемый на уровне подсознания, гештальт.

    7.9 Языки, используемые для создания информационных систем

    Обилие языков, используемых для создания информационных систем (ИС), объясняется, прежде всего, сложностью этих систем. Приходится создавать несколько типов моделей так, чтобы каждая из них отражала только некоторые особенности систем. Это делает модели доступными человеку, когнитивными. На рисунке 7.7 обозначено семь штук моделей баз данных. При желании к ним можно добавить еще полуструктурированную и другие модели. Интерфейсы пользователя и данные, хранящиеся в памяти, для представления нуждаются в своих моделях данных. В распределенных системах необходимо моделировать интерфейсы обмена данными. В больших, особенно неоднородных системах, появились онтологии. Они позволяют сохранить и повторно использовать часть знаний, описывающих предметную область, в том числе систему использованных терминов (терминосистему). Но для представления онтологий необходимы свои модели, например, фреймовая, RDF, OWL. Мы не будем ограничиваться только моделями базы данных, хотя все остальные модели подробно рассматриваться не будут. Это позволит нам рассматривать базы данных как открытые системы, более реалистично представить их роль и место. (Как известно, открытая система не может быть понята до конца, если не учитывается ее взаимодействие с окружающим миром)

    Нетрудно догадаться, что между используемыми моделями должны быть реализованы все необходимые преобразования. Иначе вы не будете уверены, скажем, в том, что сумма $1000, введенная в интерфейсе пользователя, не превратится во что-нибудь другое, если ее записать на диск.

    Учтите, что на рисунке 7.5 представлены далеко не все модели, используемые для описания информационных систем. Нет моделей бизнеса, с которых и начинается проектирование системы.

    (рис 7.5) Модели данных

    Давайте на примере СУБД Oracle представим, сколько языков программирования нужно знать для работы с ИС сейчас и лет 15 назад (таблица 7.4). PL/SQL — это обычное для больших СУБД процедурное расширение языка SQL, a SQL*Plus — небольшой язык терминала, специфичный для Oracle. К скромному списку о шести пунктах, характерному для 90-х годов, в настоящее время добавляются Java, XML и океан связанных с ними языков и технологий. Так, для XML это язык стилей XSL, язык путей XPath, язык схем Schema, RELAX NG, позволяющий посмотреть на одни данные с точки зрения различных грамматик, язык запросов Xquery, язык обмена XMI. В последние годы приходится осваивать еще Ruby и технологии Rails.

    Поскольку Oracle 11 g — это семантическая база данных, добавляются языки представления семантики RDF, OWL и другие. В последнее десятилетие активно разрабатываются и уже начали использоваться языки специфичные для предметной области. Правда, для нас это совсем не новость. При желании можно любые языки для работы с базами данных считать предметно ориентированными.

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

    Языки программирования используемые в информационных системах
    1995 год Сейчас
  • SQL
  • Cache ObjectScript
  • PL\SQL
  • SQL*Plus
  • С++
  • HTML
  • Javascript
  • SQL
  • Cache ObjectScript
  • PL\SQL
  • SQL*Plus
  • С++
  • HTML
  • Javascript
  • Язык Java + технологии
  • XML (XSL, XPath, Schema, RELAX NG, XQuery, XMI)
  • Ruby (+Rails)
  • Языки для представления семантики (RDF,OWL, ...)
  • Языки, специфичные для предметной области (DSL,MDA)
  • Сократить список используемых языков можно, переходя на языки сверхвысокого уровня (по сравнению с сегодняшним уровнем языков четвертого поколения). Есть обоснованное предположение о том, что языки более высокого уровня потребуют использования систем с высоким встроенным интеллектом и развитой семантикой.

    Можно спросить, а зачем мы выходим за рамки языков баз данных, в которых и без того есть что изучать? Причин несколько. Во-первых, языки баз данных могут встраиваться в языки общего назначения. Во-вторых, современные базы чаще всего работают в рамках трехзвенной архитектуры приложений, и некоторые операции могут проводиться на серверах баз данных, другие —на серверах приложений, а какие-то —на клиентской части. Языка, одинаково пригодного для всех этих звеньев, не существует. В-третьих, распределенная база может быть гетерогенной, то есть содержать локальные базы, написанные на разных языках. Необходимо как-то организовать обмен между ними и согласование данных.

    Практически всегда модели данных, используемые в базе, в интерфейсе пользователя и интерфейсах обмена между ИС не совпадают. Поэтому необходимо наладить отображение данных (mapping) между ними.

    Страницы:

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

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

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

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

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

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

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

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

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

    7.2 Понятие исчисления. Свойства исчислений

    В соответствии с общими понятиями семиотики будем выделять синтаксис (способ записи чего-либо), семантику (смыслы) и прагматику (способы употребления). Эта трехчастная конструкция называется треугольником Фреге. Заметим, что насыщение баз данных смыслами мало изучено, но может представлять большой интерес как для практики, так и для обучения.

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

    7.2.1 Логические исчисления

    Определение. Исчисление — это "дедуктивная система, т.е. способ задания множества путем указания исходных элементов (аксиом исчисления) и правил вывода, каждое из которых описывает, как строить новые элементы из исходных и уже построенных. Выводом в исчислении G называется такое линейно упорядоченное множество, что всякий его элемент Р является либо аксиомой исчисления G, либо заключением применения какого-либо принадлежащего О правила вывода, причем все посылки этого применения предшествуют Р в выводе".

    Дедуктивной называют систему, в которой работает дедуктивный вывод.

    Исчисление высказываний изучает логические связи между высказываниями, рассматриваемыми как единое целое, без учета их строения. Значений истинности два. Третье значение истинности "полуистинно-полуложно" (или значение "не знаю"), связанное с NULL, здесь не используется.

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

    7.2.2 Алгебра множеств и логика

    Когда вы будете пытаться понять разницу в эффективности языков, основанных на исчислениях и на реляционной алгебре, обратите внимание на то, что в школьной математике принято допускать одну неточность. Операции над множествами и логические операции там часто иллюстрируют на примере линейно упорядоченных множеств. То есть работают с интервальными, а не произвольными множествами. Потому операции над множествами и эквивалентные операции над соответствующими предикатами, по сути, совпадают, точнее, находятся во взаимно-однозначном соответствии.

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

    7.2.3 Предикаты

    Исчисление высказываний не позволяет оперировать обобщенными утверждениями, содержащими переменные. Этот недостаток устраняется использованием предикатов.

    Определение. Предикат $$P(X_1,\dots,X_n)$$ —это утверждение $$Р$$ об объектах $$X_1,\dots,X_n$$.

    Сами объекты $$X_1,\dots,X_n$$могут рассматриваться как переменные, означивая которые мы получаем из предиката высказывания с разными значениями истинности. Можно понимать предикат как функцию в множество значений истинности $$\{0,1\}$$. Примеры:

  • Высказывание: погода (вторник, дождь).
  • Предикат: погода $$(D, W)$$.
  • Здесь "погода" — предикатный символ (предикат); $$D$$ и $$W$$ — переменные; "вторник", "дождь" — константы.

    Одноместные предикаты обозначают свойства (например, "быть человеком"), предикаты двухместные и с большей арностью обозначают отношения и операции. Пример: двухместный предикат "выше, чем".

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

    Кванторы

    Широко используются:

  • квантор всеобщности $$\forall$$ — "для всех".
  • квантор существования $$\exists$$ — "существует".
  • Реже употребляется: сильный квантор существования $$\exists !$$ - "существует единственный". Примеры:

  • $$\forall X ~ X+1>X$$
  • $$\exists X ~ X/2=4$$
  • $$\exists !X ~ X/2=4$$
  • Переменная, на которую навешен квантор, называется связанной. Например, в формулах $$\forall X (X=Y)$$ и $$\exists X (X=Y)$$ переменная $$X$$ связана, а $$Y$$ свободна.

    7.2.4 Понятие исчисления

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

    Кроме знаков ничего нет — никаких смыслов. Но исчисление может быть интерпретировано. И вот тогда появляется семантика.

    Исчисление состоит из:

  • набора символов, образующих алфавит (символ —не обязательно буква, например, слово);
  • набора правильно построенных формул — ППФ (well-formed formulas — WFF);
  • выделенного подмножества правильно построенных формул, называемых аксиомами;
  • правил вывода, определяющих способ получения формул из других формул.
  • Выделяют логические аксиомы, определяющие базовую логику. Специфика теории может потребовать добавления нелогических аксиом.

    Мы будем рассматривать исчисления с конечным алфавитом, конечным числом аксиом и формулами конечной длины.

    Правила вывода

    Используются, в частности, следующие правила вывода:

  • modus ponens (правило отделения): Если $$А$$ и $$A\Rightarrow B$$— истинны, то выводимо $$В$$.
  • modus tollens: Если $$A\Rightarrow B$$ истинно и $$В$$ — ложно, то выводимо —$$\rceil А$$.
  • Формальное доказательство формулы $$А$$ в исчислении — это построение конечной последовательности формул $$A_1, A_2,\dots,A_n$$, причем, $$А = А_n$$. Каждая из формул $$A_i$$ этой цепочки либо аксиома, либо получена из других формул с помощью правил вывода. $$А$$ называется теоремой. С помощью символа "доказуемо" $$\vdash$$ запишем этот факт как $$\vdash А$$.

    Свойства исчисления

    Определяющими свойствами любого исчисления являются полнота и непротиворечивость.

    Определение (Полнота). Формальная теория называется полной, если для любого высказывания А логики предикатов или $$\vdash A$$ или $$\vdash\urcorner A$$

    Определение (Непротиворечивость). Формальная теория называется непротиворечивой, если формула $$A\\urcorner A$$ в ней недоказуема для произвольного высказывания А теории.

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

    7.2.5 Языки запросов, основанные на логических исчислениях

    Реляционная алгебра определяет набор операций, комбинируя которые, можно создать отношение, которое представляет ответ на запрос.

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

    Знания только реляционной алгебры даже для практики недостаточно, потому что два наиболее известных языка для работы с реляционными базами данных — SQL (Structured Query Language) и QBE (Query-by-Example) — основаны, соответственно, на реляционных исчислениях на кортежах и доменах.

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

  • язык реляционной алгебры служит своеобразным эталоном для языков запросов к реляционной базе данных;
  • вторая причина в том, что современные языки, предназначенные для работы с базами данных, не удается сделать достаточно мощными, используя единственную математическую модель; так, в SQL реляционной модели данных соответствуют только очень простые запросы.
  • Определение. Язык запросов к базе данных, способный моделировать реляционную алгебру, обладает свойством реляционной полноты. Используемые в практике языки сверхполны, то есть кроме реляционных запросов, они позволяют делать много чего еще. Понятно, что реляционно-неполные языки интереса не представляют.

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

    7.3 Исчисление высказываний

    Определение. Высказывание — это утверждение, которое имеет однозначно определенное значение истинности. Высказывание в логике предикатов — это формула, все переменные которой связаны кванторами.

    Заметьте, что нас по-прежнему не волнует смысл. Иначе говоря, исчисление дает форму, в которой могут быть сделаны правильные выводы, то есть утверждает, что из набора ППФ можно (или нельзя) построить заданную ППФ. И ничего более.

    Определение. Символы исчисления высказываний — это символы высказываний А,В,С, ..., символы значений истинности Т,_1_ и символы логических связок $$\vee$$,$$\$$, $$\urcorner$$, $$\Rightarrow$$.

    Определение. Правильно построенные формулы (ППФ):

  • символ высказывания или значения истинности есть ППФ;
  • отрицание ППФ есть ППФ;
  • конъюнкция и дизъюнкция ППФ есть ППФ;
  • импликация одной ППФ в другую ППФ есть ППФ.
  • Системы аксиом исчисления высказываний (например, аксиоматика Кли-ни) хорошо исследованы, но мы их не рассматриваем, так как не будем строить доказательства, исходя из выбранной системы аксиом.

    7.4 Исчисление предикатов

    7.4.1 ППФ в исчислении предикатов

    Логика высказываний расширяется до логики предикатов путем включения в формулы утверждений, являющихся предикатами. Естественно, появляются и предикатные переменные. Поэтому определение ППФ усложняется.

    Определение (Терм).

  • переменные $$X_1,\dots,X_n$$ и константы $$C_1,\dots,C_m$$— это термы;
  • если $$f(\cdot,\dots,\cdot)$$ — функция $$n$$ переменных, ставящая в соответствие изучаемым объектам другой объект, и $$t_1,\dots,t_k$$ —термы, то $$f(t_1,\dots,t_k)$$—терм;
  • Определение (Формула).

  • если $$P(\cdot,\dots,\cdot)$$— $$n$$-местный предикат, а $$t_1,\dots,t_n$$— термы, то $$P(t_1,\dots,t_n)$$— (атомарная) формула;
  • если $$А$$ и $$В$$ — формулы, то $$A\B$$, $$A\vee B$$, $$A\Rightarrow B$$ — формулы;
  • если $$А$$ — формула, то $$\rceil A$$ — формула;
  • если $$А(Х)$$ — формула, содержащая переменную $$X$$, то$$\forall X A(X)$$, $$\exists X A(X)$$ — формулы.
  • 7.4.2 Замечание о функциональных символах

    При внимательном прочтении приведенного выше определения терма должны возникнуть вопросы:

  • Чем функциональный символ отличается от предикатного символа?
  • А зачем вообще нужны функциональные символы?
  • Ответ на первый вопрос: $$n$$-местный предикат на множестве $$М$$ задает отображение$$M^n\to \{\top,\bot\}$$, а $$n$$-местная функция определяет отображение$$M^n\to M$$.

    Ответ на второй вопрос: 0-местная функция $$M^0\to M$$ отождествляется с элементом множества $$М$$. Не всегда удобно иметь отдельный символ для каждого элемента множества $$М$$. Функциональные символы позволяют дать более сжатое представление. Например, фраза естественного языка "моя левая нога" может пониматься как существование левой ноги у субъекта "Я" и записываться как функция "ЛеваяНога(Я)", что позволяет не именовать по отдельности левые ноги всех людей.

    Учтите, что за определенной таким образом функцией не предполагается никакой процедуры ее вычисления.

    7.4.3 Определение узкого исчисления предикатов

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

    Определение. Символы исчисления предикатов — это символы переменных, констант, функций и предикатов, символы значений истинности $$\top,\bot$$ , символы логических связок $$\vee ,\, \urcorner, \Rightarrow$$ и кванторы общности $$\forall$$ и существования $$\exists$$.

    Правильно построенные формулы и входящие в них термы определены выше. Набор аксиом включает аксиомы исчисления высказываний и следующие дополнительные аксиомы:

  • $$\forall X A(X)\Rightarrow A(t)$$
  • $$A(t)\Rightarrow\existsxA(x)$$, где $$t=t(x_1,\dots,x_n)$$ - терм и в формуле A нет кванторов $$\forall xi,\exists xi,(i-1,\dots,n)$$
  • Дополнительные правила вывода:

  • Если $$B\Rightarrow A(x)$$, то $$B\Rightarrow \forallxA(x)$$
  • Если $$A\Rightarrow B(x)$$, то $$\forallxA(x)\Rightarrow B$$.
  • К дополнительным правилам вывода относят еще "исключение ", "введение " и "универсальное инстанцирование".

    Определение. "Исключение " —это вывод истинности обоих конъюнктов $$А$$ и $$В $$из истинности $$А\В$$.

    Определение. "Введение " — это вывод истинности $$А\В$$ из истинности обоих конъюнктов А и В.

    Определение (Правило универсального инстанцирования). Если любую переменную, стоящую под квантором всеобщности, заменить на любой терм из области определения, то полученное выражение истинно. Например, если терм А принадлежит той же области определения, что $$X$$, и $$\forall XP(X)$$, то выводимо $$Р(А)$$.

    7.4.4 Порядок исчисления предикатов

    Исчисление первого порядка: В исчислении первого порядка можно связывать знаком квантора только переменные, но не функции или предикаты.

    Исчисление высших порядков: В исчислении предикатов высших порядков можно связывать знаком квантора не только переменные, но и функции и предикаты.

    Пусть требуется найти отношение, в котором имеется заданный атрибут $$SAL$$. Это запрос в логике второго порядка. Ему соответствует формула:

    $$\exists Р ~ (SAL~ есть предикатная переменная в Р)$$

    в которой квантор навешен на имя предиката Р.

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

    Прикладное исчисление предикатов: В такое исчисление введены дополнительные знаки констант, функций, операций, предикатов и дополнительные аксиомы, связывающие эти новые знаки.

    Пример: Исчисление предикатов с равенством.

    7.5 Реляционное исчисление предикатов на кортежах

    В реляционном исчислении на кортежах (Tuple Relation Calculus — TRC) правильные формулы строятся как описания условий, которым должны удовлетворять кортежи, образующие искомые отношения. Эти условия в простейшем варианте имеют вид: $$\{t|P(t)\}$$. Здесь $$t$$ — переменная, обозначающая некоторый кортеж, а $$Р(t)$$ —предикат. Формула исчисления кортежей описывает множество всех таких кортежей, для которых предикат принимает значение "истина". Общий вид правильно построенных формул исчисления на кортежах приведен в разделе 7.5.5.

    7.5.1 Состав предиката Р(i) в исчислении на кортежах

    Элементарными образующими предиката $$Р(t) $$являются атомы трех видов — переменные кортежи, отношения между кортежами и отношения между кортежем и константой. Опишем их:

  • Переменные кортежи: $$t\in R$$, где $$r$$— отношение. Данный атом имеет значение "истина", если кортеж $$t$$ принадлежит отношению $$r$$. При этом если отношение имеет схему $$R$$, то и кортеж $$t$$ имеет такую же схему.
  • Специфика реляционного исчисления на кортежах в том, что элементы рассматриваемого множества — это кортежи, которые обязательно принадлежат некоторым отношениям. И переменные в нем — это переменные кортежи.
  • Пример: Пусть отношение СОТРУДНИК имеет схему {ИМЯ, ФАМИЛИЯ, ОТЧЕСТВО, ВОЗРАСТ}. Утверждение $$t\in$$ СОТРУДНИК, означает, что $$t$$ является кортежем отношения СОТРУДНИК, и имеет ту же схему: {ИМЯ, ФАМИЛИЯ, ОТЧЕСТВО, ВОЗРАСТ}.
  • Отношения между кортежами (записываются в точечном синтаксисе): $$s.A\Theta t.B$$, где $$s$$ и $$t$$ — некоторые кортежи, $$А$$ и $$В$$ — имена атрибутов, $$S$$ и $$R$$ — множества атрибутов, причем $$A\in R$$ и$$B\in R$$, а $$\Theta$$ — оператор сравнения. Этот атом принимает значение "истина", тогда и только тогда, когда атрибут $$А$$ кортежа $$s$$ находится в отношении $$\Theta$$ с атрибутом $$В$$ кортежа 1 Например, если $$s,t\in$$ СОТРУДНИК, то $$s$$.ВОЗРАСТ < $$t$$.ВОЗРАСТ истинно, если возраст сотрудника s меньше возраста сотрудника .
  • Отношения между кортежем и константой: $$s.A\Theta c$$, где $$s$$ — некоторый кортеж, $$A$$ — имя атрибута ( $$A\in S$$ ), а $$c$$ — константа из домена атрибута $$A$$ . Атом принимает значение "истина", если значение атрибута кортежа находится в отношении $$\Theta$$с константой $$c$$. Например, $$s$$.ВОЗРАСТ < 40 истинно, если возраст сотрудника $$s$$ меньше 40.
  • 7.5.2 Правильно построенные формулы исчисления на кортежах

    Могут использоваться логические операции, кванторы и скобки. Рекурсивное определение правильно построенных формул:

  • Атом — это ППФ.
  • Если $$Р$$ и $$Q$$ — ППФ, то $$P\vee Q, ~P\Q,~\urcorner P$$ будут ППФ.
  • Если $$Р$$ — ППФ, то $$\exists X ~P(X)$$ — ППФ.
  • Если $$Р$$ — ППФ, то $$\forallX ~ P(X)$$ — ППФ.
  • Если $$Р$$ — ППФ, то $$(Р)$$ - ППФ.
  • Ничто иное не является ППФ.
  • Замечание. Квантор существования в инструментальном средстве WinRDBI обозначается как EXISTS, квантор всеобщности как FORALL.

    7.5.3 Сопоставление операторов реляционной алгебры и формул исчисления на кортежах

  • Объединение: $$R\cup S=\{t|t\in R\vee t\in S\}$$
  • Разность: $$R-S=\{t|t\in R\(\urcorner(t\in S))\}$$
  • Селекция: $$sel_F(R)=\{t|t\in R\F\}$$
  • Здесь $$R$$ и $$S$$ — отношения, $$F$$ — формула.

    7.5.4 О реляционной полноте языка запросов

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

  • включения арифметики и вычисления однострочных функций;
  • включения агрегатных (многострочных) функций;
  • иногда за счет вычисления транзитивного замыкания отношения.
  • 7.5.5 Синтаксис запросов TRC в WinRDBI

    Запрос (ППФ) имеет вид: $$\{t_1,\dots,t_n|F(t_1,\dots,t_n)\}$$, где $$F$$ — формула исчисления, а$$t_1,\dots,t_n$$ — кортежные переменные, действующие как глобальные переменные в $$F$$ и определяющие схему результата.

    Обозначим $$t$$ и $$t_i$$ — переменные кортежи, $$a_j$$ — атрибут, $$с$$ — константа уровня домена, $$\vartheta$$ — оператор сравнения. Тогда атомами будут: $$r(t),~t_{i\cdot}a_m\vartheta t_{j\cdot}\varthetac$$. Пусть $$F,~F_1,~F_2$$ — формулы. Тогда формулами будут: $$(F),~ not F,~ F_1$$ and $$F_2,~ F_1~ or~ F_2$$. Если $$t$$ свободна (переменная свободна в формуле, если она не квантифицирована действием exists или forall) в $$F(t)$$, то формулами будут $$(\exists t) F(t),~ (\forall t) F(t)$$.

    7.5.6 Реляционная полнота реляционного исчисления на кортежах

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

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

    Сравнение реляционной алгебры и исчисления на кортежах
    Реляционная алгебра Реляционное исчисление на кортежах
    $$sel_{condition}(R)$$ $$\{r|R(r)~and~condition\}$$
    $$proj\{a_i,\dots,a_j\}(R)$$ $$\{R_{\cdot}a_i,\dots,R_{\cdot}a_j|R(r)\}$$
    $$R\cup S$$ $$\{t|R(t)~or~S(t)\}$$
    $$R-S$$ $$\{t|R(t)~and~not~S(t)\}$$
    $$Q\times R$$ $$\{q,r|Q(q)~and~R(r)\}$$

    Рассмотрим несколько примеров.

    7.5.7 Примеры запросов в исчислении на кортежах

    Войдите в WinRDBI, откройте базу empTraining.rdb и файл empTrain-ing.trc с набором запросов в исчислении на кортежах (рисунок 7.1).

    (рис 7.1) Примеры запросов в исчислении на кортежах

    Все запросы имеют единую структуру вида {ti,... ,tn\F (ti,...,tn)}. Разберитесь с десятком примеров, особенно сложных, помещенных в конце списка в правом окне.

    Обратите внимание на создание новых отношений (рисунок 7.2), и соединения отношений, например, в запросе "Какие курсы предлагаются в области баз данных?" (рисунок 7.3).

    (рис 7.2) Создание нового отношения по данным существующих отношений (рис 7.3) Соединение отношений technologyArea и trainingCourse

    Как вы помните, (exists A) это квантор существования.

    7.6 Реляционное исчисление на доменах

    В реляционном исчислении на доменах (Domain Relational Calculus — DRC) область определения переменных не кортежи отношения, а набор доменов.

    Отношение состоит из кортежей, в которые входят значения, принадлежащие доменам. Поэтому необходимо как-то показывать, что некоторые значения на доменах входят в один кортеж. С этой целью в исчисление на доменах, в отличие от исчисления на кортежах, вводится дополнительный набор предикатов, выражающих условия принадлежности (доменов кортежу).

    Пусть $$r$$—это $$n$$-арное отношение с атрибутами $$A_1,A_2,\dots,A_n$$. Тогда условие принадлежности можно записать так: $$r(A_{i_1}:V_{i_1},A_{i_2}:V_{i_2},\dots,A_{i_m}:V_{i_m}$$, где $$V_{i_j}$$ - это либо константа, либо имя доменной переменной.

    Условие принадлежности истинно тогда и только тогда, когда в отношении г существует кортеж, содержащий заданные значения $$V_{i_j}$$ указанных $$j$$-тых атрибутов кортежа $$r$$, то есть $$A_{i_j}$$.

    Если $$V_{i_j}$$— константа, то условие на атрибут$$A_i$$. зависит от текущих значений доменных переменных; если же $$V_{i_j}$$— имя доменной переменной, то условие принадлежности может принимать разные значения истинности при разных значениях этой переменной.

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

    Сравните форму записи запроса в исчислении на доменах $$\{d_1,\dots,d_n|F(d_1,\dots,d_n)\}$$ и аналогичную форму для исчисления на кортежах $$\{t_1,\dots,t_n|F(t_1,\dots,t_n)\}$$.

    7.6.1 Синтаксис запросов DRC в WinRDBI

    Запрос имеет вид: $$\{d_1,\dots,d_n|F(d_1,\dots,d_n)\}$$, где $$F$$ — формула исчисления, а $$d_1,\dots,d_n$$ — доменные переменные, действующие как глобальные переменные в и определяющие схему результата.

    Результатом запроса DRC будет множество всех образованных кортежей$$\{d_1,\dots,d_n\}$$, для которых формула $$F$$ истинна.

    Обозначим: $$d_i$$ — переменная-домен, $$с$$ — константа уровня домена, $$\vartheta$$ — оператор сравнения. Тогда атомами будут: $$r(d_1,d_2,\dots,d_n),~d_i\vartheta d_j, ~d_i\vartheta $$.

    Пусть $$F,~F_1,~F_2$$ — формулы. Тогда формулами будут: $$(F),~ not~ F,~ F_1~ and~F_2,~ F_1~ or~ F_2$$. Если $$d$$ свободна (свободная переменная не квантифицирована действием $$\exists$$ или $$\forall$$) в $$F(d)$$, формулами будут $$(\exists d)F(d)$$, $$(\forall d)F(d)$$.

    7.6.2 Реляционная полнота реляционного исчисления на доменах

    Как в исчислении на кортежах, для доказательства достаточно выразить операции реляционной алгебры через операции исчисления. Обозначим условия принадлежности через $$R(r_1,\dots,r_n)$$. Сведем представления в таблицу 7.3.

    Сравнение реляционной алгебры и исчисления на доменах
    Реляционная алгебра Реляционное исчисление на доменах
    $$sel_{condition}(R)$$ $$\{r_1,\dots,r_n|R(r_1,\dots,r_n)~and~condition\}$$
    $$proj\{a_i,\dots,a_j\}(R)$$ $$\{r_1,\dots,r_n|R(r_1,\dots,r_n)\}$$
    $$R\cup S$$ $$\{d_1,\dots,d_n|R(d_1,\dots,d_n)~or~S(d_1,\dots,d_n)\}$$
    $$R-S$$ $$\{d_1,\dots,d_n|R(d_1,\dots,d_n)~and~not~S(d_1,\dots,d_n)\}$$
    $$Q\times R$$ $$\{q_1,\dots,q_m,r_1,\dots,r_n|Q(q_1,\dots,q_mn)~and~R(r_1,\dots,r_n)\}$$

    7.6.3 Примеры запросов в исчислении на доменах

    Войдите в WinRDBI, откройте базу empTraining.rdb и файл empTrain-ing.drc с набором запросов в исчислении на доменах. Форма записи запроса в исчислении на доменах

    $$\{d_1,\dots,d_n|F(d_1,\dots,d_n)\}$$

    похожа на аналогичную форму для исчисления на кортежах

    $$\{t_1,\dots,t_n|F(t_1,\dots,t_n)\}$$,

    но формула исчисления на доменах обязательно содержит условие приадлежности домена кортежу. Пример запроса:

    qSelection :=
    { EID, ELast, EFirst, ETitle, ESalary | employee(EID, ELast, EFirst, ETitle, ESalary) and ESalary > 100000 };
    

    Переменные EID, ELast, EFirst, ETitle, ESalary доменные, а employee(EID, ELast, EFirst, ETitle, ESalary) — условие связи.

    В следующем запросе takenCourse :={ EID | akes(EID, _, _, _, _)}; перед вертикальной чертой упомянута только одна доменная переменная. Поэтому в условии соединения знаками подчеркивания пришлось отметить остальные "безразличные" переменные. Запрос "Какие курсы предлагаются в области баз данных?", в котором предлагается вывести атрибуты cID, cTitle, cHours, дает пример соединения (рисунок 7.4

    (рис 7.4) Соединение отношений technologyArea и trainingCourse

    Сравните его с эквивалентным запросом в исчислении на кортежах (рисунок 7.3)

    7.7 Запросы, основанные на реляционной алгебре и на исчислениях

    Результат выполнения любой операции алгебры — это элемент базисного множества. В случае реляционной алгебры - отношение. Ранее было показано, что соединение двух отношений выполняется через декартово произведение, то есть сначала выполняется декартово произведение, а потом на нем выполняется операция селекции. На практике, если таблицы большие, то результата такого запроса придется ждать очень долго. Поэтому от реализации реляционной алгебры отказались очень давно.

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

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

    7.8 Гипотеза Сепира-Уорфа и искусственные языки

    Как отличить математика от нематематика? Показывая на север, вы спрашиваете, можно ли попасть в точку расположенную от вас на юге. Тот, кто скажет "можно", и будет математик. А кто такой лингвист? Это человек, который сначала учится говорить на языке, а потом понимать его.

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

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

    Рассмотрим используемые нами искусственные языки с точки зрения лингвистики естественных языков.

    Давно известна гипотеза Сепира-Уорфа, сформулированная, конечно, для естественных языков. Процитируем Уорфа: "Мы выделяем в мире явлений те или иные категории и типы совсем не потому, что они (категории и типы) самоочевидны; напротив, мир предстает перед нами как калейдоскопический поток впечатлений, который должен быть организован нашим сознанием, а это значит — в основном, языковой системой, хранящейся в нашем сознании. . . Мы сталкиваемся, таким образом, с новым принципом относительности, который гласит, что сходные физические явления позволяют создать сходную картину вселенной только при сходстве или, по крайней мере, при соотносительности языковых систем".

    Все, что мы можем выразить в языке, является отображением каких-то мысленных структур, связанных с языком. И ничего с этим поделать нельзя. Первая работа Сепира была сделана на материале языков у американских индейцев, у которых нет понятия "отрезок времени". То, что мы называем отрезком времени, для них — процесс. Они четко знают, что есть некая подготовка к действию, совершение действия, что-то после этого действия следует. Они не могут сказать "через три дня", а только "прожив три дня". Наш отрезок времени для них — это процесс, и его нужно каким-то образом пройти. Все мы находимся в плену тех языков, которыми мы владеем. Если индейцы с их языками показались вам примитивными, вспомните, как трудно было после школьного Бейсика осваивать функциональное и логическое программирование. Как сказала одна моя студентка: "Пролог хороший язык, но если бы в него еще добавили циклы!"

    По-видимому, гипотеза Сепира-Уорфа в полной мере применима к искусственным языкам. Прежде всего, мы работаем в рамках терминосистем используемых языков программирования и предметной области, которые не всегда четко фиксируются и имеют наклонность меняться со временем. Вы думаете, что русский крестьянин 200 лет тому назад, не смог бы объяснить что такое самолет? "Да это такая лодка, которая крепится под углом к течению, на колесиках к тросу натянутому поперек реки. Она без усилий человека сама идет на другой берег. Потому и называется самолет".

    Термин "язык" воспринимается по-разному в компьютерных науках и в лингвистике. В искусственных языках изучаются в первую очередь синтаксис и прагматика, то есть способ употребления. Смыслами данных занимаются не слишком активно. Как вы увидите позже, семантика недостаточно отражается в базах данных, даже если используются модели, названные в главе 2 семантическими. Необходимы усилия для того, чтобы обогатить базу данных смыслами и создать программное обеспечение, которое эти смыслы воспринимает.

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

    Заметим, что все естественные языки (ЕЯ) —это наивные модели почти одного и того же окружающего нас мира. Естественно, есть нюансы, определяемые условиями обитания. Естественный язык живет, пока живут его носители и сохраняется их образ жизни. Существует понятие "вмещающая среда". Для естественных языков - это люди, книги, аудио- и видеозаписи, компьютеры и т.д.

    Естественные языки складывались в процессе длительной эволюции.

    Искусственные языки (ИЯ) существенно отличаются от естественных по происхождению и вмещающей среде, зачастую предполагающей в качестве носителей языка кроме человека еще и компьютер. Сфера их применения существенно уже. Именно поэтому несколько ИЯ часто используются совместно.

    Из всех функций ЕЯ в ИЯ в полной мере развита только коммуникативная. Не нужна, естественно, экспрессивная функция (выражение эмоций). Недостаточно развита аккумулятивная функция, обеспечивающая сохранение опыта и знаний или способ обозначения своей идентичности. Обычно, "поговорив" с машиной, мы не можем изменить лексику языка, на котором она с нами общается. В настоящее время знания в базах данных, как правило, не создаются машиной и не аккумулируются. В языках баз данных нет запросов, использующих знания, характерные для предметной области. Например, мы не можем написать запрос на поиск лошадиных фамилий, как в рассказе Чехова "Лошадиная фамилия", в котором персонаж пытается вспомнить фамилию, относящуюся к лошадям, и в самом конце он вспоминает ее — Овсов. Заметим, что использование онтологий уже позволяет решить эту задачу. Подключив онтологии к базам данных, можно формировать необычные запросы, учитывающие не только данные базы, но и их смыслы. Если, например, запрос возвращает пустой ответ, то, может быть, иногда имеет смысл, исходя из семантики задачи, изменить условия запроса и добиться содержательного ответа?

    В искусственных языках почти не используется конструктивная функция ЕЯ, которую в контексте ИЯ можно рассматривать как функцию формирования знаний. Например, есть таблицы, в них есть строки определенного формата. А как в базу внести строчку формата, которого нет? Вообще говоря, никак. Даже если заменить вставку строки на команду создания отношения, своего для каждой такой строки, то необходимо сначала выяснить их смысл и определить, что с ними потом делать?

    7.8.1 Сочетание двух языков

    Существуют смешанные языки программирования, в которых один язык встраивается в другой. Типичный пример — серверные страницы (ASP, JSP, CSP), в которых в текст на одном языке, например HTML, можно вставлять скриптлеты — тексты на другом языке.

    В листинге 7.1 показан пример серверной страницы JSP (Java Server Pages). Вмещающий текст написан на HTML, а вставки (выражения, скрипт-леты, объявления) — на Java. Выражение вставляет вычисляемое значение непосредственно в формируемую HTML-страницу. Скриптлет дает часть кода для формируемого метода серверной страницы. Основной язык баз данных табличного или реляционного типа — SQL — с самых первых стандартов предполагался встраиваемым в другие языки: C, Алгол, Кобол, Java и т.д.

    <HTML>
    <HEAD>
    <TITLE>Пример JSP</TITLE>
    </HEAD>
    <BODY>
    <H2>Выражение и скриптлет JSP</H2>
    <UL>
    <LI>Дата и время: <%= new java.util.Date() %></LI>
    <LI><%
    java.util.Date hDate = new java.util.Date();
    out.println("Дата и время:"+hDate);
    %></LI>
    </UL>
    </BODY>
    </HTML>
    

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

    Основные особенности ИЯ, отличающие их от ЕЯ:

  • ИЯ конструируются эксплицитно (явно), а не складываются в процессах деятельности и общения носителей языка.
  • ИЯ не могут получать информацию, не имеющую заранее подготовленного шаблона, не могут соотносить ее с уже имеющейся информацией. ИЯ не поддерживают метафорического мышления. В базах данных можно задать только четкий вопрос. То есть можно найти Иванова, но найти людей, в каком-то смысле похожих на Иванова нельзя. Правда, для этого существуют информационно-поисковые системы (ИПС), но пока что с задачей они справляются плохо. Так что и в базах, и в ИПС нужны существенные усовершенствования.
  • Носители ИЯ качественно неоднородны — человек "с улицы", человек специалист предметной области, человек программист, машина с определенным программным обеспечением и т.д. Выделенные группы также неоднородны. Например, два программиста, работающих с разными объектными языками, не обязательно понимают одинаково все термины объектной технологии.
  • Обилие невербальных языков и невербальных компонентов ИЯ. Пример языка с вербальной и невербальной компонентой - Query-by-Example, описанный далее в главе 9. Широко применяется встраивание одного вербального языка в другой.
  • Одновременное использование нескольких языков, своих для каждой модели данных или вида деятельности. Например, создаете интерфейс на Java, по анализу данных выходите в правила на языке Jess, а результаты их работы передаете обратно в Java.
  • Ограничения на графические языки, вызванные особенностями восприятия и распознавания образов человеком. Известна статья "Волшебное число 7 ± 2", в которой показано, что человек способен одновременно работать с примерно семью кластерами информации — от пяти до девяти в зависимости от способностей человека.
  • В языках специфичных для предметной области DSL (Domain Specific Language), в системах управляемых моделями MDA (Model Driven Architecture) может сужаться область применения языка а, значит, и число его "носителей". В MDA предполагается существование некоторого универсального интерпретатора. Достаточно разработать модель информационной системы, а интерпретатор обеспечит работу приложения. С одной стороны, это эффективный способ повышения уровня языка разработки. С другой стороны, специфичность языка моделирования может определить узость применения.

    Опыт показывает, что если язык или среда разработки используется мало, то он, как минимум, плохо развивается. Например, Eclipse нравится очень многим программистам, и поэтому в 2008 году под Eclipse насчитывалось 1090 утвержденных плагинов, беспрецедентно увеличивших его возможности.

    7.8.2 Когнитивное направление в науке

    Когнитивизм — это направление в гуманитарной науке, изучающее знание и познание, восприятие мира в процессе деятельности людей, причем ". . . исследуются не просто наблюдаемые действия, а их ментальные репрезентации (внутреннее представление модели), символы, стратегии человека, которые и порождают действия на основе знаний". Иначе говоря, вы можете одно и то же показать в разных формах — в одних это понятно, в других требует какого-то обдумывания, размышления.

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

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

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

    привязать вводимые понятия к уже имеющимся понятиям, а потом их развивать. Следует помнить, что мы создаем приложения, с которыми работают человек и компьютер. Поэтому нужно заботиться не только о компьютере (быстродействие, память, надежность и т.п.), но и о человеке. Человек — самое слабое звено в работе и в процессе создания информационных систем. Если форма представления модели, языка или интерфейса не когнитивна, т.е. с ней в вашем мышлении ничего не связано, то вы многого не понимаете. Очевидно, все, что показывают человеку в интерфейсе, должно быть "схвачено" им, должно работать образное восприятие. Скажем, таблица для человека — это, прежде всего, некий образ, воспринимаемый на уровне подсознания, гештальт.

    7.9 Языки, используемые для создания информационных систем

    Обилие языков, используемых для создания информационных систем (ИС), объясняется, прежде всего, сложностью этих систем. Приходится создавать несколько типов моделей так, чтобы каждая из них отражала только некоторые особенности систем. Это делает модели доступными человеку, когнитивными. На рисунке 7.7 обозначено семь штук моделей баз данных. При желании к ним можно добавить еще полуструктурированную и другие модели. Интерфейсы пользователя и данные, хранящиеся в памяти, для представления нуждаются в своих моделях данных. В распределенных системах необходимо моделировать интерфейсы обмена данными. В больших, особенно неоднородных системах, появились онтологии. Они позволяют сохранить и повторно использовать часть знаний, описывающих предметную область, в том числе систему использованных терминов (терминосистему). Но для представления онтологий необходимы свои модели, например, фреймовая, RDF, OWL. Мы не будем ограничиваться только моделями базы данных, хотя все остальные модели подробно рассматриваться не будут. Это позволит нам рассматривать базы данных как открытые системы, более реалистично представить их роль и место. (Как известно, открытая система не может быть понята до конца, если не учитывается ее взаимодействие с окружающим миром)

    Нетрудно догадаться, что между используемыми моделями должны быть реализованы все необходимые преобразования. Иначе вы не будете уверены, скажем, в том, что сумма $1000, введенная в интерфейсе пользователя, не превратится во что-нибудь другое, если ее записать на диск.

    Учтите, что на рисунке 7.5 представлены далеко не все модели, используемые для описания информационных систем. Нет моделей бизнеса, с которых и начинается проектирование системы.

    (рис 7.5) Модели данных

    Давайте на примере СУБД Oracle представим, сколько языков программирования нужно знать для работы с ИС сейчас и лет 15 назад (таблица 7.4). PL/SQL — это обычное для больших СУБД процедурное расширение языка SQL, a SQL*Plus — небольшой язык терминала, специфичный для Oracle. К скромному списку о шести пунктах, характерному для 90-х годов, в настоящее время добавляются Java, XML и океан связанных с ними языков и технологий. Так, для XML это язык стилей XSL, язык путей XPath, язык схем Schema, RELAX NG, позволяющий посмотреть на одни данные с точки зрения различных грамматик, язык запросов Xquery, язык обмена XMI. В последние годы приходится осваивать еще Ruby и технологии Rails.

    Поскольку Oracle 11 g — это семантическая база данных, добавляются языки представления семантики RDF, OWL и другие. В последнее десятилетие активно разрабатываются и уже начали использоваться языки специфичные для предметной области. Правда, для нас это совсем не новость. При желании можно любые языки для работы с базами данных считать предметно ориентированными.

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

    Языки программирования используемые в информационных системах
    1995 год Сейчас
  • SQL
  • Cache ObjectScript
  • PL\SQL
  • SQL*Plus
  • С++
  • HTML
  • Javascript
  • SQL
  • Cache ObjectScript
  • PL\SQL
  • SQL*Plus
  • С++
  • HTML
  • Javascript
  • Язык Java + технологии
  • XML (XSL, XPath, Schema, RELAX NG, XQuery, XMI)
  • Ruby (+Rails)
  • Языки для представления семантики (RDF,OWL, ...)
  • Языки, специфичные для предметной области (DSL,MDA)
  • Сократить список используемых языков можно, переходя на языки сверхвысокого уровня (по сравнению с сегодняшним уровнем языков четвертого поколения). Есть обоснованное предположение о том, что языки более высокого уровня потребуют использования систем с высоким встроенным интеллектом и развитой семантикой.

    Можно спросить, а зачем мы выходим за рамки языков баз данных, в которых и без того есть что изучать? Причин несколько. Во-первых, языки баз данных могут встраиваться в языки общего назначения. Во-вторых, современные базы чаще всего работают в рамках трехзвенной архитектуры приложений, и некоторые операции могут проводиться на серверах баз данных, другие —на серверах приложений, а какие-то —на клиентской части. Языка, одинаково пригодного для всех этих звеньев, не существует. В-третьих, распределенная база может быть гетерогенной, то есть содержать локальные базы, написанные на разных языках. Необходимо как-то организовать обмен между ними и согласование данных.

    Практически всегда модели данных, используемые в базе, в интерфейсе пользователя и интерфейсах обмена между ИС не совпадают. Поэтому необходимо наладить отображение данных (mapping) между ними.

    Вернуться к учебному плану