Язык структурированных запросов sql реферат

Язык структурированных запросов SQL. Использование SQL в прикладном программировании

ОГЛАВЛЕНИЕ

Введение

. Базы данных и системы управления базами данных

1.1
Основные определения и свойства баз данных

.2
Системы управления базами данных

.3
Реляционные БД: отношения, реляционные операции, ключи

.4
Проектирование базы данных. Язык UML

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

2.1
Введение в SQL. Основные
понятия

.2
Создание и управление базой данных

.3
Создание и управление таблицами. Основные запросы SQL

.4
Работа с SQL в различных
СУБД (MySQL, MS
Access, Firebird)

3. Использование SQL в
прикладном программировании

3.1
Возможность интеграции SQL в программный код.
Потенциальные преимущества от его использования

.2
Использование SQL в Pascal (на примере
Pascal Lazarus)

.3
Использование SQL в C++ (на
примере MS Visual Studio)

.4
Использование SQL в ABAP (на примере
SAP GUI)

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

Заключение

Список использованной литературы

Приложения

ВВЕДЕНИЕ

Актуальность темы курсовой работы заключается в
том, что использование баз данных и, как следствие, систем управления базами
данных в рамках различных информационных систем и сервисов было и остается
повсеместным. Более того, на момент написания работы сформировалась тенденция к
увеличению роли баз данных – в особенности, удаленных от конечного пользователя
(веб-приложения, «облачные» сервисы), – что повышает важность изучения всего, с
базами данных связанного. Кроме того, еще одна тенденция вынуждает
информационную науку искать возможности объединять и делать доступными для
использования в рамках друг друга различные технологии и стандарты. Это
тенденция к интеграции, универсализации как информационных систем в целом, так
и компонента front-end
(доступного конечному пользователю), так и различных сред разработки.
Современное приложение среднего или крупного масштаба не может существовать в
границах одной технологии, стандарта или языка, и для того чтобы связать между
собой различные компоненты, необходимо глубокое знание как теоретической части
предмета, так и прикладных решений.

Одним из наиболее популярных средств обращения к
реляционным базам данных является язык структурированных запросов SQL
(Structured Query
Language). На его
основе было создано множество СУБД (систем управления базами данных), в том
числе масштабные решения от Microsoft
и Oracle. Именно язык SQL
выполняет роль связки между программной частью системы, использующей базу
данных, и СУБД, написанной для этого языка запросов. В силу высокого уровня
развития SQL, большого
количества СУБД, использующих его, и обширных возможностей использования SQL
внутри современных языков программирования высокого уровня, изучение не только
семантики языка как такового, но и возможностей использования его в рамках
внешних технологий является критичным для любого специалиста информационных технологий.
Язык SQL является
сформированным стандартом обращения к базам данных, потому знание его сильно
упрощает разработку и поддержку систем, написанных на любом языке
программирования, в рамках которого используется SQL.
Кроме того, все чаще крупные проекты формируются из нескольких компонентов,
одним из которых является СУБД. В таком случае, разные части системы, способные
составлять обращения на SQL,
формируют своего рода кластер, а язык структурированных запросов становится
связкой между ними. Это повышает универсальность системы в целом, увеличивает
ее эффективность в контексте ресурсов, требуемых на создание и поддержание
системы, а также в определенной мере повышает гибкость проекта.

Объектом исследования курсовой работы являются
«Базы данных», а предметом исследования – «Использование SQL
в прикладном программировании».

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

В ходе работы для достижения поставленной цели
будут выполнены следующие задачи:

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

) описать различные модели данных, перечислить
характеристики БД (базы данных) и СУБД (отношения, операции, ключи и так
далее). Дать краткое описание языка UML
(Unified Modeling
Language), использующегося
для проектирования реляционной БД, а также описать процесс проектирования базы
данных;

) дать характеристику языку SQL;
перечислить его особенности в рамках теории; затем перейти к прикладной части:
дать поэтапное описание (с примерами) создания базы данных и таблицы,
перечислить основные операторы языка; указать особенности использования SQL
в различных СУБД;

) изучить теоретическую возможность
использования SQL в
прикладном программировании; перечислить достоинства и недостатки такой
концепции;

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

При написании курсовой работы использовались
научные труды следующих авторов: Баженова И.Ю [2], Баканов В.М. [3], Бураков
П.В. [4], Гудов А.М [5], Дьяков И.А [6], Зиборов В.В. [7], Кетков Ю.Л. [8], Копейкин
М.В. [9], и другие.

1. БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ
ДАННЫХ

.1 Основные определения и свойства баз данных

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

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

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

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

Также немаловажной особенностью, которая
отличает базы данных от более примитивных объектов для работы с данными,
является возможность удаленного и параллельного доступа к данным нескольких
пользователей. Кроме этого базы данных могут быть распределенными – в таком
случае данные размещаются на нескольких физических хранителях, находящихся в
разных локациях (технически, одна база данных может быть распределена по всему
Земному шару, если подобное распределение оправдано). Данная особенность БД
существенно облегчает создание информационных систем, работа с которыми должна
вестись многими пользователями одновременно.

Перейдем к строгому определению понятия «База
данных». Современные стандарты и научные работы в этой области выделяют
несколько похожих определений:

«База данных – совокупность данных, хранимых в
соответствии со схемой данных, манипулирование которыми выполняют в соответствии
с правилами средств моделирования данных» [1, c.
3].

«База данных (БД) – именованная совокупность
данных, отражающая состояние объектов и их отношений в рассматриваемой
предметной области» [4, с. 6]

«База данных – набор сведений, хранящихся
некоторым упорядоченным способом» [24].

Как можно заметить, определения, данные в разных
источниках, отличаются друг от друга строгостью, полнотой и некоторыми
признаками, которые должны содержаться в БД по одному определению, но не должны
по другому. Из всех определений, однако, можно вывести общую и самую важную
часть, которая является минимальным условием принадлежности некоей
информационной сущности к базам данных: база данных всегда является набором
данных, либо сведений, либо информации. Некоторые источники, посвященные
изучению БД, опускают важность определения данных, однако в большинстве случаев
база данных, конечно, должна содержать данные, а не просто «информацию».

«Данные – зарегистрированная информация;
представление фактов, понятий или инструкций в форме, приемлемой для общения,
интерпретации, или обработки человеком или с помощью автоматических средств»
[25].

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

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

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

Перейдем к более подробному описанию конкретных
характеристик баз данных.

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

Таблица 1 – Основные модели данных

Название

Особенности

Преимущества
и недостатки

Иерархическая

Представление
данных в виде древовидной структуры. Входом является корень дерева – первый
файл, к которому привязаны остальные

Значительно
сокращаются затрачиваемые ресурсы памяти и быстродействия; реализация сложна
в техническом плане; необходимо подробное знание структуры БД

Сетевая

Данные
представлены в виде сетевой структуры (развитие иерархической модели: у
дочерних объектов может быть любое количество предков)

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

Реляционная

Основной
компонент, отличающий реляционную от других моделей – отношение. Реляционная
БД представляет собой набор таких отношений, на практическом уровне
называемых таблицами

Реляционные
базы данных более понятны для пользователя, чем иерархические и сетевые;
физическая и логическая независимость таких БД очень высока (без изменения
программы можно редактировать организацию данных); однако создание связей
между таблицами вызывает избыточность по полям

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

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

Рисунок 1 – классификация баз данных по
содержанию и хранимой информации

Следующая характеристика баз данных – это
степень распределенности. Централизованными базами данных называют такие, все
данные которых хранятся в памяти одной вычислительной системы. Распределенные
базы данных состоят из нескольких частей, хранимых в памяти разных ЭВМ
вычислительной сети [10, с. 6]. Распределенные, в свою очередь, подразделяются
на однородные (БД управляется одной СУБД), неоднородные (используются разные
СУБД), фрагментированные (распределение достигается путем секционирования) и
тиражированные (распределение достигается путем реплицирования).

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

.2 Системы управления базами данных

Нередко допускаются грубые ошибки в различии
между базами данных как таковыми и их системами управления. Чтобы строго разграничить
два понятия, следует сразу отметить, что база данных является только набором
данных и схемой их организации (а в более широком смысле – еще и набором правил
работы с данными), тогда как система управления базами данных (СУБД) – это
набор языковых и программных средств, предназначенных для работы с БД
(создание, редактирование, удаление) [6, с. 5]. Другими словами, в более узком
и очевидном смысле, система управления базами данных – это программа,
включающая в себя возможности работы с определенными БД [4, с. 11].

За время развития баз данных и систем их
управления было создано множество различных СУБД. Многие из них уже устарели
технически и были заменены новыми продуктами. Тем не менее, можно разделить все
СУБД на две глобальные категории: СУБД общего назначения и специализированные
системы. Как исходит из названия, при разработке СУБД общего назначения не
делается акцент на какой-либо стороне работы СУБД, так же как программа не
создается только для некоего узкого круга баз данных. СУБД общего назначения
являются многофункциональными продуктами, которые уже в ходе создания либо
эксплуатации БД могут быть модифицированы (кастомизированы) под нужды
пользователя либо администратора системы. В связи с широкими возможностями СУБД
общего назначения, часто это коммерческие продукты, поставляемые пользователям,
которые в дальнейшем могут использовать в полной мере те специфические
особенности данной СУБД, которые им нужны [10, с. 18]. К группе СУБД общего
назначения относится большинство известных продуктов (MS
Access, MySQL,
Oracle и так далее). В
редких случаях, когда по некоторым причинам использование СУБД общего
назначения невозможно или не оправдано, создаются специализированные системы,
выполняющие лишь некоторые функции поддержки базы данных. Например, такое
возможно в условиях нехватки вычислительных ресурсов у вычислительной техники,
использующей СУБД (портативные ЭВМ, специализированная техника с элементами
ЭВМ). Возможности современных СУБД (в первую очередь, общего назначения)
включают, но не ограничиваются следующими:

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

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

) Все крупные СУБД имеют версии для ЭВМ с разной
архитектурой и для разных операционных систем. Это позволяет использовать один
продукт в работе с БД, даже если компьютеры в системе значительно отличаются
программно и архитектурно. К примеру, имея сервер с ОС семейства Unix
и несколько пользовательских компьютеров с Windows,
можно использовать одну и ту же СУБД на всех узлах системы.

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

Все вышеописанные возможности исходят из
функций, возможность выполнения которых требуется от полноценной СУБД:

l  Поддержка языков баз данных. Всякая СУБД должна
поддерживать один (как правило) язык управления базами данных.

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

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

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

l  Управление буферами в оперативной памяти.

l  Контроль доступа к БД.

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

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

Рисунок 2: Три уровня архитектуры СУБД

Как видно из схемы на рисунке 2, СУБД включает в
себя все три уровня архитектуры: внешний, отвечающий за пользовательские
представления (ПП1, ПП2 и так далее на рисунке), внутренний уровень работает
напрямую с банком данных, то есть, с данными БД, а концептуальный уровень
реализует трансляцию запросов, полученных с внешнего уровня, на внутренний и
преобразует данные, возвращаемые с внутреннего уровня, в такой вид, который
затем внешним уровнем может быть представлен в понятном для пользователя
формате [4, с. 16].

Наиболее распространенные СУБД (работающие с
реляционными базами данных) включают: MS
Access, MySQL,
SQLite, Firebird
и другие. На рисунках 3-5 приведен внешний вид основного окна некоторых из этих
СУБД.

Рисунок 3: Основное окно MS Access 2013 (с открытой
базой данных)

Рисунок 4: главное окно FlameRobin
– популярного графического интерфейса СУБД Firebird

Рисунок 5: Главное окно MySQL
Workbench – средства работы
с MySQL

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

.3 Реляционные БД: отношения, реляционные
операции, ключи

Главным элементом реляционных БД, вынесенным,
собственно, в название, является отношение (англ. relation).
Математически отношение – это подмножество декартова произведения. Следует
отметить, что глубокая связь с теорией множеств у реляционных БД на этом не
исчерпывается – сама реляционная алгебра черпает многие свои элементы именно из
теории множеств.

Однако на практике термин «отношение» почти не
используется и заменяется на «таблицу». Однако в случае реляционных БД различие
несущественно, и по сути отношение можно принять за таблицу в контексте
практики: некое количество m
комбинаций n различных
признаков образует отношение. В таком случае n
признаков будут столбцами таблицы, а m
комбинаций – ее строками [11, с. 32].

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

Данные в таблицах должны удовлетворять следующим
условиям:

l  Каждое значение,
лежащее на пересечении строки и столбца, должно являться атомарным (не
разбиваемым на несколько значений).

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

l  Каждая запись в
таблице должна быть уникальна.

l  Название каждого
поля должно быть уникально.

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

Все реляционные операции (операторы) являются
аналогами операций в теории множеств:

) Объединение отношений – выражается формулой R
= R1∨R2,
где R1 и R2
– два отношения, а R –
результирующее отношение, содержащее все записи, которые есть в R1
и в R2.

) Пересечение отношение – выражается формулой R
= R1∧R2,
где R1 и R2
– два отношения, а R –
результирующее отношение, содержащее только те записи, которые есть и в R1,
и в R2 одновременно.

) Разность отношений – выражается формулой R = R1|R2,
где R1 и R2
– два отношения, а R –
результирующее отношение, содержащее только те записи, которые есть в R1,
но отсутствуют в R2.

) Произведение отношений – выражается формулой R
= R1×R2,
где R1 и R2
– два отношения, а R –
результирующее отношение, содержащее все возможные комбинации записей из
первого отношения и второго отношения. Порядок полей при этом не играет роли.

) Проекция отношения на компоненты – это
операция, заключающаяся в выборке определенных столбцов из отношения R1
и построения из них нового отношения R
со столбцами в указанном порядке.

) Выборка или селекция из отношения – это
удаление некоторых записей из отношения на основании определенного условия.
Условие строится как логическое выражение (посредством логических операторов и
арифметических операторов сравнения) [11, с. 35] Кроме основных понятий
реляционных БД и реляционных операций следует иметь представление о других
важных характеристиках таких баз данных:

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

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

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

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

.4 Проектирование базы данных. Язык UML

прикладной программирование язык база

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

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

Сущность в таком случае выступает образом
некоего объекта реального мира, который можно мысленно представить как единое
целое, но, тем не менее, разделяемое на свойства (в модели это атрибуты
сущности).

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

При построении графической модели сущность
указывается как прямоугольник, атрибут сущности – как прямоугольник со
скругленными краями, а связь – как ромб. При этом атрибуты и связи соединены с
сущностями прямыми линиями (рисунок 6) [4, с.36].

Рисунок 6: Графическое представление
концептуальной модели «сущность – связь»

В концепции «сущность – связь» используются
следующие важные параметры:

Мощность связи – это максимальное количество
экземпляров сущности, связанных с одним экземпляром другой сущности. Иногда
максимальное количество таких экземпляров не установлено строго и заменяется
символом *. Также иногда указывается минимальное количество таких экземпляров.

Показатель кардинальности – это количество
возможных связей для каждого экземпляра, который участвует в связи сущности.
Показатель кардинальности может принимать следующие значения: один к одному
(1:1), один ко многим (1:N),
многие к одному (N:1), многие
ко многим (M:N)
[4, с. 37].

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

Для проектирования реляционных БД UML
предлагает классовые диаграммы, которые содержат в себе классы (аналог
сущности), атрибуты этих классов (аналог атрибута сущности) и связи между
классами. Пример простейшей концептуальной модели, созданной на языке UML
(программа Violet
UML Editor),
представлен на рисунке 7:

Рисунок 7: Простейшая концептуальная модель
реляционной БД на языке UML

2. СТРУКТУРИРОВАННЫЙ ЯЗЫК ЗАПРОСОВ SQL

.1 Введение в SQL.
Основные понятия

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

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

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

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

l  PL/SQL
– используется в СУБД Oracle

l  Transact-SQL
– используется в СУБД Microsoft
SQL

l  Jet SQL – используется
Microsoft Access

Популярная бесплатная СУБД Firebird
имеет несколько диалектов SQL,
которые можно использовать для разных БД под ее управлением.

Словарь SQL
состоит, в основном, из операторов запросов, однако данные, с которыми работают
эти запросы, необходимо хранить в понятном системе виде, поэтому всякая СУБД
имеет собственный набор типов данных (язык описания схем – DDL),
которые содержат в себе такие типы как INTEGER,
CHAR и так далее. Набор
типов, как правило, совпадает у разных СУБД на большую часть, а также
соответствует некоторым типам данных в тех языках прикладного программирования,
которые могут использоваться с данной СУБД. Это закладывает основу
использования SQL в
программировании на других языках, что немаловажно в современных условиях интеграции
различных технологий [9, с. 31].

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

) Имеется ли у пользователя разрешение на то,
чтобы выполнить запрос?

) Имеется ли у пользователя доступ к необходимым
данным?

) Верен ли синтаксис введенного запроса? [18, с.
41]

Очевидно, что такие проверки выполняются в целях
обеспечения безопасности базы данных. SQL
и СУБД, использующие его, содержат в себе множество средств повышения
безопасности данных. Это и другие достоинства, а также недостатки языка SQL
перечислены в таблице 2 [27].

Таблица 2: Достоинства и недостатки языка SQL

Достоинства

Недостатки

Универсальность:
несмотря на существование разных диалектов языка, в большой степени SQL не
зависит от СУБД, на которой он используется

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

Стандарты:
будучи высоко развитым языком с более чем двадцатилетней историей, SQL имеет
стандарты, которые сохраняют устойчивость языка в контексте новых разработок

Некоторые
особенности языка SQL создают возможность для ошибок
при работе с реляционными БД: SQL разрешает повторяющиеся
строки в таблицах, неопределенные значения записей (NULL), колонки
таблиц пронумерованы, разрешены пустые и повторяющиеся имена полей

Декларативность:
при отправлении SQL-запроса, пользователь не должен
определять технически, каким образом будут получены данные из БД – система
управления базой данных самостоятельно переведет операторы SQL на
технический язык более низкого уровня

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

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

.2 Создание и управление базой данных

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

Каждый запрос в SQL
завершается символом «точка с запятой» – «;». Без этого символа обработчик
команд не сможет определить выражение. Различные параметры запроса, как
правило, разделяются запятой. Регистр, в котором записаны операторы, не имеет
значения, но принято служебные слова записывать в верхнем регистре, а значения
параметров – в нижнем.

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

