Главная

Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






SQL (Structured Query Language) история развития


SQL (Structured Query Language — Структурированный Язык Запросов) это стандартный язык запросов по работе с реляционными БД. Язык SQL появился после реляционной алгебры, и его начальный вариант был разработан в конце 70-х годов в компании IBM Research. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R. В дальнейшем этот язык применялся во многих коммерческих СУБД и в силу своего широкого распространения постепенно стал стандартом «де-факто» для языков манипулирования данными в реляционных СУБД, хотя он и весьма далек от полноценной реализации реляционной модели.

SQL больше напоминает человеческий язык, чем, например, C, PHP, или Java, так как это язык четвертого поколения[2].

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

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

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

В 1999 году появился новый стандарт, названный SQL3. Если отличия между стандартами SQL1 и SQL2 во многом были количественными, то стандарт SQL3 соответствует качественным серьезным преобразованиям. В SQL3 введены новые типы данных, при этом предполагается возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации. Наконец, добавлен раздел, который вводит стандарты на события и триггеры, которые ранее не затрагивались в стандартах, хотя давно уже широко использовались в коммерческих СУБД. В стандарте определены возможности четкой спецификации триггеров как совокупности события и действия. В качестве действия могут выступать не только последовательность операторов SQL, но и операторы управления ходом выполнения программы. В рамках управления транзакциями произошел возврат к старой модели транзакций, допускающей точки сохранения (SAVEPOINTS), и возможность указания в операторе отката ROOLBACK точек возврата позволит откатывать транзакцию не в начало, а в промежуточную ранее сохраненную точку. Такое решение повышает гибкость реализации сложных алгоритмов обработки информации.

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

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

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

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

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

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

Операторы SQL могут встраиваться в базовый язык программирования (которым может быть любой стандартный язык типа C++, PL, COBOL и т.д.), а могут выполняться и непосредственно в интерактивном режиме.

Типы данных

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

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

Типы данных SQL

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

o CHAR или CHAR(n) -символьные строки фиксированной длины. Длина строки определяется параметром n. CHAR без параметра соответствует CHAR(1). Для хранения таких данных всегда отводится n байт независимо от реальной длины строки.

o VARCHAR(n) - символьная строка переменной длины. Для хранения данных этого типа отводится число байт, соответствующее реальной длине строки.

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

o INTEGER или INT- целое, для хранения которого отводится, как правило, 4 байта. (Замечание: число байт, отводимое для хранения того или иного числового типа данных зависит от используемой СУБД и аппаратной платформы, здесь приводятся наиболее "типичные" значения) Интервал значений от - 2147483647 до + 2147483648

o SMALLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768

o Помимо указанных типов есть очень малое целое (TINYINT), целое среднего размера (MEDIUMINT), большое целое (BIGINT), имеющие длину, соответственно, 1байт, 3 байта, 8 байт и соответствующие этим длинам диапазоны значений.

· Вещественные типы данных - описывают числа с дробной частью.

o FLOAT и SMALLFLOAT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответственно).

o DECIMAL(p) - тип данных аналогичный FLOAT с числом значащих цифр p.

o DECIMAL(p, n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой.

· Денежные типы данных - описывают, естественно, денежные величины. Если ваша система такого типа данных не поддерживает, то используйте DECIMAL(p, n).

o MONEY(p, n) - все аналогично типу DECIMAL(p, n). Вводится только потому, что некоторые СУБД предусматривают для него специальные методы форматирования.

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

o DATE - тип данных для хранения даты.

o TIME - тип данных для хранения времени.

o INTERVAL - тип данных для хранения временного интервала.

o DATETIME - тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).

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

o BINARY

o BYTE

o BLOB (BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB – строки с большим двоичным объектом малого, сверхмалого, среднего и большого размера, соответственно).

· Последовательные типы данных - используются для представления возрастающих числовых последовательностей.

o SERIAL - тип данных на основе INTEGER, позволяющий сформировать уникальное значение (например, для первичного ключа). При добавлении записи СУБД автоматически присваивает полю данного типа значение, получаемое из возрастающей последовательности целых чисел.

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

 



Последнее изменение этой страницы: 2016-06-09

headinsider.info. Все права принадлежат авторам данных материалов.