Электронная библиотека » Владимир Илюшечкин » » онлайн чтение - страница 4


  • Текст добавлен: 27 мая 2022, 23:23


Автор книги: Владимир Илюшечкин


Жанр: Базы данных, Компьютеры


сообщить о неприемлемом содержимом

Текущая страница: 4 (всего у книги 14 страниц) [доступный отрывок для чтения: 4 страниц]

Шрифт:
- 100% +

Глава 3
Языки баз данных

Язык для работы с данными, который способна воспринимать СУБД, состоит из двух частей: языка определения данных (Data Definition Language – DDL) и языка манипулирования данными (Data Manipulation Language – DML). Язык DDL используется для определения схемы базы данных, а язык DML – для чтения и обновления данных, хранимых в базе. Эти языки называются подъязыками данных [13], поскольку в них отсутствуют такие конструкции для выполнения вычислительных операций, обычно используемых в языках программирования высокого уровня, как условные операторы или операторы цикла.

Во многих СУБД предусмотрена возможность включения операторов подъязыка данных в программы, написанные на таких языках программирования высокого уровня, как Pascal, С, C++, Java или Visual Basic. В этом случае язык высокого уровня принято называть базовым включающим языком (host language). Перед компиляцией программы на базовом языке, содержащей включенные операторы подъязыка данных, такие операторы удаляются и заменяются вызовами функций. Затем эта предварительно обработанная программа обычным образом компилируется с помещением результатов в объектный модуль, который компонуется с библиотекой, содержащей вызываемые в программе функции СУБД. После этого полученный программный код готов к выполнению.

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

3.1. Язык определения данных (DDL)

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

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

Результатом компиляции DDL-операторов является набор таблиц, хранимый в особых файлах, называемых системным каталогом. В системном каталоге интегрированы метаданные, т. е. данные, которые описывают объекты базы данных, а также позволяют упростить способ доступа к ним и управления ими. Метаданные включают определения записей, элементов данных, а также других объектов, представляющих интерес для пользователей или необходимых для работы СУБД. Перед доступом к реальным данным СУБД обычно обращается к системному каталогу. Синонимами термина «системный каталог» являются «словарь данных» и «каталог данных».

3.2. Язык манипулирования данными (DML)

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

– вставка в базу данных новых сведений;

– модификация сведений, хранимых в базе данных;

– извлечение сведений, содержащихся в базе данных;

– удаление сведений из базы данных.

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

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

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

Часть непроцедурного языка DML, которая отвечает за извлечение данных, называется языком запросов данных (Data Query Language – DQL). Язык запросов данных можно определить как высокоуровневый узкоспециализированный язык, предназначенный для удовлетворения различных требований по выборке информации из базы данных. В этом смысле термин «запрос» больше подходит для обозначения оператора извлечения данных, выраженного с помощью языка запросов данных.

Процедурный язык DML сообщает системе о том, какие данные необходимы, и точно указывает, как их можно извлечь. С помощью процедурного языка DML пользователь, а точнее – программист, указывает, какие данные ему необходимы и как их можно получить. Это значит, что пользователь должен определить все операции доступа к данным (осуществляемые посредством вызова соответствующих процедур), которые должны быть выполнены для получения требуемой информации. Обычно такой процедурный язык DML позволяет извлечь запись, обработать ее и, в зависимости от полученных результатов, извлечь другую запись, которая должна быть подвергнута аналогичной обработке, и т. д. Подобный процесс извлечения данных продолжается до тех пор, пока не будут извлечены все запрашиваемые данные. Обычно операторы процедурного языка DML встраиваются в программу на языке программирования высокого уровня, которая содержит конструкции для обеспечения циклической обработки и перехода к другим участкам кода. Языки DML сетевых и иерархических СУБД обычно являются процедурными.

Непроцедурный язык DML позволяет указать лишь то, какие данные требуются, но не то, как их следует извлекать. Непроцедурные языки DML задают весь набор требуемых данных с помощью одного оператора выборки или обновления. С помощью непроцедурных языков DML пользователь указывает, какие данные ему нужны, без определения способа их получения. СУБД транслирует выражение на языке DML в процедуру (или набор процедур), которая обеспечивает манипулирование указанным набором записей. Такой подход освобождает пользователя от необходимости знать подробности внутренней реализации структур данных и особенности алгоритмов, используемых для извлечения и возможного преобразования данных. В результате работа пользователя становится в определенной степени независимой от данных. Непроцедурные языки часто также называют декларативными языками. Реляционные СУБД в той или иной форме обеспечивают поддержку непроцедурных языков манипулирования данными, примерами которых являются структурированный язык запросов SQL и язык запросов по образцу QBE. Непроцедурные языки обычно проще понять и использовать, чем процедурные языки, поскольку пользователю достается меньшая часть работы, а СУБД – большая.

