История развития языка SQL




ЯЗЫК УПРАВЛЕНИЯ ДАННЫМИ ДЛЯ SQL SERVER

SQL является одним из двух доминирующих языков, используемых в реляционных базах данных, существует в различных формах с середины 70-х годов и приобрел огромную популярность в 80-е годы, когда реляционные базы данных получили широкое распространение как на больших вычислительных машинах, так и на мини-ЭВМ. Истоки SQL следует отнести к периоду возникновения реляционной модели. Следует заметить, что в исследовательских лабораториях IBM в начале 70-х годов одновременно с работой над будущим языком SQL разрабатывались и другие проекты по созданию и экспериментальной реализации реляционных языков. Наиболее известным из них является реляционный язык Query-By-Example (QBE), созданный примерно в одно время с SEQUEL (ранней версией SQL, Structured English QUEry Language). Историю разработки языка SQL иллюстрирует рис. 3.1.

Одной из причин преуспевания SQL послужило формирование ANSI комитета X3H2, учрежденного для разработки стандартов языков баз данных. Документ, озаглавленный "SQL" представлял собой сведения о различных формах SQL, используемых в коммерческих программных продуктах. Примерно в то же время ISO в рамках технического комитета TC97 также вела работу по созданию стандарта языков реляционных баз данных. В середине 80-х годов обе организации одобрили стандарты SQL (ANSI – в 1986 году, а ISO – в начале 1987 года).

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

Однако еще до 1989 года как в ANSI, так и в ISO началась работа по радикальным расширениям SQL. Эта работа, первоначально идентифицированная как SQL2, началась в 1987 году, и ее результаты спустя пять лет были приняты в качестве стандарта SQL-92. При этом работа над SQL2 перекрывалась работой над SQL3, новой версией стандарта SQL, которая до сих пор находится в стадии разработки. Работа над SQL3 началась в 1990 году параллельно с SQL2 главным образом как «запасной вариант» для возможностей, которые предполагалось не включать по тем или иным причинам в SQL2 (объектно-ориентированные расширения языка, дополнительные реляционные возможности). История стандартизации SQL отражена на рис. 3.2.

Рассмотрим кратко стандарт SQL-92, предусматривающий разделение языка на три различных уровня:

1. Базовый SQL. Этот уровень построен таким образом, чтобы он был очень похожим на SQL-89 с некоторыми небольшими различиями, такими как новые интерфейсы языков программирования для Ада, С и MUMPS, переменная состояния SQLSTATE и др.

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

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

Стандарт SQL-92 имеет 149 элементов, определяемых реализацией в следующих областях: типы данных; метаданные; сеансы, транзакции и соединения; операторы SQL; литералы, имена и идентификаторы; выражения значений и функции значений; диагностика; информационная схема; встроенный SQL и модули; разное (другие области или общие концепции).

Рассмотрим основные возможности языка SQL-92:

– манипулирование таблицами. В дополнение к созданию таблиц с помощью оператора CREATE TABLE были добавлены также возможности удаления таблиц (DROP TABLE) и модификации их содержимого (ALTER TABLE);

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

– новые типы данных. В SQL-92 были добавлены следующие типы данных: DATE; TIME; TIMESTAMP; строки типа BIT; литерные и битовые строки переменной длины; строки типа NATIONAL CHARACTER (ориентированы на национальные наборы символов);

– новый параметр состояния. Имеющийся в предыдущей версии стандарта код состояния SQLCODE был заменен параметром SQLSTATE, который предоставляет гораздо больше диагностической информации. Кроме того, была добавлена диагностическая область. Размер этой области специфицируется пользователем с помощью оператора SET TRANSACTION или является величиной, определяемой реализацией, если пользователь явно не указал этого размера;

– операторы транзакций. Небольшие синтаксические изменения были сделаны в операторах COMMIT и ROLLBACK (оба используются для завершения транзакций). В стандарте SQL-89 вместе с ключевыми словами этих операторов следовало использовать слово WORK (COMMIT WORK и ROLLBACK WORK). В SQL-92 слово WORK было сделано необязательным. В отличие от некоторых коммерческих СУБД транзакции начинаются не выполнением оператора START TRANSACTION, а неявно;

– дополнительные связывания языка. Базовый SQL, в основном, совпадает со стандартом SQL-89 с небольшими расширениями;

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

– информационная схема. Стандарт SQL-92 предоставляет формальные средства для управления метаданными базы данных. Информационная схема обеспечивает в качестве формального метода управления метаданными базовые таблицы в схеме определения (DEFINITION_SCHEMA) и построенные на их основе таблицы-представления (view), управляемые в информационной схеме (INFORMATION_SCHEMA);

– безопасность. В стандарте SQL-89 свойства безопасности были предусмотрены для таблиц, столбцов и представлений. В SQL-92 были добавлены возможности защиты и управления доступом для доменов, наборов символов, сортирующих последовательностей и трансляций. Возможности защиты предоставляются в следующих областях: выборка (SELECT); добавление (INSERT); обновление (UPDATE); удаление (DELETE); возможность ссылки (REFERENCES); использование (USAGE) – для доменов, наборов символов, сортирующих последовательностей и трансляций. Привилегии предоставляются с помощью оператора GRANT. В стандарте SQL-89 привилегии никогда не могут быть отменены, а в SQL-92 эта возможность добавлена и может осуществляться с помощью оператора REVOKE. Кроме того, привилегии могут предоставляться таким образом, что их получателю может быть позволено передавать данную конкретную привилегию. Такая возможность осуществляется путем снабжения оператора GRANT спецификаций WITH GRANT OPTION. Хотя свойства безопасности в SQL-92 были значительно расширены по сравнению с более ранними версиями стандарта SQL, им еще недостает ряда возможностей, необходимых для основных приложений с повышенными требованиями к безопасности;

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