В СУБД MySQL
основным SQL-оператором
создания новой базы данных является CREATE
DATABASE. Общий вид этого
оператора такой:DATABASE <имя_БД> [CHARACTER SET <кодировка>]
[COLLATE <порядок сортировки>];

Технически, обязательной частью оператора являются
только первые два слова и название БД. Если кодировка и порядок сортировки не
введены, будут использованы значения по умолчанию [18].

При создании БД система не выбирает эту базу
данных автоматически. В каждой СУБД необходимо выбрать созданную базу данных
посредством соответствующего оператора – только после этого можно работать с
ней. В MySQL этим
оператором является USE
(вид: USE
<имя_БД>). Для проверки (и открытия в графической оболочке) выбранной БД
можно использовать функцию SELECT
DATABASE().

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

Рисунок 8: Окно программы MySQL
Workbench с созданной БД Test_SQL_1

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

Для удаления базы данных используется команда DROP
DATABASE
<имя_базы_данных>. Для выполнения этой команды необходимо иметь
привилегию DROP в MySQL
(включена в привилегии администратора). Данный запрос необходимо использовать с
предельной осторожностью, так как он очищает и удаляет все таблицы из базы
данных и удаляет саму БД [28].

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

2.3 Создание и управление таблицами. Основные
запросы SQL

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

CREATE
TABLE
<название_таблицы>

(<поле_1> <тип_1> [DEFAULT
<выражение_1>],

<поле_2> <тип_2> [DEFAULT
<выражение_2>],

<поле_n>
<тип_n> [DEFAULT
<выражение_n>]>

[CONSTRAINT
<название_ограничения> PRIMARY
KEY (<поле_m>)]

);

Выражения, представленные в квадратных скобках,
не являются обязательными. Оператором DEFAULT
можно задать значение по умолчанию для всех записей соответствующего столбца.
Оператором CONSTRAINT
можно задать ограничение по столбцу, либо по таблице (например, задать
первичный ключ, как указано в примере) [5, с. 67].

В случае, если необходимо поменять тип какого-то
из полей таблицы, можно воспользоваться оператором ALTER
[18, с. 31]:

ALTER <имя_таблицы>
<ADD/DROP/ALTER/MODIFY>
<столбец> [<тип_данных>].

При успешном создании таблицы в нее можно
добавлять данные в соответствии с типами заданных полей. Для этого используется
команда INSERT:

INSERT
INTO
<имя_таблицы>

(<поле_1>, <поле_2>,…, <поле_n>)

VALUES
(<знач_поля_1>, <знач_поля_2>,…, <знач_поля_n>);

Листинг SQL-запросов,
в результате выполнения которых MySQL
создаст тестовую базу данных с таблицами «person»,
«favorite_food»
и несколькими записями, приведен в приложении А.

Имея базу данных с одной или несколькими
таблицами, в которых есть некоторые записи, можно перейти к изучению одного из
наиболее основных запросов в SQL
– SELECT. На этапе создания
БД его можно было использовать, чтобы узнать, какая база данных выбрана
системой управления БД на данный момент, но чаще всего этот оператор
используется в контексте таблиц. По сути, команда SELECT
просто выводит некоторые данные из необходимого отношения, которые актуальны на
данный момент. Технически, само служебное слово SELECT
инструктирует базу данных о том, что после него будет идти тело запроса [9, с.
71].

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

SELECT *
<имя_таблицы>;

Служебный символ «*» может быть заменен одним
или несколькими полями таблицы, перечисленными через запятую. В таком случае
выведенные данные будут содержать лишь те столбцы, которые были указаны в
запросе. Кроме этого запрос с оператором SELECT
можно обогатить множеством уточняющих служебных слов: AND,
OR; перед каждым
выражением также может стоять отрицание NOT.
<имя_поля> <лог_операция> <значение> – ограничивает выборку
только теми записями, значения которых в поле <имя_поля> соответствуют
требуемому выражению. Выражений может быть несколько, между ними должна стоять
одна из логических операций.

Также с оператором WHERE
могут использоваться служебные слова IN,
BETWEEN, LIKE.
IN (<знач_1>,…,
<знач_n>) указывает на
то, что значение результата должно быть в множестве значений, заключенных в
скобки. BETWEEN
<знач_1> AND
<знач_2> указывает на то, что результирующее значение должно быть больше
или равно <знач_1> и меньше либо равно <знач_2>. Служебное слово LIKE
(используется только с полями CHAR
или VARCHAR)
сообщает базе данных, что в результирующей выборке должны быть только те
записи, значение необходимого поля которых соответствует маске, указанной после
оператора LIKE. BY
<имя_поля_1>,…,<имя_поля_n>
DESC/ASC
– сортирует результат выборки по указанным полям и по убыванию, либо
возрастанию – данное ключевое слово сообщает базе данных, что выборка не должна
содержать повторяющиеся данные. Ставится сразу после SELECT
[9, с. 77].

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

Как можно видеть, оператор SELECT
является мощным средством для выборки необходимых данных из таблицы. Тот факт,
что любой запрос подобного вида можно составить автоматически (как простую
текстовую строку, используя, например, программу с графической оболочкой,
написанную специально для этого), подтверждает разнообразие возможностей,
которые предоставляет SQL
в рамках прикладного программирования. Листинг некоторых выборок из созданной
ранее базы данных указан в приложении А. Более полный список основных
операторов и служебных слов SQL
можно найти в приложении Б.

.4 Работа с SQL
в различных СУБД (MySQL,
MS Access,
Firebird)

Как уже было отмечено, основные реляционные
СУБД, использующие язык SQL,
имеют между собой немалые отличия. Более того, сам SQL,
используемый такими СУБД, может отличаться от стандартов. Особенности некоторых
СУБД будут продемонстрированы на трех примерах: MySQL
(программная оболочка MySQL
Workbench); MS
Access и Firebird
(программная оболочка FlameRobin).

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

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

Графическая оболочка MySQL
Workbench позволяет быстро
выполнять многие действия, на выполнение которых посредством составления SQL-запросов
ушло бы гораздо больше времени. Это создание и редакция баз данных и таблиц,
настройка базы данных, настройка соединения с сервером, создание и
редактирование пользователей, мониторинг системных переменных и так далее.

Кроме того, в современных версиях MySQL
добавлены широкие возможности оптимизации: использование кэша запросов
(наиболее частые запросы кэшируются, и их вызов происходит быстрее), хранение
части кода на сервере MySQL
(процедур, функций), использование подготовленных команд, пользовательские
функции и так далее [14, с. 261].

Особенности работы с SQL
в MySQL заключаются в
наличии удобного редактора кода, автоматизации многих функций, возможности
сохранять запросы и так далее. В новых версиях также была добавлена возможность
объединять SQL-запросы в
транзакции, создавать события, триггеры и хранимые процедуры[19].

) Microsoft
Access, являясь частью
пакета офисных приложений MS
Office, предназначена, в
первую очередь, для пользователей и продвинутых пользователей. Большинство
функций реализовано посредством «мастеров» – графических утилит внутри основной
программы, которые за несколько шагов выполняют создание определенной сущности
с заданными параметрами. Использование SQL
минимизировано – отсюда легкость в использовании данной СУБД. При этом
текстовый редактор SQL-запросов
содержит минимум полезных функций, что делает ручное написание запросов
затруднительным

Диалект SQL,
с которым работает MS
Access, – JetSQL – был
создан фирмой Microsoft
специально для своих программных решений.

Также для полноценной работы с MS
Access необходимо знание
языка VBA – Visual
Basic for
Applications. Многие функции
можно реализовать только через прямое редактирование кода, однако плюсом
является некоторая интеграция JetSQL
в этот язык [15].

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

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

3. Использование SQL в
прикладном программировании

.1 Возможность интеграции SQL
в программный код. Потенциальные преимущества от его использования

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

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

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

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

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

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

Также большим преимуществом является возможность
интегрировать SQL сразу в
несколько компонентов одной системы, написанной с использованием разных языков
программирования – например, WEB-компонент
системы, написанный на Javascript,
и внутренняя, инкапсулированная от пользователей часть на C++,
могут использовать SQL
в равной степени, создавать запросы, подключаться в БД по мере необходимости и
так далее. Эта возможность еще сильнее повышает универсальность системы. В трех
следующих подразделах будут представлены практические примеры использования SQL
в рамках трех языков: Pascal
(выбран как наиболее хорошо демонстрирующий возможности программирования для
начинающих специалистов), C++
(выбран как язык с чрезвычайно широкими возможностями, использующийся
повсеместно и породивший множество родственных языков), Object
ABAP (данный
специфический пример позволит увидеть, каким образом SQL
можно интегрировать в язык напрямую, без использования расширений).

3.2 Использование SQL
в Pascal (на примере Pascal
Lazarus)

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

Технически, однако, в данном примере будет
показан не Pascal в чистом
виде, а его объектная версия, используемая в графической среде разработки Lazarus.
Lazarus является
бесплатным аналогом популярного инструмента Delphi,
потому работа с ним может также дать представление об устройстве этого
продукта.

Для подробного разбора механики соединения с
базой данных MySQL посредством
языка Pascal все
операторы необходимо прописывать вручную (подключение к хосту и так далее).
Однако Lazarus
существенно облегчает задачу программиста посредством множества готовых
классов, объекты которых можно разместить на форме программы по аналогу с Delphi
и получить в свое распоряжение мощные инструменты для подключения к базам
данных различных СУБД и для других задач.

На рисунке 9 показаны строки с объектами,
предназначенными для подключения к различным СУБД в программе Lazarus
и для управления данными, полученными из баз данных:

Рисунок 9: Инструменты для работы с базами
данных в Lazarus
(желтым выделены наиболее важные для работы с MySQL)

Для успешного подключения к БД и работы с ней на
форме необходимо разместить следующие четыре объекта: MySQL50Connection
(число в названии объекта должно соответствовать выпуску базы данных), SQLQuery,
DataSource, SQLTransaction.
Первый из объектов выступает главным звеном цепи, подключающимся к самой СУБД. SQLQuery
содержит в себе SQL-запрос,
а также актуальную выборку из таблиц БД, DataSource
является источником данных для SQLQuery,
а SQLTransaction – это
транзакция, также связанная с запросами из SQLQuery.
В каждом из этих объектов должны быть ссылки на другие, а в MySQL50Connection
также указаны основные данные подключения к БД: адрес хоста, имя пользователя и
пароль.

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

Для вывода результатов запроса был добавлен
объект класса Tmemo – набор
текстовых строк. Программа процедурально выводит в него выборку, полученную из SQLQuery.
Для ввода нового запроса был добавлен еще один объект класса Tmemo.

Прежде чем отправлять запросы к БД, необходимо
установить соединение. Для этого используется изменение значения свойства ‘Connected’
у MySQL50Connection
на ‘true’:50Connection1.Connected
:= true

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

Как показала практика, составление и отправка
запросов не представляют сложности при использовании Lazarus:
обычная текстовая строка, которую пользователь вводит в текстовое поле, по
нажатию кнопки передается в объект SQLQuery,
которые затем отправляет ее по соединению в СУБД. Результат (в том числе, текст
возможной ошибки) возвращается в этот же объект, из которого программа затем
может получить необходимые данные.

Этот принцип работает не только с выборкой, но и
с редактированием, и с удалением записей. Более того, в реализованной программе
отсутствует зависимость от конкретной таблицы – процедуры построены таким
образом, что программа сама формирует выводимый список, в зависимости от того,
с какой таблицей работает. Однако в силу тестовой природы этого решения было
решено не заострять внимание на внешнем виде графической оболочки – главное,
чтобы программа выполняла поставленные функции.

Работа с Pascal
и Lazarus дала представление
об удобстве как языка, так и программной среды в случае проектирования
программы небольшого масштаба и сложности. Кроме возможности подключить СУБД MySQL
Lazarus позволяет теми же
стандартными средствами подключаться к другим системам управления базами
данных, что является несомненным плюсом.

На рисунке 10 изображено окно получившейся
программы с результатами выборки:

Рисунок 10: Окно тестовой программы, созданной в
Lazarus

3.3 Использование SQL
в C++ (на примере MS
Visual Studio)

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

Тем не менее, именно подключение внешних
компонентов может стать узким местом при разработке для этого языка. В
частности, для работы с СУБД MySQL
приложение должно использовать файл mysql.h и еще несколько библиотек MySQL
кроме него, однако особенности среды разработки MS
Visual Studio
могут помешать программе отыскать правильные файлы, если не указать путь к ним
явно. Именно такая проблема и возникла при создании проекта на C++ в Visual
Studio. Решена эта
проблема была добавлением необходимых библиотек (libmysql.dll, libmysql.lib,
libmysqld.dll,
libmysqld.lib)
из каталога с сервером MySQL
в корневой каталог проекта [22].

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

После успешного добавления файлов windows.h,
winsock.h и mysql.h с помощью стандартного служебного слова include,
проект может работать с СУБД MySQL
посредством функций, взятых из специально разработанных для этого библиотек.

Для подключения к базе данных создается
коннектор:

MYSQL *<имя_переменной>;

Затем выполняется подключение как таковое
посредством следующих функций:

= mysql_init(NULL);

//функция подключения выведена в оператор
ветвления для проверки успешного подключения

if (!mysql_real_connect(conn,
“localhost”, “root”, “root”, “test”,
NULL, NULL, 0))

{(stderr, “Ошибка: невозможно подключиться
к базе данныхn”);

}

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

Несмотря на кажущуюся бедность функционала в
сравнении с Lazarus,
C++, даже в варианте
консольного приложения, предоставляет широкие возможности для работы с базами
данных. Возможно, именно по причине широких возможностей этого языка при работе
в нем с базами данных можно столкнуться с многочисленными ошибками. Кроме того,
следует отметить, что, будучи разработкой компании Microsoft,
Visual Studio
предоставляет куда больше возможностей по работе с СУБД той же самой фирмы (Microsoft
SQL Server,
MS Access)[7].

Полный листинг тестовой программы с возможностью
посылать SQL-запросы к
базе данных можно найти в приложении.

3.4 Использование SQL
в ABAP (на примере SAP
GUI)

В качестве третьего примера была взята
достаточно специфичная технология – язык программирования высокого уровня ABAP
на платформе, для которой он и был разработан – SAP GUI.GUI сам по себе
является обширным инструментарием работы с разнообразными бизнес-системами SAP
– аналогом отечественного 1C. SAP GUI позволяет как администрировать систему,
так и вести разработки в ней. Очевидно, что всякое бизнес-приложение в той или
иной мере должно обращаться к базам данных – отсюда следует, что технология, на
которой приложение построено, должна поддерживать общение с базами данных на
том или ином языке.

В случае ABAP технология была интегрирована в
язык еще на стадии разработки – для осуществления SQL-запросов не требуется
подключать никаких внешних файлов. Более того, сама семантика языка ABAP не
делает различий между фактической таблицей, существующей в базе данных, и
временной таблицей, созданной в процессе выполнения программы – в обоих случаях
обращение к таблицам будет вестись посредством SQL-запросов. Это многократно
облегчает задачи программистов и позволяет достичь высоких результатов при
программировании обращений к базам данных [20].

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

Кроме прочего, системы SAP (по сути,
единственный род приложений, использующих ABAP) подключаются к базам данных
напрямую, посредством специально для этого разработанных технологий. Это
значит, что при наличии рабочей системы SAP, подключенной к корректно
построенной базе данных, разработка кода может вестись без оглядки на проблемы
с подключением, различные коннекторы и объекты, посредством которых
осуществляется соединение, – эта часть системы абстрагирована от
пользовательских разработок. Таким образом, прямо в теле кода ABAP можно
записывать SQL-запросы, которые при выполнении программы будут выполнены в том
порядке, в каком они идут. При этом не нужно описывать фактические таблицы
наравне с переменными – они берутся из общего списка таблиц, релевантного для
всей системы [23].

На рисунке 11 продемонстрирован фрагмент кода,
где видно, что вместе с SQL-запросами выполняются обычные операторы языка, а
сами запросы применяются как для таблиц базы данных, так и для внутренних
таблиц, созданных по ходу выполнения программы.

Рисунок 11: Фрагмент кода на языке ABAP

поддерживает большинство функций языка SQL.
Кроме широких возможностей ABAP программист может расширить его функционал
посредством привязки к системе решений, построенных на других технологиях.
Обновление SAPUI5 является прекрасным примером такой связки: WEB-часть проекта,
написанная на Javascript, отправляет и получает данные из ABAP. При этом на
стороне Javascript могут формироваться SQL-запросы, которые затем отправляются
в систему через технологию Gateway. Однако, как и было замечено, ABAP является
специфическим языком, созданным специально для систем SAP. Его применение за
пределами таких систем, в принципе, невозможно, и в данной работе язык был
приведен лишь в качестве примера того, как глубоко SQL может быть интегрирован
с технологией программирования.

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

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

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

Язык ABAP
представляет собой далекое от универсальности средство, предназначенное, в
принципе, для работы с базами данных в бизнес-среде SAP.
Это налагает жесткие ограничения на возможности языка как такового, однако
уровень интеграции SQL
в него так велик, что никаких дополнительных действий для подключения к базе
данных внутри кода, в принципе, делать не нужно – SQL-запросы
пишутся как часть общей программы и выполняются так же. Таким образом можно
сказать, что Lazarus
наиболее подходит для разработок малых и средних приложений, работающих с
базами данных, C++ в среде Visual
Studio – для более крупных
программ, а ABAP, будучи
самым удобным в плане работы с SQL,
можно использовать только в рамках SAP.

ЗАКЛЮЧЕНИЕ

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

Также были описаны основные характеристики баз
данных: модели данных, приведены основные разновидности моделей с описанием их
особенностей; тип данных, которые содержатся в базе; фактор распределенности
базы данных.

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

После определения баз данных и их основных
свойств было дано описание систем управления базами данных – СУБД: это
программный инструмент создания, управления и доступа к базе данных того типа,
для которого была создана данная СУБД. По причине распространенности
реляционных баз данных наибольшее развитие получили именно реляционные СУБД.
Среди них: Microsoft
Access, MySQL,
Firebird и другие.

Остановившись на реляционных базах данных была
подробнее описана их модель: отношения, связи между ними, принципы
существования такой модели. Только обладая знаниями в теории реляционных БД,
можно переходить к более узким дисциплинам – в частности, языку SQL.
Исходя из особенностей реляционной модели, можно прийти к выводу о том, что она
является наиболее подходящей для наглядного проектирования базы данных и
понятна среднему пользователю, но имеет также некоторые недостатки, из которых
главным является избыточность данных. Перед изучением языка SQL
был показан процесс концептуального моделирования реляционной базы данных с
использованием схемы «сущность – связь» либо языка UML.

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

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

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

В третьей части работы были продемонстрированы
возможности работы с SQL
в различных языках программирования высокого уровня. Для сравнения были взяты
три языка – каждый в своей среде разработки, – и изучено подключение к базам
данных и использование SQL-запросов.
В случае первых двух языков (Pascal
и C++) были созданы
тестовые приложения, листинг которых находится в соответствующих приложениях. В
случае третьего языка (ABAP)
за неимением возможности разработать отдельное приложение был продемонстрирован
существующий код.

Из трех языков наиболее удобным в использовании
видится Pascal под
управлением Lazarus;
C++, как и в случае
с другими аспектами этого языка – не только подключением к базам данных –
обладает широкими возможностями, но сложен на практике; в ABAP
наиболее естественно интегрирован SQL,
но возможности самого языка программирования несколько ограничены. В процессе
выполнения курсовой работы были выполнены следующие задачи:

) даны определения баз данных и СУБД,
перечислены и раскрыты важнейшие их особенности; составлена классификация баз
данных и, соответственно, систем управления базами данных по различным
признакам;

) описаны различные модели данных, перечислены
характеристики БД (базы данных) и СУБД (отношения, операции, ключи и так
далее). Дано краткое описание языка UML
(Unified Modeling
Language), использующегося
для проектирования реляционной БД, а также описан процесс проектирования базы
данных;

) дана характеристика языка SQL;
перечислены его особенности в рамках теории; дано поэтапное описание (с
примерами) создания базы данных и таблицы, перечислены основные операторы
языка; указаны особенности использования SQL
в различных СУБД;

) изучена теоретическая возможность использования
SQL в прикладном
программировании; перечислены достоинства и недостатки такой концепции;

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

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1.
ГОСТ Р ИСО/МЭК ТО 10032-2007. Эталонная модель управления данными [Текст]. –
Введ. 27.12.2007. – М.: Стандартинформ, 2009. – 40 с.

.
Баженова И.Ю. Разработка распределенных приложений баз данных: Курс лекций. –
М.: МГУ им. М.В. Ломоносова, 2006. – 203 с.

.
Баканов В.М. Введение в язык SQL запросов к базам данных: Учебное пособие. –
М.: МГАПИ, 2002. – 61 с.: ил.

.
Бураков П.В., Петров В.Ю. Введение в системы баз данных: Учебное пособие. –
СПб: СПбГУ ИТМО, 2010. – 128 с.

.
Гудов А.М., Шмакова Л.Е. Введение в язык структурированных запросов SQL:
Учебное пособие. – Кемерово, Кемеровский госуниверситет, 2001. – 118 с.

.
Дьяков И.А. Базы данных. Язык SQL: Учебное пособие. – Тамбов: ТГТУ, 2004. – 80
с.

.
Зиборов В.В. MS
Visual C++
2010 в среде .NET. Библиотека
программиста. – Спб.: Питер, 2012. – 320 с.: ил.

.
Кетков Ю.Л., Кетков А.Ю. Свободное программное обеспечение. FREE
PASCAL для студентов и
школьников. – СПб.: БХВ-Петербург, 2011. – 384 с.: ил.

.
Копейкин М.В., Спиридонов В.В., Шумова Е.О. Базы данных. Основы SQL реляционных
баз данных: Учебное пособие. – СПб.: СЗТУ, 2005. – 160 с.

.
Э.В. Сысоев, Е.В. Бурцева. Базы данных: лекции к курсу. – Тамбов : Изд-во Тамб.
гос. техн. ун-та, 2007. – 48 с.

.
Токмаков Г. П. Базы данных. Концепция баз данных, реляционная модель данных,
языки SQL и XML: учебное пособие / Г. П. Токмаков. – Ульяновск: УлГТУ, 2010. −
192 с.

.
Токмаков Г. П. Базы данных и знаний. Проектирование баз данных по технологии
«клиент-сервер» и разработка клиентских приложений: Учебное пособие / Г.П.
Токмаков. – Ульяновск; УлГТУ, 2005. – 143 с.

.
Фаро С., Паскаль Л. Рефакторинг SQL-приложений. – Пер. с англ. – СПб:
Символ-Плюс, 2009. – 336 с.: ил.

.
Шварц Б., Зайцев П., Ткаченко В., Заводны Дж., Ленц А., Бэллинг Д. MySQL.
Оптимизация производительности, 2-е издание. – Пер. с англ. – Спб.:
Символ-Плюс, 2010. – 832 с.: ил.

.
Michael Alexander, Richard Kusleika. Access 2013 Bible. – New Jersey: Wiley,
2013 – 1296 p.

.
Grant Allen, Mike Owens. The Definitive Guide to SQLite, Second Edition. – New
York: Apress, 2010. – 368 p.

.
Donald Bales. Beginning Oracle PL/SQL. Second edition. – New York: Apress, 2015.
– 492 p.

.
Alan Beaulieu. Learning SQL, Second Edition. – California: O’Reilly Media,
Inc., 2009. – 338 p.

.
Paul DuBois. MySQL (5th Edition) (Developer’s Library). – Massachusetts:
Addison-Wesley Professional, 2013. – 1176 p.

.
Ken Greenwood. Sams Teach Yourself ABAP/4 in 21 Days. – Indiana: Sams, 1998. –
752 p.

.
Ken Jones. Microsoft® SQL Server® 2008 T-SQL Fundamentals. – Washington:
Microsoft Press, 2008. – 688 p.

.
Bjarne Stroustrup. Programming: principles and practice using C++. Second
edition. – Massachusetts: Addison-Wesley Professional, 2014. – 1312 p.

.
James Wood. Object-Oriented Programming with ABAP Objects. 2nd, updated and
revised edition 2016. – Massachusetts: SAP Press, 2015 – 470 p.

24.
Базы данных URL:
<http://www.site-do.ru/db/db1.php>, свободный доступ.

.
Википедия – свободная энциклопедия [Электронный ресурс]. – URL:
<https://ru.wikipedia.org/wiki/Данные>, свободный доступ.

.
CIT Forum URL:
<http://citforum.ru/>, свободный доступ.

.
Википедия – свободная энциклопедия [Электронный ресурс]. – URL:
<https://ru.wikipedia.org/wiki/SQL>, свободный доступ.

ПРИЛОЖЕНИЯ

Приложение А. Листинг SQL-запросов
для создания базы данных и таблиц в ней, заполнения таблиц и выборки по
указанным полям

DATABASE Test_SQL_1 CHARACTER SET
utf8 COLLATE utf8_general_ci;USE Test_SQL_1;TABLE person

(person_id SMALLINT
UNSIGNED,VARCHAR(20),VARCHAR(20),CHAR(1),_date
DATE,VARCHAR(30),VARCHAR(20),VARCHAR(20),VARCHAR(20),_code
VARCHAR(20),pk_person PRIMARY KEY (person_id)

);ALTER TABLE person MODIFY
person_id SMALLINT UNSIGNED AUTO_INCREMENT;ALTER TABLE person MODIFY gender
enum(‘M’,’F’);INTO person

(person_id, fname, lname, gender,
birth_date)(null, ‘William’,’Turner’, ‘M’, ‘1972-05-27’);INTO person

(person_id, fname, lname, gender,
birth_date,, city, state, country, postal_code)(null, ‘Susan’,’Smith’, ‘F’,
‘1975-11-02’,

’23 Maple St.’, ‘Arlington’, ‘VA’,
‘USA’, ‘20220’);TABLE favorite_food

(person_id SMALLINT
UNSIGNED,VARCHAR(20),pk_favorite_food PRIMARY KEY (person_id,
food),fk_fav_food_person_id FOREIGN KEY (person_id)person (person_id)

);INTO favorite_food (person_id,
food)(1, ‘pizza’);INTO favorite_food (person_id, food)(1, ‘cookies’);INTO
favorite_food (person_id, food)(1, ‘nachos’);person_id, fname, lname, birth_datepersonperson_id
= 1;foodfavorite_foodperson_id = 1BY food;

Приложение Б

Список основных операторов и служебных слов SQL

Оператор

Назначение

CREATE

Создание
таблицы или базы данных

ALTER TABLE

Изменение
полей таблицы

DROP

Удаление
базы данных или таблицы

SELECT

Выборка
из таблицы или таблицы

INSERT

Добавить
строку в таблицу

UPDATE

Изменить
данные некоторой строки

DELETE

Удалить
строки или таблицу

Служебное
слово

FROM

Указывает
таблицу-источник выборки

WHERE

Указывает
условие по некоторому полю

ORDER BY

Упорядочивает
по некоторому полю

GROUP BY