3.3. Генераторы

Генераторы относятся к языкам четвертого поколения (4GL). Если для организации некоторой операции с данными на языке третьего поколения (3GL) типа C++ потребуется написать сотни строк кода, то для реализации этой же операции на языке четвертого поколения достаточно 10–20 строк. В то время как языки третьего поколения являются процедурными, языки 4GL выступают как непроцедурные, поскольку пользователь определяет, что должно быть сделано, но не сообщает, как именно должен быть получен желаемый результат. Реализация языков четвертого поколения в значительной мере основана на использовании компонентов высокого уровня. Пользователю не требуется определять все этапы выполнения программы, необходимые для решения поставленной задачи, а достаточно лишь задать нужные параметры, на основании которых упомянутые выше компоненты автоматически осуществят генерацию приложения. В ряде случаев языки четвертого поколения позволяют повысить производительность труда на порядок, но за счет ограничения типов задач, которые можно будет решать с их помощью. Выделяют следующие типы языков четвертого поколения [13]:

– языки представления информации, например языки запросов или генераторы отчетов;

– специализированные языки, например языки электронных таблиц и баз данных;

– генераторы приложений, которые при создании приложений обеспечивают определение, вставку, обновление или извлечение сведений из базы данных;

– языки очень высокого уровня, предназначенные для генерации кода приложений.

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

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

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

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

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

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

3.4. Структурированный язык запросов SQL
3.4.1. Стандарты и разновидности языка SQL

Структурированный язык запросов SQL (Structured Query Language) предназначен для обработки и чтения информации, хранящейся в компьютерной базе данных [4]. SQL – это язык программирования, который применяется для организации взаимодействия пользователя с базой данных.

SQL реализован в более чем сотне СУБД, работающих как на персональных, так и больших компьютерах, называемых мэйнфреймами (mainframe). Существует международный стандарт на этот язык.

Работа над официальным стандартом была инициирована Американским институтом национальных стандартов (ANSI) в 1982 г. В 1986 г. стандарт был официально утвержден как стандарт ANSI, а в 1987 г. – в качестве стандарта Международной организации по стандартам (ISO). Этот стандарт, незначительно пересмотренный в 1989 г., обычно называют стандартом SQL-89, SQL1, или стандартом ANSI/ ISO SQL-89.

Следующий стандарт, называемый SQL2, или SQL-92, был принят в ANSI в 1992 г. Незадолго до завершения работ по определению стандарта SQL2 была начата разработка стандарта SQL3. Первоначально планировалось завершить проект в 1995 г. и включить в язык некоторые объектные возможности: определяемые пользователями типы данных, поддержку триггеров и т. д. Реально работу над новым стандартом удалось частично завершить только в 1999 г., и по этой причине стандарт получил название SQL: 1999.

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

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

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

Есть два основных способа применения программного SQL:

1) встроенный SQL; при таком подходе оператор языка SQL либо записывается непосредственно в тексте программы, составляемой на обычном языке программирования, – это статический SQL, либо формируется программой в специальной области памяти – это динамический SQL; затем записанный или сформированный оператор выполняется в ходе исполнения программы;

2) SQL, использующий интерфейс прикладного программирования (API); при этом способе программа взаимодействует с СУБД посредством совокупности функций (API-функций). Вызывая API-функции, программа передает в СУБД операторы SQL и получает обратно результаты запросов.

3.4.2. Основные элементы языка SQLОператоры

В языке SQL имеется приблизительно 30 операторов. Каждый оператор заставляет СУБД выполнить определенное действие, например прочитать данные, создать таблицу или добавить новые данные в таблицу. Все операторы SQL имеют одинаковую структуру (рис. 3.1).

Рис. 3.1. Структура оператора SQL.


Каждый оператор начинается с глагола, т. е. ключевого слова, описывающего действие, выполняемое оператором, например: DELETE (удалить), CREATE (создать), INSERT(добавить), UPDATE (изменить).

После глагола идет одно или несколько предложений или фраз. Предложение (фраза) описывает данные, с которыми работает оператор, или содержит уточняющую информацию о действии, выполняемом оператором. Каждое предложение также начинается с ключевого слова, такого, как WHERE (где), FROM (из), HAVING (имеющий) и т. п.

Одни предложения в операторе являются обязательными, а другие – нет.

В стандарте ANSI/ISO SQL-89 определены ключевые слова, которые применяются в качестве глаголов и в предложениях операторов. В соответствии со стандартом эти ключевые слова нельзя использовать для именования таких объектов БД, как таблицы, столбцы и пользователи.

Правила записи операторов SQL будем описывать с помощью синтаксических диаграмм, одна из которых показана на рис. 3.2.

Рис. 3.2. Синтаксическая диаграмма для оператора DELETE.


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

Имена

У каждого объекта в БД есть уникальное имя. Имена используют в операторах SQL и указывают, над каким объектом БД оператор должен выполнять действие. В соответствии со стандартом ANSI/ISO в SQL имена должны содержать от 1 до 18 символов, начинаться с латинской буквы и не содержать пробелов или специальных символов пунктуации. В стандарте SQL2 максимальное число символов в имени увеличено до 128.

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

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

Полное имя столбца состоит из имени таблицы, содержащей столбец, и имени столбца (простого имени), разделенных точкой. Например, полное имя столбца ADR в таблице PERSON имеет такой вид

PERSON.ADR или ANTON.PERSON.ADR

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

Типы данных

В стандарте ANSI/ISO (SQL1) определены типы данных, которые можно использовать для представления информации в реляционной БД. Эти типы образуют лишь минимальный набор и поддерживаются во всех коммерческих СУБД:

1) строки символов постоянной длины;

2) целые числа;

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

4) числа с плавающей запятой.

В стандарт SQL2 вошли еще несколько типов данных:

1) строки символов переменной длины;

2) дата и время;

3) поток байтов для хранения графических и видеоизображений, программных кодов и других неструктурированных данных;

4) строки национальных символов.

В большинстве коммерческих СУБД помимо типов данных, определенных в стандартах, имеется множество дополнительных типов данных. Например, в системе Delphi реализован так называемый локальный SQL для работы с таблицами, доступ к которым обеспечивают СУБД Paradox и dBase. В этой реализации, в частности, предусмотрены типы данных, перечисленные в табл. 3.1.

Таблица 3.1. Соответствие типов данных

Примечание: х – точность (значащие цифры); у – масштаб (дробная часть); п – длина в байтах (символах); т – подтип BLOB-поля.

Константы

В стандарте ANSI/ISO (SQL1) определен формат числовых и строковых констант, или литералов, которые представляют конкретные значения данных.

Целые и десятичные константы, называемые точными числовыми литералами, в операторах SQL представляются в виде обычных десятичных чисел со знаком или без знака:

21

– 375

2000

0.0

– 4.579

Константы с плавающей запятой, называемые приблизительными числовыми литералами, задаются с помощью символа Е, означающего умножение на 10 в степени:

1.5ЕЗ → 1,5·103

– 314Е-2 → -3,14.

Строковые константы заключаются в апострофы (одинарные кавычки):

'ИВАНОВ'

'Зеленоград, 801–101'.

Сам апостроф в составе строковой константы представляется двумя идущими подряд апострофами: 'ОБ''ЕКТ' → ОБ'ЕКТ


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

'5/22/1999'

'10:35:15'.

Выражения

В соответствии со стандартом ANSI/ISO (SQL1) в выражениях можно использовать четыре арифметические операции: сложение (X+Y), вычитание (X-Y), умножение ·У) и деление (X/Y). Для формирования сложных выражений можно использовать круглые скобки.

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

Внимание! Это не конец книги.

Если начало книги вам понравилось, то полную версию можно приобрести у нашего партнёра - распространителя легального контента. Поддержите автора!

Страницы книги >> Предыдущая | 1 2 3 4
  • 0 Оценок: 0

Правообладателям!

Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.

Читателям!

Оплатили, но не знаете что делать дальше?


Популярные книги за неделю


Рекомендации