В соответствии с принятым стилем изложения вы будете создавать примеры запросов в обоих исчислениях, используя уже известный вам инструмент WinRDBI. Материал лучше осваивается, если решать примеры. И когда вас просят потренироваться писать запросы на языках, которые не используются в промышленных СУБД, это не означает просьбу посетить кладбище погибших языков и отдать дань почившим. Многое из того, что вы при этом узнаете, переносится на действующие языки. Вы будете лучше понимать пути развития языков и подготовитесь к восприятию будущих нововведений.
Затем обратимся к лингвистике естественных языков для того, чтобы выяснить ограничения, которые они накладывают на восприятие мира носителями этих языков. Это позволит нам предположить наличие подобных или еще более сильных ограничений в искусственных языках и объяснить необходимость совместного использования нескольких таких языков.
Мы введем также общее представление о когнитивном направлении в науке и покажем, почему этот аспект важен для языков программирования вообще и языков баз данных в частности.
В конце лекции перечислим некоторые языки, используемые для создания информационных систем. Это позволит лучше понять роль и место реляционной модели и связанных с ней языков в общей проблематике баз данных и информационных систем.
Возможности языка реляционной алгебры ограничены. Перечислим некоторые типы запросов, не выразимых средствами реляционной алгебры:
sal?");Запросы первого типа требуют использования языков, основанных на логике предикатов второго порядка, у которых кванторы могут навешиваться не только на переменные, как у языков первого порядка, но и на имена предикатов.
Типичный пример запроса второго типа рассмотрен далее. Станет понятно, что для записи такого запроса язык должен использовать рекурсию.
Мы будем работать с таблицами учебной схемы Scott, заимствованной из Oracle. В ней таблица emp (сотрудники) содержит иерархическую структуру организации. empno — табельный номер, ename — имя сотрудника, job — должность, mgr — табельный номер непосредственного начальника, hiredate — дата приема на работу, sal — зарплата, comm — комиссионные, deptno — номер отдела (таблица 7.1).
| * 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, который мы будем изучать в следующей главе, рекурсивные запросы возможны.
В соответствии с общими понятиями семиотики будем выделять синтаксис (способ записи чего-либо), семантику (смыслы) и прагматику (способы употребления). Эта трехчастная конструкция называется треугольником Фреге. Заметим, что насыщение баз данных смыслами мало изучено, но может представлять большой интерес как для практики, так и для обучения.
Займемся исчислениями. Изложение по недостатку места и времени будет неполным и поверхностным, но достаточным для практического освоения исчислений на кортежах и доменах.
Определение. Исчисление — это "дедуктивная система, т.е. способ задания множества путем указания исходных элементов (аксиом исчисления) и правил вывода, каждое из которых описывает, как строить новые элементы из исходных и уже построенных. Выводом в исчислении G называется такое линейно упорядоченное множество, что всякий его элемент Р является либо аксиомой исчисления G, либо заключением применения какого-либо принадлежащего О правила вывода, причем все посылки этого применения предшествуют Р в выводе".
Дедуктивной называют систему, в которой работает дедуктивный вывод.
Исчисление высказываний изучает логические связи между высказываниями, рассматриваемыми как единое целое, без учета их строения. Значений истинности два. Третье значение истинности "полуистинно-полуложно" (или значение "не знаю"), связанное с NULL, здесь не используется.
Исчисление предикатов формализует логику, изучающую субъектно-предикатную структуру высказываний. Предполагается, что в высказывании есть некоторые переменные, и потому истинность предиката может быть разной в зависимости от того, как вы означите эти переменные.
Когда вы будете пытаться понять разницу в эффективности языков, основанных на исчислениях и на реляционной алгебре, обратите внимание на то, что в школьной математике принято допускать одну неточность. Операции над множествами и логические операции там часто иллюстрируют на примере линейно упорядоченных множеств. То есть работают с интервальными, а не произвольными множествами. Потому операции над множествами и эквивалентные операции над соответствующими предикатами, по сути, совпадают, точнее, находятся во взаимно-однозначном соответствии.
Отношения — это неупорядоченные множества кортежей, и потому вычисление предикатов может быть существенно эффективнее действий над множествами кортежей. В алгебре результат каждой операции — это промежуточное отношение, которое в реализациях языка должно быть создано. При этом работают со всеми кортежами, а не только с граничными элементами, как в интервальных множествах. В простых запросах в исчислениях могут проверяться сложные условия, выраженные предикатами, и строиться единственное результирующее отношение.
Исчисление высказываний не позволяет оперировать обобщенными утверждениями, содержащими переменные. Этот недостаток устраняется использованием предикатов.
Определение. Предикат $$P(X_1,\dots,X_n)$$ —это утверждение $$Р$$ об объектах $$X_1,\dots,X_n$$.
Сами объекты $$X_1,\dots,X_n$$могут рассматриваться как переменные, означивая которые мы получаем из предиката высказывания с разными значениями истинности. Можно понимать предикат как функцию в множество значений истинности $$\{0,1\}$$. Примеры:
Здесь "погода" — предикатный символ (предикат); $$D$$ и $$W$$ — переменные; "вторник", "дождь" — константы.
Одноместные предикаты обозначают свойства (например, "быть человеком"), предикаты двухместные и с большей арностью обозначают отношения и операции. Пример: двухместный предикат "выше, чем".
Особый интерес представляют предикаты, значение истинности которых определяется на некотором наборе переменных. Высказывания о множествах объектов строятся с помощью кванторов.
Широко используются:
Реже употребляется: сильный квантор существования $$\exists !$$ - "существует единственный". Примеры:
Переменная, на которую навешен квантор, называется связанной. Например, в формулах $$\forall X (X=Y)$$ и $$\exists X (X=Y)$$ переменная $$X$$ связана, а $$Y$$ свободна.
Важно понимать, что исчисление или формальная теория —это система правил оперирования со знаками, используемая для доказательства или опровержения предложений, выразимых с помощью допустимого набора знаков. Исчисления работают с так называемыми правильно построенными формулами (ППФ). Аксиомы — это набор ППФ, принятых за исходные. В самом исчислении нет представления об истинности аксиом.
Кроме знаков ничего нет — никаких смыслов. Но исчисление может быть интерпретировано. И вот тогда появляется семантика.
Исчисление состоит из:
Выделяют логические аксиомы, определяющие базовую логику. Специфика теории может потребовать добавления нелогических аксиом.
Мы будем рассматривать исчисления с конечным алфавитом, конечным числом аксиом и формулами конечной длины.
Используются, в частности, следующие правила вывода:
Формальное доказательство формулы $$А$$ в исчислении — это построение конечной последовательности формул $$A_1, A_2,\dots,A_n$$, причем, $$А = А_n$$. Каждая из формул $$A_i$$ этой цепочки либо аксиома, либо получена из других формул с помощью правил вывода. $$А$$ называется теоремой. С помощью символа "доказуемо" $$\vdash$$ запишем этот факт как $$\vdash А$$.
Определяющими свойствами любого исчисления являются полнота и непротиворечивость.
Определение (Полнота). Формальная теория называется полной, если для любого высказывания А логики предикатов или $$\vdash A$$ или $$\vdash\urcorner A$$
Определение (Непротиворечивость). Формальная теория называется непротиворечивой, если формула $$A\\urcorner A$$ в ней недоказуема для произвольного высказывания А теории.
Замечание. Как показал К. Гедель в своей знаменитой теореме о неполноте арифметической логики, доказательство непротиворечивости невозможно выполнить даже в рамках формальных теорий для простых математических объектов.
Реляционная алгебра определяет набор операций, комбинируя которые, можно создать отношение, которое представляет ответ на запрос.
Существует еще три в некотором смысле эквивалентных подхода к построению систем запросов - реляционные исчисления на кортежах, на доменах и, так называемые, табло.
Знания только реляционной алгебры даже для практики недостаточно, потому что два наиболее известных языка для работы с реляционными базами данных — SQL (Structured Query Language) и QBE (Query-by-Example) — основаны, соответственно, на реляционных исчислениях на кортежах и доменах.
В настоящее время языками, основанными на реляционной алгебре, не пользуются. Так зачем же мы ее изучаем? По двум причинам:
Определение. Язык запросов к базе данных, способный моделировать реляционную алгебру, обладает свойством реляционной полноты. Используемые в практике языки сверхполны, то есть кроме реляционных запросов, они позволяют делать много чего еще. Понятно, что реляционно-неполные языки интереса не представляют.
Удобство исчислений в том, что в запросах формируются условия, которым должен удовлетворять результат запроса. По ним и отбираются строки. В запросах реляционной алгебры при выполнении каждой операции последовательно получаются промежуточные отношения. Это замедляет получение ответа.
Определение. Высказывание — это утверждение, которое имеет однозначно определенное значение истинности. Высказывание в логике предикатов — это формула, все переменные которой связаны кванторами.
Заметьте, что нас по-прежнему не волнует смысл. Иначе говоря, исчисление дает форму, в которой могут быть сделаны правильные выводы, то есть утверждает, что из набора ППФ можно (или нельзя) построить заданную ППФ. И ничего более.
Определение. Символы исчисления высказываний — это символы высказываний А,В,С, ..., символы значений истинности Т,_1_ и символы логических связок $$\vee$$,$$\$$, $$\urcorner$$, $$\Rightarrow$$.
Определение. Правильно построенные формулы (ППФ):
Системы аксиом исчисления высказываний (например, аксиоматика Кли-ни) хорошо исследованы, но мы их не рассматриваем, так как не будем строить доказательства, исходя из выбранной системы аксиом.
Логика высказываний расширяется до логики предикатов путем включения в формулы утверждений, являющихся предикатами. Естественно, появляются и предикатные переменные. Поэтому определение ППФ усложняется.
Определение (Терм).
Определение (Формула).
При внимательном прочтении приведенного выше определения терма должны возникнуть вопросы:
Ответ на первый вопрос: $$n$$-местный предикат на множестве $$М$$ задает отображение$$M^n\to \{\top,\bot\}$$, а $$n$$-местная функция определяет отображение$$M^n\to M$$.
Ответ на второй вопрос: 0-местная функция $$M^0\to M$$ отождествляется с элементом множества $$М$$. Не всегда удобно иметь отдельный символ для каждого элемента множества $$М$$. Функциональные символы позволяют дать более сжатое представление. Например, фраза естественного языка "моя левая нога" может пониматься как существование левой ноги у субъекта "Я" и записываться как функция "ЛеваяНога(Я)", что позволяет не именовать по отдельности левые ноги всех людей.
Учтите, что за определенной таким образом функцией не предполагается никакой процедуры ее вычисления.
Для определения узкого исчисления предикатов необходимо определить набор допустимых символов, правильно построенные формулы, набор аксиом и правила вывода.
Определение. Символы исчисления предикатов — это символы переменных, констант, функций и предикатов, символы значений истинности $$\top,\bot$$ , символы логических связок $$\vee ,\, \urcorner, \Rightarrow$$ и кванторы общности $$\forall$$ и существования $$\exists$$.
Правильно построенные формулы и входящие в них термы определены выше. Набор аксиом включает аксиомы исчисления высказываний и следующие дополнительные аксиомы:
Дополнительные правила вывода:
К дополнительным правилам вывода относят еще "исключение ", "введение " и "универсальное инстанцирование".
Определение. "Исключение " —это вывод истинности обоих конъюнктов $$А$$ и $$В $$из истинности $$А\В$$.
Определение. "Введение " — это вывод истинности $$А\В$$ из истинности обоих конъюнктов А и В.
Определение (Правило универсального инстанцирования). Если любую переменную, стоящую под квантором всеобщности, заменить на любой терм из области определения, то полученное выражение истинно. Например, если терм А принадлежит той же области определения, что $$X$$, и $$\forall XP(X)$$, то выводимо $$Р(А)$$.
Исчисление первого порядка: В исчислении первого порядка можно связывать знаком квантора только переменные, но не функции или предикаты.
Исчисление высших порядков: В исчислении предикатов высших порядков можно связывать знаком квантора не только переменные, но и функции и предикаты.
Пусть требуется найти отношение, в котором имеется заданный атрибут $$SAL$$. Это запрос в логике второго порядка. Ему соответствует формула:
$$\exists Р ~ (SAL~ есть предикатная переменная в Р)$$
в которой квантор навешен на имя предиката Р.
В рамках реляционной теории можно работать только с кортежами, но не с отношениями. В реализациях баз данных существует словарь. Это база метаданных, обычно реляционного типа. Словарь содержит сведения о созданных таблицах, их столбцах, ограничениях целостности и т.д. В реляционной модели данных словарь не предполагается. В этом одно из существенных различий между реляционной моделью и моделями данных реальных СУБД. Именно наличие словаря позволяет писать запросы в логике второго порядка.
Прикладное исчисление предикатов: В такое исчисление введены дополнительные знаки констант, функций, операций, предикатов и дополнительные аксиомы, связывающие эти новые знаки.
Пример: Исчисление предикатов с равенством.
В реляционном исчислении на кортежах (Tuple Relation Calculus — TRC) правильные формулы строятся как описания условий, которым должны удовлетворять кортежи, образующие искомые отношения. Эти условия в простейшем варианте имеют вид: $$\{t|P(t)\}$$. Здесь $$t$$ — переменная, обозначающая некоторый кортеж, а $$Р(t)$$ —предикат. Формула исчисления кортежей описывает множество всех таких кортежей, для которых предикат принимает значение "истина". Общий вид правильно построенных формул исчисления на кортежах приведен в разделе 7.5.5.
Элементарными образующими предиката $$Р(t) $$являются атомы трех видов — переменные кортежи, отношения между кортежами и отношения между кортежем и константой. Опишем их:
Могут использоваться логические операции, кванторы и скобки. Рекурсивное определение правильно построенных формул:
Замечание. Квантор существования в инструментальном средстве WinRDBI обозначается как EXISTS, квантор всеобщности как FORALL.
Здесь $$R$$ и $$S$$ — отношения, $$F$$ — формула.
Как определено ранее, язык запросов к реляционной базе данных называется реляционно-полным, если он, по крайней мере, так же выразителен, как язык запросов реляционной алгебры. Иначе говоря, реляционно-полный язык позволяет, по крайней мере, моделировать язык запросов реляционной алгебры. Используемые в практике языки запросов "более чем полны" за счет:
Запрос (ППФ) имеет вид: $$\{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.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)\}$$ |
Рассмотрим несколько примеров.
Войдите в 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) это квантор существования.
В реляционном исчислении на доменах (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)\}$$.
Запрос имеет вид: $$\{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)$$.
Как в исчислении на кортежах, для доказательства достаточно выразить операции реляционной алгебры через операции исчисления. Обозначим условия принадлежности через $$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)\}$$ |
Войдите в 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)
Результат выполнения любой операции алгебры — это элемент базисного множества. В случае реляционной алгебры - отношение. Ранее было показано, что соединение двух отношений выполняется через декартово произведение, то есть сначала выполняется декартово произведение, а потом на нем выполняется операция селекции. На практике, если таблицы большие, то результата такого запроса придется ждать очень долго. Поэтому от реализации реляционной алгебры отказались очень давно.
Основное отличие языков, основанных на реляционной алгебре и на исчислениях, состоит в уровне процедурности. Запросы, основанные на реляционной алгебре, задают дерево алгебраических операций, то есть имеют однозначную процедурную интерпретацию (с учетом старшинства операций и расстановки скобок). Запрос реляционного исчисления не имеет однозначной процедурной интерпретации. Он только устанавливает условия, которым должны удовлетворять кортежи результирующего отношения. Поэтому языки реляционного исчисления являются менее процедурными и, соответственно, более декларативными.
Любой реляционно-полный язык позволяет не только моделировать язык запросов реляционной алгебры, но и языки запросов реляционных исчислений на кортежах или на доменах. То есть языки исчислений могут быть шире, но минимальный уровень моделируется реляционно-полным языком.
Как отличить математика от нематематика? Показывая на север, вы спрашиваете, можно ли попасть в точку расположенную от вас на юге. Тот, кто скажет "можно", и будет математик. А кто такой лингвист? Это человек, который сначала учится говорить на языке, а потом понимать его.
А если серьезно, то для лиц с математическим мышлением характерно стремление строить аксиоматические теории, в которых использован минимум исходных предположений и возможно получение нового знания дедуктивным путем. Инженер скорее будет строить реализуемую модель или несколько частных моделей, может быть плохо связанных и обоснованных, но полезных для решения некоторого класса задач. Строгость рассуждений для него не так уж важна. Он знает, что принудительные попытки ввести строгость, например, в администрировании баз данных, могут привести к плачевным результатам. Насколько я понимаю, лингвист строит своеобразные модели, в которых обычно ищутся новые смыслы наблюдаемых явлений. Он не собирается создавать чего-нибудь вроде информационной системы, но использует аналогии, рассуждения на примерах, обосновывает свои положения ссылкой на типичность или массовость явления.
Мне кажется, что в нашей области полезно сочетать особенности этих трех специалистов, насколько это возможно, и там, где это уместно. Знания каждого из них адекватны некоторому аспекту действительности. Небольшую часть этих знаний мы постараемся использовать.
Рассмотрим используемые нами искусственные языки с точки зрения лингвистики естественных языков.
Давно известна гипотеза Сепира-Уорфа, сформулированная, конечно, для естественных языков. Процитируем Уорфа: "Мы выделяем в мире явлений те или иные категории и типы совсем не потому, что они (категории и типы) самоочевидны; напротив, мир предстает перед нами как калейдоскопический поток впечатлений, который должен быть организован нашим сознанием, а это значит — в основном, языковой системой, хранящейся в нашем сознании. . . Мы сталкиваемся, таким образом, с новым принципом относительности, который гласит, что сходные физические явления позволяют создать сходную картину вселенной только при сходстве или, по крайней мере, при соотносительности языковых систем".
Все, что мы можем выразить в языке, является отображением каких-то мысленных структур, связанных с языком. И ничего с этим поделать нельзя. Первая работа Сепира была сделана на материале языков у американских индейцев, у которых нет понятия "отрезок времени". То, что мы называем отрезком времени, для них — процесс. Они четко знают, что есть некая подготовка к действию, совершение действия, что-то после этого действия следует. Они не могут сказать "через три дня", а только "прожив три дня". Наш отрезок времени для них — это процесс, и его нужно каким-то образом пройти. Все мы находимся в плену тех языков, которыми мы владеем. Если индейцы с их языками показались вам примитивными, вспомните, как трудно было после школьного Бейсика осваивать функциональное и логическое программирование. Как сказала одна моя студентка: "Пролог хороший язык, но если бы в него еще добавили циклы!"
По-видимому, гипотеза Сепира-Уорфа в полной мере применима к искусственным языкам. Прежде всего, мы работаем в рамках терминосистем используемых языков программирования и предметной области, которые не всегда четко фиксируются и имеют наклонность меняться со временем. Вы думаете, что русский крестьянин 200 лет тому назад, не смог бы объяснить что такое самолет? "Да это такая лодка, которая крепится под углом к течению, на колесиках к тросу натянутому поперек реки. Она без усилий человека сама идет на другой берег. Потому и называется самолет".
Термин "язык" воспринимается по-разному в компьютерных науках и в лингвистике. В искусственных языках изучаются в первую очередь синтаксис и прагматика, то есть способ употребления. Смыслами данных занимаются не слишком активно. Как вы увидите позже, семантика недостаточно отражается в базах данных, даже если используются модели, названные в главе 2 семантическими. Необходимы усилия для того, чтобы обогатить базу данных смыслами и создать программное обеспечение, которое эти смыслы воспринимает.
Мы уже освоили язык реляционной алгебры, который играет особую роль эталонного языка в базах данных реляционного типа и определили свойство реляционной полноты.
Заметим, что все естественные языки (ЕЯ) —это наивные модели почти одного и того же окружающего нас мира. Естественно, есть нюансы, определяемые условиями обитания. Естественный язык живет, пока живут его носители и сохраняется их образ жизни. Существует понятие "вмещающая среда". Для естественных языков - это люди, книги, аудио- и видеозаписи, компьютеры и т.д.
Естественные языки складывались в процессе длительной эволюции.
Искусственные языки (ИЯ) существенно отличаются от естественных по происхождению и вмещающей среде, зачастую предполагающей в качестве носителей языка кроме человека еще и компьютер. Сфера их применения существенно уже. Именно поэтому несколько ИЯ часто используются совместно.
Из всех функций ЕЯ в ИЯ в полной мере развита только коммуникативная. Не нужна, естественно, экспрессивная функция (выражение эмоций). Недостаточно развита аккумулятивная функция, обеспечивающая сохранение опыта и знаний или способ обозначения своей идентичности. Обычно, "поговорив" с машиной, мы не можем изменить лексику языка, на котором она с нами общается. В настоящее время знания в базах данных, как правило, не создаются машиной и не аккумулируются. В языках баз данных нет запросов, использующих знания, характерные для предметной области. Например, мы не можем написать запрос на поиск лошадиных фамилий, как в рассказе Чехова "Лошадиная фамилия", в котором персонаж пытается вспомнить фамилию, относящуюся к лошадям, и в самом конце он вспоминает ее — Овсов. Заметим, что использование онтологий уже позволяет решить эту задачу. Подключив онтологии к базам данных, можно формировать необычные запросы, учитывающие не только данные базы, но и их смыслы. Если, например, запрос возвращает пустой ответ, то, может быть, иногда имеет смысл, исходя из семантики задачи, изменить условия запроса и добиться содержательного ответа?
В искусственных языках почти не используется конструктивная функция ЕЯ, которую в контексте ИЯ можно рассматривать как функцию формирования знаний. Например, есть таблицы, в них есть строки определенного формата. А как в базу внести строчку формата, которого нет? Вообще говоря, никак. Даже если заменить вставку строки на команду создания отношения, своего для каждой такой строки, то необходимо сначала выяснить их смысл и определить, что с ними потом делать?
Существуют смешанные языки программирования, в которых один язык встраивается в другой. Типичный пример — серверные страницы (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>
Будем называть вербальными искусственные языки, в которых порождаемые инструкции представляют последовательность символов, разделенную на слова. Кроме вербальных языков в информационных системах используют невербальные языки. Это графические, диаграммные языки.
Основные особенности ИЯ, отличающие их от ЕЯ:
В языках специфичных для предметной области DSL (Domain Specific Language), в системах управляемых моделями MDA (Model Driven Architecture) может сужаться область применения языка а, значит, и число его "носителей". В MDA предполагается существование некоторого универсального интерпретатора. Достаточно разработать модель информационной системы, а интерпретатор обеспечит работу приложения. С одной стороны, это эффективный способ повышения уровня языка разработки. С другой стороны, специфичность языка моделирования может определить узость применения.
Опыт показывает, что если язык или среда разработки используется мало, то он, как минимум, плохо развивается. Например, Eclipse нравится очень многим программистам, и поэтому в 2008 году под Eclipse насчитывалось 1090 утвержденных плагинов, беспрецедентно увеличивших его возможности.
Когнитивизм — это направление в гуманитарной науке, изучающее знание и познание, восприятие мира в процессе деятельности людей, причем ". . . исследуются не просто наблюдаемые действия, а их ментальные репрезентации (внутреннее представление модели), символы, стратегии человека, которые и порождают действия на основе знаний". Иначе говоря, вы можете одно и то же показать в разных формах — в одних это понятно, в других требует какого-то обдумывания, размышления.
За последние два десятилетия когнитивное направление сильно изменило науку. Появились когнитивная лингвистика, когнитивная психология. В настоящее время идет внедрение когнитивизма еще и в компьютерные науки.
Когнитивная лингвистика рассматривает лишь ту часть информации, которая отражается в вербальном языке. То, что называется Usability, — это создание когнитивного интерфейса, т.е. интерфейса понятного человеку. В компьютерных науках уже давно используются вербальные и невербальные языки, а также сочетания невербального и вербального компонентов.
Вы, наверно, обратили внимание, что в математике и компьютерных науках существуют вещи, осваиваемые с большим трудом. Причина в том, что за новыми для обучаемого понятиями еще нет внутреннего естественного для человека образа. У него нет пока возможности, метафорически мысля,
привязать вводимые понятия к уже имеющимся понятиям, а потом их развивать. Следует помнить, что мы создаем приложения, с которыми работают человек и компьютер. Поэтому нужно заботиться не только о компьютере (быстродействие, память, надежность и т.п.), но и о человеке. Человек — самое слабое звено в работе и в процессе создания информационных систем. Если форма представления модели, языка или интерфейса не когнитивна, т.е. с ней в вашем мышлении ничего не связано, то вы многого не понимаете. Очевидно, все, что показывают человеку в интерфейсе, должно быть "схвачено" им, должно работать образное восприятие. Скажем, таблица для человека — это, прежде всего, некий образ, воспринимаемый на уровне подсознания, гештальт.
Обилие языков, используемых для создания информационных систем (ИС), объясняется, прежде всего, сложностью этих систем. Приходится создавать несколько типов моделей так, чтобы каждая из них отражала только некоторые особенности систем. Это делает модели доступными человеку, когнитивными. На рисунке 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 год | Сейчас |
Сократить список используемых языков можно, переходя на языки сверхвысокого уровня (по сравнению с сегодняшним уровнем языков четвертого поколения). Есть обоснованное предположение о том, что языки более высокого уровня потребуют использования систем с высоким встроенным интеллектом и развитой семантикой.
Можно спросить, а зачем мы выходим за рамки языков баз данных, в которых и без того есть что изучать? Причин несколько. Во-первых, языки баз данных могут встраиваться в языки общего назначения. Во-вторых, современные базы чаще всего работают в рамках трехзвенной архитектуры приложений, и некоторые операции могут проводиться на серверах баз данных, другие —на серверах приложений, а какие-то —на клиентской части. Языка, одинаково пригодного для всех этих звеньев, не существует. В-третьих, распределенная база может быть гетерогенной, то есть содержать локальные базы, написанные на разных языках. Необходимо как-то организовать обмен между ними и согласование данных.
Практически всегда модели данных, используемые в базе, в интерфейсе пользователя и интерфейсах обмена между ИС не совпадают. Поэтому необходимо наладить отображение данных (mapping) между ними.
В соответствии с принятым стилем изложения вы будете создавать примеры запросов в обоих исчислениях, используя уже известный вам инструмент WinRDBI. Материал лучше осваивается, если решать примеры. И когда вас просят потренироваться писать запросы на языках, которые не используются в промышленных СУБД, это не означает просьбу посетить кладбище погибших языков и отдать дань почившим. Многое из того, что вы при этом узнаете, переносится на действующие языки. Вы будете лучше понимать пути развития языков и подготовитесь к восприятию будущих нововведений.
Затем обратимся к лингвистике естественных языков для того, чтобы выяснить ограничения, которые они накладывают на восприятие мира носителями этих языков. Это позволит нам предположить наличие подобных или еще более сильных ограничений в искусственных языках и объяснить необходимость совместного использования нескольких таких языков.
Мы введем также общее представление о когнитивном направлении в науке и покажем, почему этот аспект важен для языков программирования вообще и языков баз данных в частности.
В конце лекции перечислим некоторые языки, используемые для создания информационных систем. Это позволит лучше понять роль и место реляционной модели и связанных с ней языков в общей проблематике баз данных и информационных систем.
Возможности языка реляционной алгебры ограничены. Перечислим некоторые типы запросов, не выразимых средствами реляционной алгебры:
sal?");Запросы первого типа требуют использования языков, основанных на логике предикатов второго порядка, у которых кванторы могут навешиваться не только на переменные, как у языков первого порядка, но и на имена предикатов.
Типичный пример запроса второго типа рассмотрен далее. Станет понятно, что для записи такого запроса язык должен использовать рекурсию.
Мы будем работать с таблицами учебной схемы Scott, заимствованной из Oracle. В ней таблица emp (сотрудники) содержит иерархическую структуру организации. empno — табельный номер, ename — имя сотрудника, job — должность, mgr — табельный номер непосредственного начальника, hiredate — дата приема на работу, sal — зарплата, comm — комиссионные, deptno — номер отдела (таблица 7.1).
| * 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, который мы будем изучать в следующей главе, рекурсивные запросы возможны.
В соответствии с общими понятиями семиотики будем выделять синтаксис (способ записи чего-либо), семантику (смыслы) и прагматику (способы употребления). Эта трехчастная конструкция называется треугольником Фреге. Заметим, что насыщение баз данных смыслами мало изучено, но может представлять большой интерес как для практики, так и для обучения.
Займемся исчислениями. Изложение по недостатку места и времени будет неполным и поверхностным, но достаточным для практического освоения исчислений на кортежах и доменах.
Определение. Исчисление — это "дедуктивная система, т.е. способ задания множества путем указания исходных элементов (аксиом исчисления) и правил вывода, каждое из которых описывает, как строить новые элементы из исходных и уже построенных. Выводом в исчислении G называется такое линейно упорядоченное множество, что всякий его элемент Р является либо аксиомой исчисления G, либо заключением применения какого-либо принадлежащего О правила вывода, причем все посылки этого применения предшествуют Р в выводе".
Дедуктивной называют систему, в которой работает дедуктивный вывод.
Исчисление высказываний изучает логические связи между высказываниями, рассматриваемыми как единое целое, без учета их строения. Значений истинности два. Третье значение истинности "полуистинно-полуложно" (или значение "не знаю"), связанное с NULL, здесь не используется.
Исчисление предикатов формализует логику, изучающую субъектно-предикатную структуру высказываний. Предполагается, что в высказывании есть некоторые переменные, и потому истинность предиката может быть разной в зависимости от того, как вы означите эти переменные.
Когда вы будете пытаться понять разницу в эффективности языков, основанных на исчислениях и на реляционной алгебре, обратите внимание на то, что в школьной математике принято допускать одну неточность. Операции над множествами и логические операции там часто иллюстрируют на примере линейно упорядоченных множеств. То есть работают с интервальными, а не произвольными множествами. Потому операции над множествами и эквивалентные операции над соответствующими предикатами, по сути, совпадают, точнее, находятся во взаимно-однозначном соответствии.
Отношения — это неупорядоченные множества кортежей, и потому вычисление предикатов может быть существенно эффективнее действий над множествами кортежей. В алгебре результат каждой операции — это промежуточное отношение, которое в реализациях языка должно быть создано. При этом работают со всеми кортежами, а не только с граничными элементами, как в интервальных множествах. В простых запросах в исчислениях могут проверяться сложные условия, выраженные предикатами, и строиться единственное результирующее отношение.
Исчисление высказываний не позволяет оперировать обобщенными утверждениями, содержащими переменные. Этот недостаток устраняется использованием предикатов.
Определение. Предикат $$P(X_1,\dots,X_n)$$ —это утверждение $$Р$$ об объектах $$X_1,\dots,X_n$$.
Сами объекты $$X_1,\dots,X_n$$могут рассматриваться как переменные, означивая которые мы получаем из предиката высказывания с разными значениями истинности. Можно понимать предикат как функцию в множество значений истинности $$\{0,1\}$$. Примеры:
Здесь "погода" — предикатный символ (предикат); $$D$$ и $$W$$ — переменные; "вторник", "дождь" — константы.
Одноместные предикаты обозначают свойства (например, "быть человеком"), предикаты двухместные и с большей арностью обозначают отношения и операции. Пример: двухместный предикат "выше, чем".
Особый интерес представляют предикаты, значение истинности которых определяется на некотором наборе переменных. Высказывания о множествах объектов строятся с помощью кванторов.
Широко используются:
Реже употребляется: сильный квантор существования $$\exists !$$ - "существует единственный". Примеры:
Переменная, на которую навешен квантор, называется связанной. Например, в формулах $$\forall X (X=Y)$$ и $$\exists X (X=Y)$$ переменная $$X$$ связана, а $$Y$$ свободна.
Важно понимать, что исчисление или формальная теория —это система правил оперирования со знаками, используемая для доказательства или опровержения предложений, выразимых с помощью допустимого набора знаков. Исчисления работают с так называемыми правильно построенными формулами (ППФ). Аксиомы — это набор ППФ, принятых за исходные. В самом исчислении нет представления об истинности аксиом.
Кроме знаков ничего нет — никаких смыслов. Но исчисление может быть интерпретировано. И вот тогда появляется семантика.
Исчисление состоит из:
Выделяют логические аксиомы, определяющие базовую логику. Специфика теории может потребовать добавления нелогических аксиом.
Мы будем рассматривать исчисления с конечным алфавитом, конечным числом аксиом и формулами конечной длины.
Используются, в частности, следующие правила вывода:
Формальное доказательство формулы $$А$$ в исчислении — это построение конечной последовательности формул $$A_1, A_2,\dots,A_n$$, причем, $$А = А_n$$. Каждая из формул $$A_i$$ этой цепочки либо аксиома, либо получена из других формул с помощью правил вывода. $$А$$ называется теоремой. С помощью символа "доказуемо" $$\vdash$$ запишем этот факт как $$\vdash А$$.
Определяющими свойствами любого исчисления являются полнота и непротиворечивость.
Определение (Полнота). Формальная теория называется полной, если для любого высказывания А логики предикатов или $$\vdash A$$ или $$\vdash\urcorner A$$
Определение (Непротиворечивость). Формальная теория называется непротиворечивой, если формула $$A\\urcorner A$$ в ней недоказуема для произвольного высказывания А теории.
Замечание. Как показал К. Гедель в своей знаменитой теореме о неполноте арифметической логики, доказательство непротиворечивости невозможно выполнить даже в рамках формальных теорий для простых математических объектов.
Реляционная алгебра определяет набор операций, комбинируя которые, можно создать отношение, которое представляет ответ на запрос.
Существует еще три в некотором смысле эквивалентных подхода к построению систем запросов - реляционные исчисления на кортежах, на доменах и, так называемые, табло.
Знания только реляционной алгебры даже для практики недостаточно, потому что два наиболее известных языка для работы с реляционными базами данных — SQL (Structured Query Language) и QBE (Query-by-Example) — основаны, соответственно, на реляционных исчислениях на кортежах и доменах.
В настоящее время языками, основанными на реляционной алгебре, не пользуются. Так зачем же мы ее изучаем? По двум причинам:
Определение. Язык запросов к базе данных, способный моделировать реляционную алгебру, обладает свойством реляционной полноты. Используемые в практике языки сверхполны, то есть кроме реляционных запросов, они позволяют делать много чего еще. Понятно, что реляционно-неполные языки интереса не представляют.
Удобство исчислений в том, что в запросах формируются условия, которым должен удовлетворять результат запроса. По ним и отбираются строки. В запросах реляционной алгебры при выполнении каждой операции последовательно получаются промежуточные отношения. Это замедляет получение ответа.
Определение. Высказывание — это утверждение, которое имеет однозначно определенное значение истинности. Высказывание в логике предикатов — это формула, все переменные которой связаны кванторами.
Заметьте, что нас по-прежнему не волнует смысл. Иначе говоря, исчисление дает форму, в которой могут быть сделаны правильные выводы, то есть утверждает, что из набора ППФ можно (или нельзя) построить заданную ППФ. И ничего более.
Определение. Символы исчисления высказываний — это символы высказываний А,В,С, ..., символы значений истинности Т,_1_ и символы логических связок $$\vee$$,$$\$$, $$\urcorner$$, $$\Rightarrow$$.
Определение. Правильно построенные формулы (ППФ):
Системы аксиом исчисления высказываний (например, аксиоматика Кли-ни) хорошо исследованы, но мы их не рассматриваем, так как не будем строить доказательства, исходя из выбранной системы аксиом.
Логика высказываний расширяется до логики предикатов путем включения в формулы утверждений, являющихся предикатами. Естественно, появляются и предикатные переменные. Поэтому определение ППФ усложняется.
Определение (Терм).
Определение (Формула).
При внимательном прочтении приведенного выше определения терма должны возникнуть вопросы:
Ответ на первый вопрос: $$n$$-местный предикат на множестве $$М$$ задает отображение$$M^n\to \{\top,\bot\}$$, а $$n$$-местная функция определяет отображение$$M^n\to M$$.
Ответ на второй вопрос: 0-местная функция $$M^0\to M$$ отождествляется с элементом множества $$М$$. Не всегда удобно иметь отдельный символ для каждого элемента множества $$М$$. Функциональные символы позволяют дать более сжатое представление. Например, фраза естественного языка "моя левая нога" может пониматься как существование левой ноги у субъекта "Я" и записываться как функция "ЛеваяНога(Я)", что позволяет не именовать по отдельности левые ноги всех людей.
Учтите, что за определенной таким образом функцией не предполагается никакой процедуры ее вычисления.
Для определения узкого исчисления предикатов необходимо определить набор допустимых символов, правильно построенные формулы, набор аксиом и правила вывода.
Определение. Символы исчисления предикатов — это символы переменных, констант, функций и предикатов, символы значений истинности $$\top,\bot$$ , символы логических связок $$\vee ,\, \urcorner, \Rightarrow$$ и кванторы общности $$\forall$$ и существования $$\exists$$.
Правильно построенные формулы и входящие в них термы определены выше. Набор аксиом включает аксиомы исчисления высказываний и следующие дополнительные аксиомы:
Дополнительные правила вывода:
К дополнительным правилам вывода относят еще "исключение ", "введение " и "универсальное инстанцирование".
Определение. "Исключение " —это вывод истинности обоих конъюнктов $$А$$ и $$В $$из истинности $$А\В$$.
Определение. "Введение " — это вывод истинности $$А\В$$ из истинности обоих конъюнктов А и В.
Определение (Правило универсального инстанцирования). Если любую переменную, стоящую под квантором всеобщности, заменить на любой терм из области определения, то полученное выражение истинно. Например, если терм А принадлежит той же области определения, что $$X$$, и $$\forall XP(X)$$, то выводимо $$Р(А)$$.
Исчисление первого порядка: В исчислении первого порядка можно связывать знаком квантора только переменные, но не функции или предикаты.
Исчисление высших порядков: В исчислении предикатов высших порядков можно связывать знаком квантора не только переменные, но и функции и предикаты.
Пусть требуется найти отношение, в котором имеется заданный атрибут $$SAL$$. Это запрос в логике второго порядка. Ему соответствует формула:
$$\exists Р ~ (SAL~ есть предикатная переменная в Р)$$
в которой квантор навешен на имя предиката Р.
В рамках реляционной теории можно работать только с кортежами, но не с отношениями. В реализациях баз данных существует словарь. Это база метаданных, обычно реляционного типа. Словарь содержит сведения о созданных таблицах, их столбцах, ограничениях целостности и т.д. В реляционной модели данных словарь не предполагается. В этом одно из существенных различий между реляционной моделью и моделями данных реальных СУБД. Именно наличие словаря позволяет писать запросы в логике второго порядка.
Прикладное исчисление предикатов: В такое исчисление введены дополнительные знаки констант, функций, операций, предикатов и дополнительные аксиомы, связывающие эти новые знаки.
Пример: Исчисление предикатов с равенством.
В реляционном исчислении на кортежах (Tuple Relation Calculus — TRC) правильные формулы строятся как описания условий, которым должны удовлетворять кортежи, образующие искомые отношения. Эти условия в простейшем варианте имеют вид: $$\{t|P(t)\}$$. Здесь $$t$$ — переменная, обозначающая некоторый кортеж, а $$Р(t)$$ —предикат. Формула исчисления кортежей описывает множество всех таких кортежей, для которых предикат принимает значение "истина". Общий вид правильно построенных формул исчисления на кортежах приведен в разделе 7.5.5.
Элементарными образующими предиката $$Р(t) $$являются атомы трех видов — переменные кортежи, отношения между кортежами и отношения между кортежем и константой. Опишем их:
Могут использоваться логические операции, кванторы и скобки. Рекурсивное определение правильно построенных формул:
Замечание. Квантор существования в инструментальном средстве WinRDBI обозначается как EXISTS, квантор всеобщности как FORALL.
Здесь $$R$$ и $$S$$ — отношения, $$F$$ — формула.
Как определено ранее, язык запросов к реляционной базе данных называется реляционно-полным, если он, по крайней мере, так же выразителен, как язык запросов реляционной алгебры. Иначе говоря, реляционно-полный язык позволяет, по крайней мере, моделировать язык запросов реляционной алгебры. Используемые в практике языки запросов "более чем полны" за счет:
Запрос (ППФ) имеет вид: $$\{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.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)\}$$ |
Рассмотрим несколько примеров.
Войдите в 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) это квантор существования.
В реляционном исчислении на доменах (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)\}$$.
Запрос имеет вид: $$\{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)$$.
Как в исчислении на кортежах, для доказательства достаточно выразить операции реляционной алгебры через операции исчисления. Обозначим условия принадлежности через $$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)\}$$ |
Войдите в 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)
Результат выполнения любой операции алгебры — это элемент базисного множества. В случае реляционной алгебры - отношение. Ранее было показано, что соединение двух отношений выполняется через декартово произведение, то есть сначала выполняется декартово произведение, а потом на нем выполняется операция селекции. На практике, если таблицы большие, то результата такого запроса придется ждать очень долго. Поэтому от реализации реляционной алгебры отказались очень давно.
Основное отличие языков, основанных на реляционной алгебре и на исчислениях, состоит в уровне процедурности. Запросы, основанные на реляционной алгебре, задают дерево алгебраических операций, то есть имеют однозначную процедурную интерпретацию (с учетом старшинства операций и расстановки скобок). Запрос реляционного исчисления не имеет однозначной процедурной интерпретации. Он только устанавливает условия, которым должны удовлетворять кортежи результирующего отношения. Поэтому языки реляционного исчисления являются менее процедурными и, соответственно, более декларативными.
Любой реляционно-полный язык позволяет не только моделировать язык запросов реляционной алгебры, но и языки запросов реляционных исчислений на кортежах или на доменах. То есть языки исчислений могут быть шире, но минимальный уровень моделируется реляционно-полным языком.
Как отличить математика от нематематика? Показывая на север, вы спрашиваете, можно ли попасть в точку расположенную от вас на юге. Тот, кто скажет "можно", и будет математик. А кто такой лингвист? Это человек, который сначала учится говорить на языке, а потом понимать его.
А если серьезно, то для лиц с математическим мышлением характерно стремление строить аксиоматические теории, в которых использован минимум исходных предположений и возможно получение нового знания дедуктивным путем. Инженер скорее будет строить реализуемую модель или несколько частных моделей, может быть плохо связанных и обоснованных, но полезных для решения некоторого класса задач. Строгость рассуждений для него не так уж важна. Он знает, что принудительные попытки ввести строгость, например, в администрировании баз данных, могут привести к плачевным результатам. Насколько я понимаю, лингвист строит своеобразные модели, в которых обычно ищутся новые смыслы наблюдаемых явлений. Он не собирается создавать чего-нибудь вроде информационной системы, но использует аналогии, рассуждения на примерах, обосновывает свои положения ссылкой на типичность или массовость явления.
Мне кажется, что в нашей области полезно сочетать особенности этих трех специалистов, насколько это возможно, и там, где это уместно. Знания каждого из них адекватны некоторому аспекту действительности. Небольшую часть этих знаний мы постараемся использовать.
Рассмотрим используемые нами искусственные языки с точки зрения лингвистики естественных языков.
Давно известна гипотеза Сепира-Уорфа, сформулированная, конечно, для естественных языков. Процитируем Уорфа: "Мы выделяем в мире явлений те или иные категории и типы совсем не потому, что они (категории и типы) самоочевидны; напротив, мир предстает перед нами как калейдоскопический поток впечатлений, который должен быть организован нашим сознанием, а это значит — в основном, языковой системой, хранящейся в нашем сознании. . . Мы сталкиваемся, таким образом, с новым принципом относительности, который гласит, что сходные физические явления позволяют создать сходную картину вселенной только при сходстве или, по крайней мере, при соотносительности языковых систем".
Все, что мы можем выразить в языке, является отображением каких-то мысленных структур, связанных с языком. И ничего с этим поделать нельзя. Первая работа Сепира была сделана на материале языков у американских индейцев, у которых нет понятия "отрезок времени". То, что мы называем отрезком времени, для них — процесс. Они четко знают, что есть некая подготовка к действию, совершение действия, что-то после этого действия следует. Они не могут сказать "через три дня", а только "прожив три дня". Наш отрезок времени для них — это процесс, и его нужно каким-то образом пройти. Все мы находимся в плену тех языков, которыми мы владеем. Если индейцы с их языками показались вам примитивными, вспомните, как трудно было после школьного Бейсика осваивать функциональное и логическое программирование. Как сказала одна моя студентка: "Пролог хороший язык, но если бы в него еще добавили циклы!"
По-видимому, гипотеза Сепира-Уорфа в полной мере применима к искусственным языкам. Прежде всего, мы работаем в рамках терминосистем используемых языков программирования и предметной области, которые не всегда четко фиксируются и имеют наклонность меняться со временем. Вы думаете, что русский крестьянин 200 лет тому назад, не смог бы объяснить что такое самолет? "Да это такая лодка, которая крепится под углом к течению, на колесиках к тросу натянутому поперек реки. Она без усилий человека сама идет на другой берег. Потому и называется самолет".
Термин "язык" воспринимается по-разному в компьютерных науках и в лингвистике. В искусственных языках изучаются в первую очередь синтаксис и прагматика, то есть способ употребления. Смыслами данных занимаются не слишком активно. Как вы увидите позже, семантика недостаточно отражается в базах данных, даже если используются модели, названные в главе 2 семантическими. Необходимы усилия для того, чтобы обогатить базу данных смыслами и создать программное обеспечение, которое эти смыслы воспринимает.
Мы уже освоили язык реляционной алгебры, который играет особую роль эталонного языка в базах данных реляционного типа и определили свойство реляционной полноты.
Заметим, что все естественные языки (ЕЯ) —это наивные модели почти одного и того же окружающего нас мира. Естественно, есть нюансы, определяемые условиями обитания. Естественный язык живет, пока живут его носители и сохраняется их образ жизни. Существует понятие "вмещающая среда". Для естественных языков - это люди, книги, аудио- и видеозаписи, компьютеры и т.д.
Естественные языки складывались в процессе длительной эволюции.
Искусственные языки (ИЯ) существенно отличаются от естественных по происхождению и вмещающей среде, зачастую предполагающей в качестве носителей языка кроме человека еще и компьютер. Сфера их применения существенно уже. Именно поэтому несколько ИЯ часто используются совместно.
Из всех функций ЕЯ в ИЯ в полной мере развита только коммуникативная. Не нужна, естественно, экспрессивная функция (выражение эмоций). Недостаточно развита аккумулятивная функция, обеспечивающая сохранение опыта и знаний или способ обозначения своей идентичности. Обычно, "поговорив" с машиной, мы не можем изменить лексику языка, на котором она с нами общается. В настоящее время знания в базах данных, как правило, не создаются машиной и не аккумулируются. В языках баз данных нет запросов, использующих знания, характерные для предметной области. Например, мы не можем написать запрос на поиск лошадиных фамилий, как в рассказе Чехова "Лошадиная фамилия", в котором персонаж пытается вспомнить фамилию, относящуюся к лошадям, и в самом конце он вспоминает ее — Овсов. Заметим, что использование онтологий уже позволяет решить эту задачу. Подключив онтологии к базам данных, можно формировать необычные запросы, учитывающие не только данные базы, но и их смыслы. Если, например, запрос возвращает пустой ответ, то, может быть, иногда имеет смысл, исходя из семантики задачи, изменить условия запроса и добиться содержательного ответа?
В искусственных языках почти не используется конструктивная функция ЕЯ, которую в контексте ИЯ можно рассматривать как функцию формирования знаний. Например, есть таблицы, в них есть строки определенного формата. А как в базу внести строчку формата, которого нет? Вообще говоря, никак. Даже если заменить вставку строки на команду создания отношения, своего для каждой такой строки, то необходимо сначала выяснить их смысл и определить, что с ними потом делать?
Существуют смешанные языки программирования, в которых один язык встраивается в другой. Типичный пример — серверные страницы (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>
Будем называть вербальными искусственные языки, в которых порождаемые инструкции представляют последовательность символов, разделенную на слова. Кроме вербальных языков в информационных системах используют невербальные языки. Это графические, диаграммные языки.
Основные особенности ИЯ, отличающие их от ЕЯ:
В языках специфичных для предметной области DSL (Domain Specific Language), в системах управляемых моделями MDA (Model Driven Architecture) может сужаться область применения языка а, значит, и число его "носителей". В MDA предполагается существование некоторого универсального интерпретатора. Достаточно разработать модель информационной системы, а интерпретатор обеспечит работу приложения. С одной стороны, это эффективный способ повышения уровня языка разработки. С другой стороны, специфичность языка моделирования может определить узость применения.
Опыт показывает, что если язык или среда разработки используется мало, то он, как минимум, плохо развивается. Например, Eclipse нравится очень многим программистам, и поэтому в 2008 году под Eclipse насчитывалось 1090 утвержденных плагинов, беспрецедентно увеличивших его возможности.
Когнитивизм — это направление в гуманитарной науке, изучающее знание и познание, восприятие мира в процессе деятельности людей, причем ". . . исследуются не просто наблюдаемые действия, а их ментальные репрезентации (внутреннее представление модели), символы, стратегии человека, которые и порождают действия на основе знаний". Иначе говоря, вы можете одно и то же показать в разных формах — в одних это понятно, в других требует какого-то обдумывания, размышления.
За последние два десятилетия когнитивное направление сильно изменило науку. Появились когнитивная лингвистика, когнитивная психология. В настоящее время идет внедрение когнитивизма еще и в компьютерные науки.
Когнитивная лингвистика рассматривает лишь ту часть информации, которая отражается в вербальном языке. То, что называется Usability, — это создание когнитивного интерфейса, т.е. интерфейса понятного человеку. В компьютерных науках уже давно используются вербальные и невербальные языки, а также сочетания невербального и вербального компонентов.
Вы, наверно, обратили внимание, что в математике и компьютерных науках существуют вещи, осваиваемые с большим трудом. Причина в том, что за новыми для обучаемого понятиями еще нет внутреннего естественного для человека образа. У него нет пока возможности, метафорически мысля,
привязать вводимые понятия к уже имеющимся понятиям, а потом их развивать. Следует помнить, что мы создаем приложения, с которыми работают человек и компьютер. Поэтому нужно заботиться не только о компьютере (быстродействие, память, надежность и т.п.), но и о человеке. Человек — самое слабое звено в работе и в процессе создания информационных систем. Если форма представления модели, языка или интерфейса не когнитивна, т.е. с ней в вашем мышлении ничего не связано, то вы многого не понимаете. Очевидно, все, что показывают человеку в интерфейсе, должно быть "схвачено" им, должно работать образное восприятие. Скажем, таблица для человека — это, прежде всего, некий образ, воспринимаемый на уровне подсознания, гештальт.
Обилие языков, используемых для создания информационных систем (ИС), объясняется, прежде всего, сложностью этих систем. Приходится создавать несколько типов моделей так, чтобы каждая из них отражала только некоторые особенности систем. Это делает модели доступными человеку, когнитивными. На рисунке 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 год | Сейчас |
Сократить список используемых языков можно, переходя на языки сверхвысокого уровня (по сравнению с сегодняшним уровнем языков четвертого поколения). Есть обоснованное предположение о том, что языки более высокого уровня потребуют использования систем с высоким встроенным интеллектом и развитой семантикой.
Можно спросить, а зачем мы выходим за рамки языков баз данных, в которых и без того есть что изучать? Причин несколько. Во-первых, языки баз данных могут встраиваться в языки общего назначения. Во-вторых, современные базы чаще всего работают в рамках трехзвенной архитектуры приложений, и некоторые операции могут проводиться на серверах баз данных, другие —на серверах приложений, а какие-то —на клиентской части. Языка, одинаково пригодного для всех этих звеньев, не существует. В-третьих, распределенная база может быть гетерогенной, то есть содержать локальные базы, написанные на разных языках. Необходимо как-то организовать обмен между ними и согласование данных.
Практически всегда модели данных, используемые в базе, в интерфейсе пользователя и интерфейсах обмена между ИС не совпадают. Поэтому необходимо наладить отображение данных (mapping) между ними.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.