Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 12.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.58 Mб
Скачать

Глава 12

Семантические базы данных

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

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

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

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

Рассмотрим моделирование одних моделей данных в других (эмулирование), выясним достоинства, недостатки и области применения такого подхода, а также связанные с ним изменения семантики данных.

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

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

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

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

В предыдущих главах значения, хранящиеся в базе, предполагались атомарными. С точки зрения отображаемой модели бизнеса они могли быть сколько угодно сложными, но рамках использованной модели данных работать с их компонентами нельзя. В базах данных давно используются модели, которые мы будем называть двухслойными. Роль первого слоя выполняет любая модель данных, для которой организованы структуры хранения данных. Второй слой работает с данными, которые ему предоставляет первый слой, но данные в нём считаются не атомарными, а известным образом организованными. Практически во всех СУБД во втором слое применяются регулярные выражения и/или различные виды XML данных. Понятно, что второй слой не влияет на структуры хранения данных непосредственно, но может предъявлять свои требования к их организации.

Вторая возможность расширения обычных моделей данных связана с хранением дополнительной семантики данных. Можно учесть особенности использования атрибутов, выделяя их разновидности – сорта. Дальше мы отметим, что сущности с обычными (обязательными) атрибутами определяют замкнутые и статические объекты. Сущности с атрибутами других сортов могут быть открытыми и динамическими.

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

Полезно заимствовать опыт тех областей знания, в которых давно занимаются семантикой. Это лингвистика, исследующаяся естественные языки (ЕЯ), и теория языков программирования.

Прежде всего, отметим несоответствие некоторых терминов в лингвистике и информатике. Лингвисты выделяют два противопоставляемых вида элементов семантики – значения и смыслы. Значение лингвистического знака понимается как нечто стабильное, что можно сначала установить, выяснить, а затем знать. Смысл приходится всё время искать, устанавливать, разгадывать. В информатике термин ”значение” уже занят. Говоря ”переменная имеет значение” подразумеваем не семантику этой переменной, а присваивание ей конкретного экземпляра данных, или означивание, или создание экземпляра переменной, содержащего этот элемент данных. Поэтому элементы семантики мы всегда будем называть смыслами, а ”стабильность” или “контекстность” или “вариативность” смыслов будем задавать через классификацию смыслов или вводя в них дополнительные свойства.

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

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

Вернемся к терминологии баз данных. Существует безосновательная, но устойчивая традиция выделять некоторые модели и базы данных как семантические (и мы тут не без греха). Так модель «сущность-связь» считается семантической моделью, по-видимому, по сравнению с табличными моделями данных. Однако, семантика, обычно ограниченная, есть в любых моделях данных. Поэтому, еще в 1988 году Э. Кодд отметил, что “ярлык “семантическое” не должен интерпретироваться в каком-либо абсолютном смысле”. В тех же табличных базах семантику определяют, в частности, ключи и ограничения целостности. В базах данных с декларативными языками всегда реализуется операционная семантика, представляемая, например, планами исполнения SQL. Так что следует говорить только о большей или меньшей насыщенности моделей и баз данных семантикой.

Как же отделить элементы семантики, хранимые в базе, от обычных данных? По очень простому признаку: элементы семантики, они же смыслы, обладают активностью. Данные всегда пассивны.

Поясним сказанное на простом примере. Пусть, необходимо выбрать все записи из таблицы, например, инструкцией SELECT * FROM emp. Очевидно, СУБД должна сначала проверить существование таблицы emp по словарю и, может быть, установить, имеются ли у действующего пользователя необходимые права на эту таблицу. Если таблица не существует или недоступна, выдать сообщение об ошибке. В противном случае, установить список столбцов emp и только после этого приступить к выборке данных. Как много делается того, что прямо не было указано! Всё это обеспечивает активность, которой обладают метаданные.

Ещё один пример. Пусть мы вставляем строку в таблицу, имеющую первичный ключ. Поскольку ограничение ”первичный ключ” активно, СУБД сначала проверит уникальность вводимого значения ключа, и только если это условие выполнено, сделает то, что ей приказали – введёт запись.

Заметим, что активность смыслов выводит модели данных со смыслами за рамки обычных чисто алгебраических моделей данных.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]