Вычисляет
количество значений некоторого поля, по значению другого

HAVING

Схож
с WHERE, но
используется с агрегатными данными

BETWEEN

Указывает,
что значение поля должно быть между некоторыми границами

IN

Указывает,
что значение поля должно принадлежать некоторому множеству

LIKE

Производит
поиск строки по маске

ALL

Сравнивает
значение поля со всеми значениями столбца

DISTINCT

Удаляет
повторяющиеся записи из выборки

Приложение В. Листинг тестовой программы,
разработанной в Lazarus

unit Unit1;

{$mode objfpc}{$H+}

Classes, SysUtils, mysql56conn,
mysql50conn, sqldb, db, FileUtil, Forms,

Controls, Graphics, Dialogs,
StdCtrls, ComCtrls, DbCtrls, DBGrids, Grids;

{ TMySQLtest }

TMySQLtest = class(TForm)

ButtonExecute: TButton;

ButtonConnect: TButton;

ButtonExit: TButton;

DataSource1: TDataSource;

EditHost: TEdit;

EditName: TEdit;

EditPassword: TEdit;

Host: TLabel;

Memo1: TMemo;

EditSQLCommand: TMemo;

MySQL50Connection1: TMySQL50Connection;

SQLCommand: TLabel;

SQLQuery1: TSQLQuery;

SQLTransaction1: TSQLTransaction;

StatusBar1: TStatusBar;

UserName: TLabel;

Password: TLabel;

procedure ButtonConnectClick(Sender:
TObject);

procedure ButtonExecuteClick(Sender:
TObject);

private

{ private declarations }

public

{ public declarations }

end;

MySQLtest: TMySQLtest;

{$R *.lfm}

{ TMySQLtest }PrepareMemo;

//Глобальная процедура для подготовки Memo1
(очистка строк и заполнение заголовков полей)

i: integer;

TempString: String;

MySQLtest.SQLQuery1.Open;

TempString := ”;

i := 0;

MySQLtest.Memo1.Clear;

MySQLtest.Memo1.Lines[0] :=
inttostr(MySQLtest.SQLQuery1.FieldCount);

While i <
MySQLtest.SQLQuery1.FieldCount-1 do

begin

TempString := TempString +
MySQLtest.SQLQuery1.Fields[i].FieldName + ‘…….’;

inc(i);

end;

TempString := TempString +
MySQLtest.SQLQuery1.Fields[i].FieldName;

i:=0;

MySQLtest.Memo1.Lines[0] :=
TempString;

for i := 1 to length(TempString) do

begin

MySQLtest.Memo1.Lines[1] :=
MySQLtest.Memo1.Lines[1] + ‘_’

end;

//Конец процедуры;PutResultToMemo;

//Глобальная процедура для заполнения Memo1
результатами выборки из SQLQuery1

i, j: integer;

FieldName, TempString: String;

MySQLtest.SQLQuery1.Open;

i := 0;

while not MySQLtest.SQLQuery1.EOF do

begin

j := 0;

TempString := ”;

while j <=
MySQLtest.SQLQuery1.FieldCount-1 do

begin

FieldName :=
MySQLtest.SQLQuery1.Fields[j].FieldName;

If
MySQLtest.SQLQuery1.FieldByName(FieldName).AsString <> ” then

TempString :=
+MySQLtest.SQLQuery1.FieldByName(FieldName).AsString+’….’

else

TempString :=
TempString+'[nil]….’;

inc(j)

end;

MySQLtest.SQLQuery1.Next;

MySQLtest.Memo1.Lines[i+2] :=
TempString;

inc(i)

end;

//Конец процедуры;ExecuteQuery;

try

//Начало соединения

MySQLtest.SQLQuery1.Active:=false;

MySQLtest.SQLQuery1.SQL.Clear;

