Файл: Основы проектирования программ. Этапы создания программного обеспечения.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.03.2023

Просмотров: 100

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Любая компьютерная система использующая язык структурированных запросов, управляет базой данных, называется системой управления базами данных (СУБД). Если вам нужно получить данные из базы данных, можно использовать SQL для выполнения запроса. СУБД обрабатывает SQL запрос, получает запрошенные данные и возвращает его к вам. Этот процесс запроса данных из базы данных и получения результатов называется запрос к базе данных, отсюда и название языка структурированных запросов, которое по сути . "Structured Query Language" является неправильным.

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

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

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

Во-вторых, SQL это не совсем полный язык программирования, как COBOL, C, C + + или Java [27]. Вместо этого SQL представляет собой базу данных подъязыка, состоящая из около 40 запросов для специализированных задач управления базами данных [13]. Эти заявления SQL может быть встроен в другой язык, например COBOL или C, чтобы продлить этот язык для использования в доступ к базе данных. Кроме того, запросы могут быть явно направлены к системе управления базами данных для обработки, через интерфейс уровня вызовов от таких языков, как C, C + +, или Java, или с помощью сообщений, отправленных через компьютерную сеть.


SQL является декларативным или описательным языком, а не процедурным. SQL не содержит IF для проверки условий, и не GOTO, DO, или предложений для программного управления потоком. SQL позволяет описать запросы, как сбор данных, описав какие данные должны быть получены или добавлены в базу данных. SQL не особенно структурированный язык, особенно в сравнении с хорошо структурированный таких языках, как C, Pascal, Java [14,15,21]. Рассмотрим основные элементы языка, а так же особенности их практического применения.

2.2 Запросы, как основной элемент SQL

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

Предложения языка структурированных запросов, могут быть вид запросов или обновления данных, а так же работают над данными, которые хранятся в виде таблицы или табличных просмотров, созданных на базе этих таблиц. В результате обновления данных происходят изменения в сохраненных данных, которые видно, в процессе выполнения последующих запросов. Как правило, обновления могут быть применены к тем данным, при отображении которых каждая строка данных отображается однозначно из необходимой таблицы. Это правило позволяет отображать обновления в целях обновления базовой таблицы [1, c.23; 22, c.77].

Запрос, реализованный при помощи языка структурированных запросов состоит из одного или нескольких запросных блоков . Блок запроса состоит из нескольких пунктов, каждый из которых начинается с ключевого слова. Некоторые из этих ключевых слов являются обязательными (ключевые слова SELECT, и FROM), а некоторые не требуются (ключевые слова WHERE, GROUP BY, и HAVING) т.е. не являются обязательными [16,с.188; 19, c.454].

Рассмотрим запрос, который иллюстрирует блок соединения двух таблиц. Концептуально, строки из частей таблицы в паре со строками из связанной таблицы, в соответствии с критерием, указанным в WHERE [18;c.67]. Из сохранившихся строк, SELECT определяет столбцы, которые появляются в результате запроса (в данном случае, номер и название поставщика). Различные стратегии возможны для выполнения этого запроса, так как SQL не является процедурным языком, выбор стратегии выполнения остается за оптимизирующим компилятором [6].


SELECT p.partno, s.name

FROM parts p, suppliers s

WHERE p.suppno = s.suppno

AND s.location = ‘Denver’

Много запросов, в том числе приведенный пример, состоит из одного блока запроса. Блоки запросов могут также быть объединены в большие запросы. В следующем примере, запрос-блок служит подзапросом, который вычисляет значение, которое в свою очередь, используется в другом блоке запросов. Подзапрос находит максимальную стоимость в части таблицы, а внешний блок запроса возвращает часть номера деталей, которые должны иметь эту максимальную стоимость. Блоки запросов связаны между собой при помощи ключевого слова WHERE, это означает, что значение в WHERE- условие которое проверяется на включение в список значений, возвращаемых подзапросом, который может в общем возвращать несколько значений [23, c.24].

SELECT partno

FROM parts

WHERE cost IN

(SELECT max(cost)

FROM parts)

Рассмотрим еще один способ реализации этих действий, в котором блоки запросов могут быть объединены в большой запрос с помощью UNION или набора операторов INTERSECT и EXCEPT, которые вычисляют объединение, пересечение и разность множеств строк, возвращенных на два запроса. Типы данных строк, возвращенных соответствующим блоком запроса должны быть совместимы [24, c.44]. Следующий пример вычисляет разность двух блоков запросов, чтобы найти поставщиков. Запрос включает в себя ключевое слово ORDER BY, которое определяет порядок для строк в результате запроса. ORDER BY предложение распространяется не на весь запрос, а на отдельные блоки запроса.

SELECT suppno

FROM suppliers

EXCEPT

SELECT suppno

FROM parts

ORDER BY suppno

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

SELECT s.suppno, p.partno

FROM suppliers s LEFT OUTER JOIN parts p

ON s.partno = p.partno

AND s.location = ‘Denver’

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


2.3 Средства манипулирования данными, предоставляемые языком структурированных запросов

Средства манипулирования данными языка структурированных запросов состоят из запросов INSERT, DELETE и UPDATE, которые используются для вставки строк в таблицу, удаление строк из таблицы, а также обновление значений строк в таблице. Значения, которые будут использоваться в запросах обработки данных могут быть определены, как константы или вычисляется в качестве подзапросов, о чем свидетельствуют следующие примеры. Этот пример обновляет таблицу запасных частей, что увеличивает стоимость всех деталей, поставляемых определенным поставщиком на 10%:

UPDATE parts

SET cost = cost * 1.1

WHERE suppno = ‘105’

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

DELETE FROM suppliers s

WHERE NOT EXISTS

(SELECT partno

FROM parts

WHERE suppno = s.suppno)

2.4. Выводы по анализу структуры языка SQL

Анализ структуры языка SQL позволяет сделать следующие выводы.

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

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

Одним из спорных и сложных моментов использования таблиц реляционной базы данных, это использование так называемого Null значения. Этот вопрос изучался Коддом, он указывал в своих работах, что СУБД должна поддерживать нулевое значение, которая является систематической и отличается от всех регулярных значений [11]. Некоторые авторы считают, что сложность введены нулевых значения перевешивает их пользу. SQL поддерживает нулевое значение и позволяет проектировщикам базы данных, указать те столбцы, где нули не допускаются. Одним из преимуществ такого подхода является то, что нулевые значения оказались полезными при разработке различных возможностей языка, таких как внешние соединения, CUBE и ROLLUP, которые были добавлены в ходе эволюции SQL.


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

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

Более сложные приложения обычно включают использование как SQL, так и универсального языка программирования. Это требует соответствия между типом SQL и универсальным языком программирования, а также определенный интерфейс для обмена данными между двумя средами. Интерфейсы были определены между SQL и C, Java и многими другими языками. Эти интерфейсы можно разделить на две основные категории:

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

Вызова интерфейса: При таком подходе, главная программа использует вызовы функций, чтобы установить соединение с базой данных и передать SQL запрос в базу данных системы. Преобразование SQL запроса в оптимизированный план выполнения происходит во время выполнения. Наиболее широко используемый интерфейс этого типа ODBC (Open Database Connectivity) [12] и JDBC (Java Database Connectivity) [13]. С ODBC и JDBC драйверы существуют для многих популярных реляционных систем баз данных, эти интерфейсы широко используются в приложениях, которые должны получать доступ к удаленным базам данных и должны быть совместимы с системами баз данных от различных производителей.