Лингвистические средства БД
Многоуровневое представление БД предполагает соответствующие описания данных на каждом уровне и согласование одних и тех же данных на разных уровнях. С этой целью в состав СУБД включаются специальные языки для описания представлений внутреннего и внешнего уровней. Кроме того, в СУБД используется язык манипулирования данными (ЯМД). Желательно, также наличие тех или иных дополнительных сервисных средств, например, средств генерации отчетов.
Работа с БД предполагает несколько этапов:
● описание БД;
● описание частей БД, необходимых для конкретных приложений (задач, групп задач);
● программирование задач или описание запросов в соответствии с правилами конкретного языка и использованием языковых конструкций для обращения к БД;
● загрузка БД и т. д.
Для выражения обобщенного взгляда на данные применяют язык описания данных (ЯОД) внутреннего уровня, включаемый в состав СУБД[1]. Описание представляет модель данных и их отношений, т.е. структур, из которых образуется БД.
ЯОД позволяет определять схемы БД, характеристики хранимых и виртуальных данных и параметры организации их хранения в памяти, и может включать средства поддержки целостности БД, ограничения доступа, секретности.
ЯМД обычно включает средства запросов к БД и поддержания БД (добавление, удаление, обновление данных, создание и уничтожение БД, изменение определений БД, обеспечение запросов к справочнику БД).
Исторически первым типом структур данных, включённым в языки программирования, была иерархическая структура. Некоторые ранние СУБД также предполагали использование в качестве основной модели иерархические структуры типа дерева. Основанием для такого выбора было удобство представления (моделирования) естественных иерархических структур данных, существующих, например, в организациях.
В ряде предметных областей структура данных имеет более сложный вид, поддерживает связи типа «многие к одному», которые могут быть представлены ориентированным графом. Такие структуры называют сетевыми. Для управления БД сетевой структуры международной ассоциацией Кодасил предложена обобщённая архитектура системы с ЯОД схемы (модели БД) и подсхемы (модели части БД для конкретного приложения), а также ЯМД для оперирования с данными БД в прикладных программах.
Разработаны десятки языков, основанных на реляционном исчислении, различие которых обусловлено особенностями математических теорий, положенных в основу их построения. Среди этих языков, можно выделить языки, основанные на С-исчислении, предложенном Коддом, и Р-исчислении, предложенном Пиротти. Функциональные характеристики языков отражают возможности описания данных, средств представления запроса, обновления, поддержки целостности и секретности, включения в языки программирования, управления форматом ответов, средств запроса к словарю данных БД и т.д.
Качественные характеристики языков запросов могут определяться такими свойствами, как полнота, селективная мощность, простота изучения и использования, степень процедурности и модульности, унифицированность, производительность и эффективность. Рассмотрим некоторые из этих понятий.
Селективная мощность языков запросов характеризует возможность выбора данных по разным критериям. Данное понятие плохо поддается формализации: можно сказать, что язык с большей селективной мощностью позволяет сформулировать большинство запросов так, что ответ на них содержит меньше ненужных данных. Языки, обладающие малой селективной мощностью, в общем случае уже требуют привлечения дополнительных средств для анализа ответов на запросы (например, оценки пользователя).
Простота изучения является во многом субъективной оценкой и может быть в некоторой мере охарактеризована степенью его близости к естественному языку, требуемым для его освоения временем и необходимым уровнем подготовки пользователя.
Высокий уровень процедурности, свойственный реляционным языкам, определяется присущими реляционной модели свойствами, в частности, полным отделением логической структуры данных от структур хранения и стратегий доступа. Снижение уровня процедурности увеличивает свободу в выборе способов реализации языка, что позволяет осуществить его реализацию более оптимальным способом. Необходимо отметить, что меньшая степень процедурности ещё не означает автоматически меньшую сложность написания запросов. Некоторые сложные запросы можно более просто сформулировать в виде алгоритма поиска ответа, в то время как его формулировка в декларативном виде может оказаться достаточно трудной.
Модульность построения языка характеризует возможность существования нескольких уровней языка и зависит от специфических свойств математической теории, лежащей в его основе. Минимальный уровень языка, обычно легко понимаемый пользователем, бывает достаточным для формулирования большинства запросов, и лишь формулировка сложных запросов может потребовать использования всех выразительных средств языка, о существовании которых пользователи начального уровня могут и не знать. Языки, не обладающие модульностью, требуют от пользователя знания почти всего объёма средств языка, что усложняет процесс их изучения.
Наиболее распространенным языком для работы с БД является SQL (StructuredQueryLanguage), в своих последних реализациях предоставляющий не только средства для спецификации и обработки запросов на выборку данных, но и функции по созданию, обновлению, управлению доступом и т.д.
По существу SQL соединяет и язык описания данных, и язык манипулирования данными. Он не является полноценным языком программирования и, в случае его использования для организации доступа к БД из прикладных программ, SQL-выражения встраиваются в конструкции базового языка.
Являясь внутренним языком БД, SQL естественно отражает особенности конкретной СУБД. Сегодня это единственный стандартизованный язык фактографических БД, достаточно мощный и в тоже время, простой для понимания и использования. Сочетание этих факторов вместе с поддержкой ведущих производителей, таких как IBM и Microsoft, привели к его широкому распространению и совершенствованию. Благодаря независимости от конкретных СУБД и межплатформенной переносимости, SQL стал языком распределённых баз данных (РБД) и языком шлюзов, позволяющим совместно использовать СУБД разного типа.