MySQLtest.SQLQuery1.sql.add(‘SET
character_set_client=’+#39+’utf8’+#39+’,
character_set_connection=’+#39+’cp1251’+#39+’,character_set_results=’+#39+’utf8’+#39+’;’);

MySQLtest.SQLQuery1.ExecSQL;

MySQLtest.SQLQuery1.SQL.Clear;.SQLQuery1.sql.AddStrings(MySQLtest.EditSQLCommand.lines);

//Соединение удачно

//Подготавливаем Memo1

PrepareMemo;

//Записываем результат в Memo1

PutResultToMemo;

except

ShowMessage(‘Ошибка
при выполнении запроса’);

exit;;TMySQLtest.ButtonConnectClick(Sender:
TObject);

//Эта процедура выполняет подключение к MySQL,
основываясь на данных из //3 полей Edit:
EditHost, EditName,
EditPassword

//Также выполняется первая выборка, основанная
на тексте в EditSQLCommand

MySQL50Connection1.HostName :=
EditHost.Text;

MySQL50Connection1.UserName :=
EditName.Text;

MySQL50Connection1.Password :=
EditPassword.Text;

try

MySQL50Connection1.Connected := true

except

ShowMessage(‘Невозможно подключиться
к базе данных’);

exit;

end;

try

SQLTransaction1.Active:=true;

except

ShowMessage(‘Невозможно
создать транзакцию’);

exit;

end;

ExecuteQuery;

if MySQL50Connection1.Connected =
true then

StatusBar1.SimpleText
:= ‘Соединение установлено’;TMySQLtest.ButtonExecuteClick(Sender:
TObject);

ExecuteQuery.

Приложение Г.
Листинг тестовой программы, разработанной в Visual
Studio

// TestSQL.cpp: определяет точку входа для
консольного приложения.

//

#include <windows.h>

#include <winsock.h>

#include <mysql.h>

#include “stdafx.h”

#include <iostream>

#include <conio.h>

#include <stdlib.h>namespace
std;_tmain(int argc, _TCHAR* argv[])

{(“cls”);*conn;_RES
*res;_ROW row;i = 0;

// Получение дексриптора соединения=
mysql_init(NULL);(conn == NULL)

{(stderr, “Ошибка: невозможно создать
дескрипторn”);

}

// Подключение
к
серверу(!mysql_real_connect(conn,
“localhost”, “root”, “admin”, “test”,
NULL, NULL, 0))

{(stderr, “Ошибка: невозможно подключиться
к базе данныхn”, mysql_error(conn));

}

{(stdout, “Подключение
установленоn”);

}query;<< “Введите
SQL-запросn”;>> query;char* query_char =
query.c_str();_set_character_set(conn, “utf8”); //Изменение кодировки
запросов_query(conn, query_char); //Отправление запроса, введенного ранее

if (res = mysql_store_result(conn))
{(row = mysql_fetch_row(res)) {(i = 0; i <mysql_num_fields(res); i++) {::cout
<< row[i] << “n”; //Циклический вывод данных, полученных
из БД

}

}

} else fprintf(stderr, “%sn”,
mysql_error(conn));

// Закрытие
соединения_close(conn);(“Pause”);

}

Обновлено: 04.05.2023

Структурированный язык запросов SQL основан на реляционном исчисле­нии с переменными кортежами. Язык имеет несколько стандартов, наиболее распространенными из которых являются SQL-89 и SQL-92.

Язык SQL предназначен для выполнения операций над таблицами (созда­ние, удаление, изменение структуры) и над данными таблиц (выборка, изме­нение, добавление и удаление), а также некоторых сопутствующих операций. SQL является непроцедурным языком и не содержит операторов управления, организации подпрограмм, ввода-вывода и т. п. В связи с этим SQL автоном­но не используется, обычно он погружен в среду встроенного языка програм­мирования СУБД (например, FoxPro СУБД Visual FoxPro, ObjectPAL СУБД Paradox, Visual Basic for Applications СУБД Access).

В современных СУБД с интерактивным интерфейсом можно создавать зап­росы, используя другие средства, например QBE. Однако применение SQL зачастую позволяет повысить эффективность обработки данных в базе. На­пример, при подготовке запроса в среде Access можно перейти из окна Конст­руктора запросов (формулировки запроса по образцу на языке QBE) в окно с эквивалентным оператором SQL. Подготовку нового запроса путем редакти­рования уже имеющегося в ряде случае проще выполнить путем изменения оператора SQL. В различных СУБД состав операторов SQL может несколько отличаться.

Язык SQL не обладает функциями полноценного языка разработки, а ори­ентирован на доступ к данным, поэтому его включают в состав средств разра­ботки программ. В этом случае его называют встроенным SQL. Стандарт язы­ка SQL поддерживают современные реализации следующих языков программирования: PL/1, Ada, С, COBOL, Fortran, MUMPS и Pascal.

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

Различают два основных метода использования встроенного SQL: стати­ческий и динамический.

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

При динамическом использовании языка (динамический SQL) предпола­гается динамическое построение вызовов SQL-функций и интерпретация этих вызовов, например, обращение к данным удаленной базы, в ходе выполнения программы. Динамический метод обычно применяется в случаях, когда в при­ложении заранее неизвестен вид SQL-вызова и он строится в диалоге с пользователем.

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

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

Для удобства работы с представлениями в язык SQL введено понятие кур­сора. Курсор представляет собой своеобразный указатель, используемый для перемещения по наборам записей при их обработке.

Описание и использование курсора в языке SQL выполняется следующим обра­зом. В описательной части программы выполняют связывание переменной типа кур­сор (CURSOR) с оператором SQL (обычно с оператором SELECT). В выполняемой части программы производится открытие курсора (OPEN ), переме­щение курсора по записям (FETCH ), сопровождаемое соответству­ющей обработкой, и, наконец, закрытие курсора (CLOSE ).

Содержимое работы – 1 файл

Язык запросов SQL.docx

Язык запросов SQL.

SQL является непроцедурным языком и не содержит операторов управления, организации подпрограмм, ввода-вывода и т.п. В связи с этим SQL автономно не используется, обычно он погружен в среду встроенного языка программирования СУБД (например, FoxPro СУБД Visual FoxPro, ObjectPAL СУБД Paradox, Visual Basic for Applications СУБД Access).

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

Язык SQL не обладает функциями полноценного языка разработки, а ориентирован на доступ к данным, поэтому его включают в состав средств разработки программ. В этом случае его называют встроенным SQL. Стандарт языка SQL поддерживают современные реализации следующих языков программирования: PL/1, Ada, С, COBOL, Fortran, MUMPS и Pascal.

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

Различают два основных метода использования встроенного SQL: статический и динамический.

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

При динамическом использовании языка (динамический SQL) предполагается динамическое построение запроса в форме текстовой строки. Данная строка используется как параметр для функции выполнения SQL-запросов, которая выполняет синтаксический анализ строки запроса и формирует на его основе последовательность команд БД. Динамический метод обычно применяется в случаях, когда в приложении заранее неизвестен вид SQL-вызова.

Для удобства работы с представлениями в язык SQL введено понятие курсора. Курсор представляет собой своеобразный указатель на набор записей в представлении, обеспечивающий в каждый момент доступ лишь к некоторой небольшой части строк представления. С помощью операторов перемещения курсора по записям можно получить доступ ко всем строкам таблицы.

История. Первые разработки.

Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Дональд Чэмбэрлин (Donald D Chamberlin) и Рэй Бойс (Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (cost – based optimizer), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.

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

Первыми СУБД, поддерживающими новый язык, стали в 1979 году Oracle V2 для машин VAX от компании Relational Software Inc. (впоследствии ставшей компанией Oracle ) и System/38 от IBM, основанная на System/R.

Стандартизация.

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

Стандарт SQL1 разделялся на два уровня. Первый уровень представлял собой подмножество второго уровня, описывавшего весь документ в целом. То есть, такая структура предусматривала, что не все спецификации стандарта SQL1 будут относиться к Уровню 1. Тем самым, поставщик, заявлявший о поддержке данного стандарта, должен был заявлять об уровне, которому соответствует его реализация языка SQL. Это значительно облегчило принятие и поддержку стандарта, поскольку производители могли реализовывать его поддержку в два этапа.

Сразу после завершения работы над стандартом SQL1 в 1987 году была начата работа над новой версией стандарта, который должен был заменить стандарт SQL89, получив название SQL2, поскольку дата принятия документа на тот момент была неизвестна. Таким образом, фактически SQL89 и SQL2 разрабатывались параллельно. Новая версия стандарта была принята в 1992 году, заменив стандарт SQL89. Новый стандарт, озаглавленный как SQL92, представлял собой по сути расширение стандарта SQL1, включив себя множество дополнений имевшихся в предыдущих версиях инструкций.

SQL1 Уровень 1 -> SQL1 Уровень 2 -> SQL92 “Начальный” -> SQL92 “Средний” -> SQL92 “Полный”.

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

Изначально, SQL был основным способом работы пользователя с базой данных и позволял выполнять следующий набор операций:

  • создание в базе данных новой таблицы;
  • добавление в таблицу новых записей;
  • изменение записей;
  • удаление записей;
  • выборка записей из одной или нескольких таблиц (в соответствии с заданным условием);

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

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

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

  • запросы на создание или изменение в базе данных новых или существующих объектов (при этом в запросе описывается тип и структура создаваемого или изменяемого объекта);
  • запросы на получение данных;
  • запросы на добавление новых данных (записей)
  • запросы на удаление данных;
  • обращения к СУБД.

Основным объектом хранения реляционной базы данных является таблица, поэтому все SQL-запросы – это операции над таблицами. В соответствии с этим, запросы делятся на:

Гост

ГОСТ

В основе структурированного языка запросов SQL лежит реляционное исчисление кортежей.

Общая характеристика языка запросов SQL

SQL может выполнять операции над таблицами и над данными таблиц.

Язык SQL называют встроенным, т.к. он содержит функций полноценного языка разработки, а ориентируется на доступ к данным, вследствие чего он входит в состав средств разработки приложений. Стандарты языка SQL поддерживают языки программирования Pascal, Fortran, COBOL, С и др.

Существует 2 метода использования встроенного SQL:

  • статическое использование языка (статический SQL) – в тексте программы содержатся вызовы функций SQL, которые включают в исполняемый модуль после компиляции.
  • динамическое использование языка (динамический SQL) – динамическое построение вызовов функций SQL и их интерпретация. Например, можно обратиться к данным удаленной БД в процессе выполнения программы.

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

Представление – это таблица, которая формируется в результате выполнения запроса.

Основные операторы языка запросов SQL

Операторы языка SQL условно разделяются на 2 подъязыка:

  1. Язык определения данных DDL;
  2. Язык манипулирования данными DML.

В таблице символом * помечены специфические операторы языка.

Рассмотрим важнейшие операторы SQL.

Оператор создания таблицы:

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

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

Для создания таблицы books каталога книг, которая содержит поля:

type – тип книги,

author – автор книги,

name – название книги,

price – цена книги

оператор может выглядеть следующим образом:

Оператор изменения структуры таблицы:

При изменении структуры таблицы можно добавлять (ADD), изменять (MODIFY) или удалять (DROP) один или несколько столбцов таблицы. Правила записи данного оператора такие же, как и для оператора CREATE TABLE. Чтобы удалить столбец указывать не нужно.

Для добавления к таблице books поля number, в котором будет храниться количество книг, можно записать оператор:

Оператор удаления таблицы:

Например, чтобы удалить существующую таблицу с именем books достаточно воспользоваться оператором:

Оператор создания индекса:

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

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

ASC задает автоматическую сортировку значений в столбцах в порядке возрастания (по умолчанию), а DESC – в порядке убывания.

Оператор удаления индекса:

Оператор создания представления:

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

Оператор удаления представления:

Оператор выборки записей:

Оператор SELECT производит выборку и вычисления над данными из одной или нескольких таблиц. Результат выполнения оператора – ответная таблица, которая содержит (ALL) или не содержит (DISTINCT) строки, которые повторяются.

Операнд FROM содержит список таблиц, из которых берутся записи для отбора данных.

Оператор изменения записей:

Новые значения полей в записях могут не содержать значений (NULL) или вычисляться согласно арифметическому выражению.

Оператор вставки новых записей:

В первой записи оператора INSERT вводятся новые записи с заданными значениями в столбцах.

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

Оператор удаления записей:

В результате выполнения оператора удаляются из указанной таблицы строки, удовлетворяющие условию, которое определено необязательным операндом WHERE. Если операнд WHERE не указан, то удаляются все записи таблицы.

По возможностям манипулирования данными при описании запросов указанные языки практически эквивалентны. Отличаются языки способом формирования запросов: язык QBE предполагает ручное или визуальное формирование запроса, в то время как использование SQL означает программирование запроса. Запрос представляет собой специальным образом описанное требование, определяющее состав производимых над БД… Читать ещё >

Структурированный язык запросов SQL ( реферат , курсовая , диплом , контрольная )

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

Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов:

  • · QBE (QueryByExample) — язык запросов по образцу;
  • · SQL (StructuredQueryLanguage) — структурированный язык запросов.

По возможностям манипулирования данными при описании запросов указанные языки практически эквивалентны. Отличаются языки способом формирования запросов: язык QBE предполагает ручное или визуальное формирование запроса, в то время как использование SQL означает программирование запроса.

Язык SQL имеет несколько стандартов, наиболее распространенными из которых являются SQL89 и SQL-92. Язык предназначен для выполнения операций над таблицами (создание, удаление, изменение структуры) и над данными таблиц (выборка, изменение, добавление и удаление), а также некоторых сопутствующих операций. SQL является непроцедурным языком и не содержит операторов управления, организации подпрограмм, ввода-вывода и т. п. В связи с этим SQL автономно не используется, обычно он погружен в среду встроенного языка программирования СУБД (например, FoxPro СУБД Visual FoxPro, ObjectPAL СУБД Paradox, Visual Basic for Applications СУБД Access).

Операторы языка SQL можно условно разделить на два подъязыка: язык определения данных (Data Definition LanguageDDL) и язык манипулирования данными (Data Manipulation LanguageDML).

Читайте также:

      

  • Феминизм реферат по социологии
  •   

  • Лыжный спорт в тюменской области реферат
  •   

  • Человек как животное реферат
  •   

  • Проблемы эффективности производства в условиях рыночной экономики реферат
  •   

  • Современные методы управления реферат

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

Петрозаводский государственный университет

Кольский филиал

Кафедра информационных технологий

Доклад на тему:

«Язык SQL – общая характеристика, интерфейс с традиционными языками программирования»

студента 5 курса (гр. 2)

очного отделения

факультета ИПМ

специальности 230102 — Автоматизированные системы обработки информации и управления

Самсонова Антона Владимировича

Апатиты

2010

Оглавление

1       Характеристики

2       Вопросы практического программирования

3       Вопросы совместимости

4       Реализации SQL

5       Типы команд SQL

6       Преимущества и недостатки языка SQL

6.1    Преимущества

6.2    Недостатки

Список использованных источников

1.   Характеристики

В начале 1970-х годов в одной из исследовательских лабораторий компании IBM была разработана экспериментальная реляционная СУБД IBM System R, для которой затем был создан специальный язык SEQUEL, позволявший относительно просто управлять данными в этой СУБД. Аббревиатура SEQUEL расшифровывалась как Structured English QUEry Language — «структурированный английский язык запросов». Позже по юридическим соображениям язык SEQUEL был переименован в SQL.

Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Дональд Чэмбэрлин (Donald D. Chamberlin) и Рэй Бойс (Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (cost-based optimizer), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.

Первыми СУБД, поддерживающими новый язык, стали в 1979 году Oracle V2 для машин VAX от компании Relational Software Inc. (впоследствии ставшей компанией Oracle) и System/38 от IBM, основанная на System/R. Вопреки сложившемуся мнению, первой стала именно СУБД Oracle.

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

SQL (англ. Structured Query Language — «язык структурированных запросов») — универсальный компьютерный информационно-логический язык, появившийся в результате разработки реляционной модели данных, применяемый для создания, модификации и управления данными в реляционных базах данных.

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

SQL принципиально отличается от традиционных алгоритмических языков программирования прежде всего тем, что он относится к непроцедурным языкам. На языке типа Кобол или Си можно записать шаг за шагом все инструкции, необходимые для исполнения программы. Язык SQL позволяет задать только то, “что нужно делать”, а само исполнение отдельных операций (“как делать”) возлагается непосредственно на СУБД. Такой подход в значительной мере определяется самой философией реляционных баз данных. СУБД в данном случае рассматривается как “черный ящик”, и что происходит внутри него, пользователя не должно касаться. Его должно интересовать только внесение в базу данных необходимых изменений и получение правильного ответа на запрос.

Другой особенностью SQL является так называемая трехзначная логика. В большинстве языков булево выражение может принимать только два значения: истина и ложь. Язык SQL позволяет записывать в базу данных значение NULL (пустое значение). NULL – это специальный код, который помещается в столбец таблицы, если по какой-нибудь причине в нем отсутствуют данные. Когда значение NULL участвует в операциях сравнения, булев результат будет ни истина и ни ложь, а неизвестно.

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

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

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

SQL в настоящее время получил очень широкое распространение и фактически превратился в стандартный язык реляционных баз данных. Стандарт на язык SQL был выпущен Американским национальным институтом стандартов (ANSI) в 1986 г., а в 1987 г. Международная организация стандартов (ISO) приняла его в качестве международного. Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 году нового расширенного стандарта (ANSI SQL-92 или просто SQL2). Следующим стандартом стал SQL:1999 (SQL3). В настоящее время действует стандарт, принятый в 2003 году (SQL:2003) с небольшими модификациями, внесёнными позже.

2.   Вопросы практического программирования

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

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

клиента, который отвечает за организацию пользовательского интерфейса

сервер, который собственно хранит данные, обрабатывает запросы и посылает их результаты клиенту для отображения

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

Язык SQL позволяет только манипулировать данными, но в нем отсутствуют средства создания экранного интерфейса, что необходимо для пользовательских приложений. Для создания этого интерфейса служат универсальные языки третьего поколения (C, C++, Pascal) или проблемно-ориентированные языки четвертого поколения (xBase, Informix 4Gl, Progress, Jam,…). Эти языки содержат необходимые операторы ввода / вывода на экран, а также операторы структурного программирования (цикла, ветвтеления и т.д.). Также эти языки допускают определение структур, соответствующих записям таблиц обрабатываемой базы данных. В исходный текст программы включаются операторы языка SQL, которые во время исполнения передаются серверу БД, который собственно и производит манипулирование данными. Отношения, полученные в результате выполнения сервером SQL-запросов, возвращаются прикладной программе, которая заполняет строками этих отношений заранее определенные структуры. Дальнейшая работа клиентской программы (отображение, корректировка записей) ведется с этими структурами.

Каждая СУБД помимо интерактивной SQL-утилиты обязательно имеет библиотеку доступа и набор драйверов для различных операционных систем.

Библиотека доступа — это, как правило, объектный файл, исходный код которого создан на универсальном языке типа C. Эта библиотека содержит набор функций, позволяющих пользовательскому приложению соединятся с базой данных, передавать запросы серверу и получать ответные данные. Типичный набор функций такой библиотеки (имена функций зависят от используемой библиотеки):

Библиотечные вызовы преобразуются драйвером базы данных в сетевые вызовы и передаются сетевым программным обеспечением на сервер.

На сервере происходит обратный процесс преобразования: сетевые пакеты -> функции библиотеки -> SQL-запросы, запросы обрабатываются, их результаты передаются клиенту.

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

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

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

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

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

3.         Вопросы совместимости

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

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

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

До 1996 года вопросами соответствия коммерческих реализаций SQL стандарту занимался в основном Национальный институт стандартов и технологий (NIST), который и устанавливал уровень соответствия стандарту. Поздне́е подразделение, занимавшееся СУБД, было расформировано, и на текущий момент все усилия по проверке СУБД на соответствие стандарту ложатся на её производителя.

Положение изменилось с введением стандарта SQL:1999. Отныне стандарт приобрёл модульную структуру — основная часть стандарта была вынесена в раздел «SQL/Foundation», все остальные были выведены в отдельные модули. Соответственно, остался только один уровень совместимости — Core, что означало поддержку этой основной части. Поддержка остальных возможностей оставлена на усмотрение производителей СУБД.

В настоящее время язык SQL поддерживается многими десятками СУБД различных типов.

4.         Реализации SQL

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

1.      Интерактивный (или автономный) SQL дает возможность пользователям непосредственно извлекать информацию из базы или записывать в нее данные. Информация, получаемая по запросу SQL, может быть выдана на экран, переадресована в файл или на принтер.

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

Есть две разновидности статического SQL: встроенный и модульный.

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

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

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

Операторы динамического SQL обычно применяются в диалоговых средах для построения запросов и в графических средствах разработки приложений БД.

5.         Типы команд SQL

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

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

Основные категории команд языка SQL:

DDL – язык определения данных;

DML – язык манипулирования данными;

DQL – язык запросов;

DCL – язык управления данными;

команды администрирования данных;

команды управления транзакциями

Определение структур базы данных (DDL)

Язык определения данных (Data Definition Language, DDL) позволяет создавать и изменять структуру объектов базы данных, например, создавать и удалять таблицы. Основными командами языка DDL являются следующие: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX.

Манипулирование данными (DML)

Язык манипулирования данными (Data Manipulation Language, DML) используется для манипулирования информацией внутри объектов реляционной базы данных посредством трех основных команд: INSERT, UPDATE, DELETE.

Выборка данных (DQL)

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

Язык управления данными (DCLDataControlLanguage)

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

Команды администрирования данных

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

Команды управления транзакциями

Существуют следующие команды, позволяющие управлять транзакциями базы данных: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.

6.         Преимущества и недостатки языка SQL

6.1      Преимущества

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

Основные достоинства языка SQL заключаются в следующем:

стандартность – как уже было сказано, использование языка SQL в программах стандартизировано международными организациями;

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

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

реляционная основа языка – SQL является языком реляционных БД, поэтому он стал популярным тогда, когда получила широкое распространение реляционная модель представления данных. Табличная структура реляционной БД хорошо понятна, а потому язык SQL прост для изучения;

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

возможность программного доступа к БД – язык SQL легко использовать в приложениях, которым необходимо обращаться к базам данных. Одни и те же операторы SQL употребляются как для интерактивного, так и программного доступа, поэтому части программ, содержащие обращение к БД, можно вначале проверить в интерактивном режиме, а затем встраивать в программу;

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

возможность динамического изменения и расширения структуры БД – язык SQL позволяет манипулировать структурой БД, тем самым обеспечивая гибкость с точки зрения приспособленности БД к изменяющимся требованиям предметной области;

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

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

Язык SQL – первый и пока единственный стандартный язык для работы с базами данных, который получил достаточно широкое распространение. Практически все крупнейшие разработчики СУБД в настоящее время создают свои продукты с использованием языка SQL либо с SQL-интерфейсом.

6.2      Недостатки

— Несоответствие реляционной модели данных

Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем Манифестеони излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.

— Сложность

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

— Отступления от стандартов

Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

— Сложность работы с иерархическими структурами

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Википедия – режим доступа: ru.wikipedia.org/wiki/SQL

Вопросы практического програмирования – режим доступа: www.mstu.edu.ru/education/materials/zelenkov/ch_4_7.html

Введение в структурированный язык запросов SQL – режим доступа: www.intuit.ru/department/database/sql/1/

Всё про Sql – режим доступа: www.sql.ru/

Введение в стандарты языка баз данных SQL – режим доступа: citforum.ru/database/sqlbook/index.shtml