Transact-SQL.

Общение любой программы с базами данных осуществляется с помощью

операторов языка, называемого Transact-SQL.

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

данными.

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

сервера).

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


Таблица 1

 

Метасимвол Значение метасимвола
::= Равно по определению
| Альтернатива – выбор одного из приведенных вариантов. В данном пособии для облегчения понимания оператора альтернативные варианты перечисляются в столбец
<……> Параметр – требует замены описанным в угловых скобках объектом
{.…….} Обязательный выбор одной или нескольких конструкций, из перечисленных в скобках
[……..] Необязательная конструкция в операторе
,... Список, состоящий из нескольких однотипных конструкций

 

В наборе средств для работы с базами данных языка Transact-SQL можно выделить:

1) операторы. Среди операторов SQL выделяют следующие группы операторов:

– операторы DDL (Data description language), предназначенные для создания и модификации объектов сервера и БД;

– операторы DML (Data manipulation language) – операторы, используемые для управления данными;

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

3) системные процедуры – готовые процедуры, хранящиеся в БД MASTER и доступные для исполнения пользователем с необходимыми

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

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

5) внешние (расширенные) хранимые процедуры. Внешние процедуры создаются на любом языке программирования и компилируются в DLL- файл. Внешние процедуры должны быть зарегистрированы на сервере с помощью системной процедуры sp_addextendedproc. С сервером поставляется ряд внешних процедур, предназначенных для работы с ОС. В имени внешних процедур сервера используется префикс xp. Например, процедуры для выполнения команд ОС (xp_cmdshell) или отправки почтовых сообщений (xp_sendmail). Основной конструкцией Transact-SQL являются операторы. Полнота функций управления объектами сервера и баз данных требует присутствия в языке операторов DDL для создания, удаления и изменения объектов.

 

SQL Server предлагает три метода для создания баз данных: воспользоваться мастером Create Database Wizard, создать базу данных при помощи SQL Server Enterprise Manager или применить команду CREATE DATABASE, которую можно сохранить в файле и запускать как сценарий. Эти три метода будут описаны ниже, в следующих трех подразделах. Вы должны знать, что мастер Create Database Wizard обладает некоторыми ограничениями. Так, он помещает все созданные им файлы данных на один дисковый накопитель, в одну заданную вами папку. При использовании этого мастера вы не сможете поместить файлы данных в другое физическое местоположение (ни на другие дисковые накопители, ни в другие папки). Вы можете поместить файлы журналов на диск или в папку, отличающуюся от диска или папки для файлов данных, но, опять таки, только в одно физическое местоположение. Нельзя задать пользовательские группы файлов, и все файлы получат одинаковые настройки для роста. Из-за этих ограничений мастер Create Database Wizard является наилучшим решением, когда вам нужно создать в базе данных только один первичный файл данных и один файл для журнала транзакций. (С другой стороны, в дальнейшем вы всегда можете добавить в базу данных файлы и группы файлов, если они вам понадобятся.)

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

 

Для получения информации о БД можно воспользоваться процедурой SP_HELPDB [‘< имя базы >’], направив запрос из QA, или посмотреть свойства базы в утилите ЕМ.

Модификация области данных существующей базы состоит в добавлении (ADD), удалении (REMOVE) или изменении (MODIFY) параметров файлов и файловых групп БД. Каждое выполнение модифицирующего базу оператора ALTER DATABASE позволяет внести в базу только одно изменение. Сложные модификации баз реализуются наборами операторов. Оператор SQL для изменения области данных базы имеет вид:

Описание ADD FILE < файла >[…] TO FILEGROUP < имя файловой группы >

ADD LOG FILE < описание файла > […] REMOVE FILE < логическое имя файла >

ALTER DATABASE < имя БД > ADD FILEGROUP < имя файловой группы >

REMOVE FILEGROUP< имя файловой группы > MODIFY FILE < описание файла >

MODIFY FILEGROUP< имя файловой группы >

< свойство файловой группы >

 

< свойство файловой группы > задается одним из следующих значений: READONLY – разрешает только чтение данных из файловой группы,

READWRITE – разрешает чтение, изменение и запись данных в файловой группе,

DEFAULT – объявляет данную группу используемой по умолчанию, именно в этой группе будут размещаться объекты базы, для которых группа явно не задана, исходно такой группой является PRIMARY.

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

«Свойства» и внести изменения в появившейся форме.

 

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

DBCC SHRNKDATABASE (< имя базы > [,< свободногопространст ва > ]

[, { NOTRUNCATE | TRUNCATEONLY }])

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

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

Например, для сжатия базы pubs с сохранением запаса в 10% можно воспользоваться оператором DBCC SHRNKDATABASE (pubs, 10)

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: