1. Лекция: Стандарты языка SQL

В лекции обсуждаются вопросы стандартизации языка SQL.

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

Язык SQL предназначен для доступа к информации и управления реляционной базой данных. Управление различными реляционными базами данных осуществляют программы, называемые СУБД - системы управления базами данных (DBMS - DataBase Management System). Сама реляционная база данных представляет собой хранилище определенным образом организованной информации и СУБД. Однако на практике термин СУБД часто заменяют термином БД (База Данных). Для того чтобы c различными базами данных - такими как Oracle, Microsoft SQL Server, Informix, DB2, Access, MySQL - можно было общаться на одном языке, был разработан язык SQL.

Начиная с 1986 года, комитеты ISO (International Organization for Standardization) и ANSI (American National Standards Institute) приступили к созданию ряда стандартов языка SQL, которые впоследствии были приняты и получили следующие названия: SQL86, SQL89, SQL92 и SQL99.

Стандарт SQL86 зафиксировал минимальный стандартный синтаксис языка SQL.

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

До последнего времени большинство СУБД поддерживали стандарт SQL92.

В стандарте SQL92 было определено три уровня соответствия:

  • основной (Entry);
  • средний (Intermediate);
  • полный (Full).

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

Новый стандарт SQL99, при разработке именовавшийся как SQL3, стандартизировал объектные расширения языка SQL и некоторые процедурные расширения языка SQL. К моменту принятия этого стандарта большинство коммерческих СУБД, таких как Oracle, уже де-факто ввели использование объектных типов и наследования.

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

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

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

В настоящий момент стандарт SQL99 содержит следующие уровни соответствия:

  • Функциональное ядро.

    Данный уровень является обязательным для любой реализации СУБД. Он включает в себя основной уровень соответствия SQL92, а также поддержку работы с LOB-объектами (Large Object), вызов из SQL внешних программ, написанных на других языках программирования, и простые типы данных, определяемые пользователем (UDT-типы, User-Defined Datatypes). Вводится поддержка LOB-объектов двух типов: бинарных BLOB-объектов (Binary Large Object) и символьных CLOB-объектов (Character Large Object). Для доступа к LOB-объектам вводятся объекты, называемые локаторами. Локаторы описываются целочисленными переменными, реализующими доступ к LOB-объекту по ссылке. Внешние программы определяются как объекты схемы, так же, как и таблицы. В зависимости от реализации сам код внешней программы может находиться в DLL-библиотеке или в произвольном файле, а внешняя программа создается оператором языка CREATE PROCEDURE или CREATE FUNCTION с обязательным указанием фраз LANGUAGE и EXTERNAL. Следует отметить, что хотя использование внешних программ входит в функциональное ядро, но поддержка вызова процедур и функций SQL относится к расширенному уровню соответствия "PSM-модули" (Persistent Stored Module). Определяемые пользователем типы данных могут быть простыми и структурированными. Второй случай относится к уровню соответствия "Базовая поддержка объектов". Простой тип данных, определяемый пользователем - это существующий тип данных, для которого определено новое имя и возможно некоторое ограничение по количеству символов или цифр. Простой тип данных, определяемый пользователем, создается оператором CREATE TYPE (например, CREATE TYPE name_of_new_type AS INTEGER (5) FINAL;).

  • Поддержка работы с датой/временем.

    Этот уровень соответствия вводит типы данных DATETIME и INTERVAL, а для типа DATETIME вводит поля TIMEZONE_HOUR и TIMEZONE_MINUTE, определяющие смещение для зонального времени относительно универсального времени. В стандарте SQL92 полного уровня соответствия типы данных DATETIME и INTERVAL уже были специфицированы.

  • Управление целостностью.

    Этот уровень соответствия вводит поддержку дополнительных возможностей ссылочной целостности: подзапросы в ограничениях целостности CHECK оператора CREATE TABLE, триггеры, утверждения, создаваемые оператором CREATE ASSERTION. Большинство из этих возможностей входило в стандарт SQL92.

  • Активные базы данных.

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

  • OLAP.

    Этот уровень соответствия определяет средства описания более сложных запросов. Так, в оператор SELECT включена фраза INTERSECT, позволяющая получать пересечения множеств, выданных несколькими запросами. В стандарте SQL92 эта возможность прописывалась только для полного уровня соответствия. В оператор SELECT включена фраза FULL OUTER JOIN, предназначенная для создания полных внешних соединений таблиц. Такое соединение будет содержать все строки из объединяемых таблиц, в которых при отсутствии совпадений проставляются NULL-значения. Подобная возможность была предусмотрена и в полном уровне соответствия стандарта SQL92. В операторах языка SQL, применяемых для манипулирования данными, определяется поддержка использования конструкторов значений строк и таблиц. Конструкторы значений строк состоят из одного или нескольких выражений (например, (NULL,1,'Field1')). Конструкторы значений таблиц представляют собой набор значений конструкторов строк, описывающий группу строк (например, VALUES (1,'A'), (2,'B')).

  • PSM-модули.

    Этот уровень соответствия полностью описан в документе SQL/PSM стандарта SQL99. Так, язык SQL расширяется операторами управления CASE, IF, WHILE, REPEAT, LOOP и FOR. Вводится поддержка процедур и функций, создаваемых операторами CREATE PROCEDURE и CREATE FUNCTION. В язык SQL введено использование переменных и применение обработчиков ошибок.

  • CLI-интерфейс.

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

  • Базовая поддержка объектов (Basic Object Support).

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

  • Расширенная поддержка объектов (Enhanced Object Support).

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

Представленные выше уровни расширенного соответствия напрямую не связаны с документами, соответствующими разделам стандарта. В настоящее время стандарт SQL99 содержит следующие основные разделы:

  • SQLFramework - описывает логические основы стандарта.
  • SQLFoundation - определяет содержание каждого раздела стандарта и описывает функциональное ядро стандарта (Core SQL99).
  • SQL/CLI - описывает интерфейс уровня вызова.
  • SQL/PSM - определяет процедурные расширения языка SQL.
  • SQL/Bindings - определяет механизм взаимодействия языка SQL с другими языками программирования.
  • SQL/MM - описываются средства языка SQL, предназначенные для работы с мультимедийными данными.
  • SQL/OLB - определяет связь SQL с объектными языками, описывая 0-часть стандарта SQLJ для встраивания операторов SQL в язык Java.

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

Международная организация стандартизации ISO в рамках 32 подкомитета JTC1 ("Data Management and Interchange") разрабатывает стандарты в области управления и обмена данными для локальных и распределенных информационных систем.

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

В рамках SC32 функционирует ряд рабочих групп:

  • WG01 - рабочая группа, специализирующаяся на выработке стандартов для идентификации и спецификации технологии формального описания разрабатываемых бизнес-сценариев и их компонентов, а также других стандартов, используемых в области электронной коммерции.
  • WG02 - рабочая группа, разрабатывающая и развивающая стандарты по спецификации и управлению метаданными, обмену метаданными в различных средах (в Internet, Intranet и в других средах). В число наиболее интересных проектов данной группы входят следующие:
    • 1.32.16.01.02.00 ISO/IEC AWI 20943-2 "Информационные технологии - Применение XML структурированных данных для процедуры регистрации данных" (Information technology - Procedure for Achieving Data Registry Content Consistency - XML Structured Data). Де-факто язык XML уже используется web-серверами как язык описания дескриптора доставки модулей, располагаемых и регистрируемых на сервере;
    • 1.32.17.01.00.00 ISO/IEC AWI 20944 "Информационные технологии - Сервисы доступа к метаданным" (Information technology - Metadata Access Service).
  • WG03 - рабочая группа, разрабатывающая стандарт языка взаимодействия с базами данных. Круг вопросов, рассматриваемых WG03, включает развитие языка для описания структуры и содержания базы данных в многопользовательских и многосерверных средах. Рассматриваемые спецификации определяют стандартные типы данных, механизмы для создания новых типов данных, включая определения их поведения. Кроме того, рабочая группа занимается вопросами стандартизации интерфейса разрабатываемого языка с другими языками программирования, а также вопросами стандартизации типов данных и их поведения в рассматриваемом языке с другими языками представления и обработки данных. В число наиболее интересных проектов данной группы входят следующие:
    • 1.32.03.05.09.00 ISO/IEC CD 9075-9 "ИТ- Язык SQL: Управление внешними данными" (Information technology - Database Languages - SQL - Part 9: Management of External Data (SQL/MED));
    • 1.32.03.05.14.00 ISO/IEC WD 9075-14 "ИТ- Язык SQL: Взаимодействие SQL и ХМL" (Information technology - Database Language SQL - Part 14: SQL/XML (for SQL:200n)).
  • WG04 - рабочая группа, стандартизирующая пакеты абстрактных типов данных для использования в различных прикладных областях.
  • WG05 - рабочая группа, разрабатывающая стандарты в области взаимодействия приложений и баз данных, в которые включены вопросы удаленного доступа к данным и протоколы передачи данных. Среди наиболее интересных проектов группы отметим следующий:
    • 1.32.05.04.00.00 ISO/IEC CD 9579 ed 4 "ИТ - Удаленный доступ к данным в SQL" (Information technology - Remote Database Access for SQL: (RDA/SQL). Edition 4).

В последнее время для обмена данными и представления информации все чаще используется язык XML (eXtensible Markup Language). Этот язык не привязан к какой-либо конкретной платформе или к конкретному производителю. Первая спецификация языка XML 1.0 получила статус рекомендации консорциума W3C в 1998 году. Далее консорциум W3C разработал и опубликовал ряд стандартов, связанных с XML (Extensible Markup Language (XML) Version 1.0 (Edition 2): http://www.w3.org/TR/REC-xml), включая стандарт на механизм связывания XLink и XPointer, стандарт синтаксиса схемы, описывающей набор данных (Recommendation) XML Schema Part 1: Structures, 2 May, 2001, (Recommendation) XML Schema Part 2: Datatypes, 2 May, 2001: http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/, http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/), спецификации по определению и использованию пространства имен (Namespaces in XML, 14 January, 1999: http://www.w3.org/TR/REC-xml-names).

Консорциум W3C, продолжая работу над стандартизацией XML, опубликовал рекомендации по DOM XML - объектной модели документа, представляющей XML-документ в виде объекта.

Вопросами стандартизации XML также частично занимается OASIS (Организация по продвижению стандартов структурирования информации - Organization for the Advancement of Structured Information Standards: http://www.oasis-open.org/).

Инженерной группой IETF был разработан стандарт SOAP (Simple Object Access Protocol), использующий язык XML, как язык для обмена данными. Фактически SOAP позволяет посредством применения XML реализовывать межплатформенный доступ к данным, связывая воедино применение таких технологий, как CORBA, EJB и COM.

Разрабатываемый в настоящее время консорциумом W3C стандарт XQL (XML Query Language: http://www.w3.org/TR/2001/WD-xquery-20011220/) включает вопросы, связанные со спецификацией методов выполнения запросов к набору XML-документов.

В рамках WG3 32 подкомитета JTC1 также разрабатывается стандарт, связанный с использованием языка XML: "ИТ - Язык SQL - часть 14: Спецификация SQL/XML" ( Information technology - Database languages - SQL - Part 14: XML-Related Specifications (SQL/XML)). Разрабатываемый стандарт рассматривает механизмы преобразования данных, описываемых средствами языка SQL, в данные, представляемые языком XML, и обратно, включая алгоритмы соответствия SQL-таблиц типам данных XML-схемы, соответствия SQL-значений значениям XML, а также приводит описание XML-схемы для SQL/XML. По этому стандарту опубликован Final Committee Draft ISO/IEC FCD 9075-14.

Одним из наиболее значительных стандартов, разрабатываемых в настоящее время и предназначаемых для обмена данными, является стандарт ISO/IEC WD 9579, Fourth Edition "ИТ - удаленный доступ к базам данных для SQL" (Information Technology - Remote Database Access for SQL with Extended Security).

Рассматриваемый стандарт RDA/SQL базируется на уже существующих следующих стандартах IETF ( http://www.internic.net):

  • RFC 791 Internet Protocol.
  • RFC 793 Transmission Control Protocol.
  • RFC 819 The Domain Naming Convention for Internet User Applications.
  • RFC 1122 Requirements for Internet Hosts - Communication Layers.
  • RFC 1123 Requirements for Internet Hosts - Application and Support.
  • RFC 2246 The TLS Protocol.

RDA/SQL может быть использован для реализации удаленного доступа к СУБД, соответствующей стандарту ISO/IEC 9075 (Database Language SQL).

Стандарт RDA/SQL описывает модель для удаленного взаимодействия SQL-клиента с одним или несколькими SQL-серверами посредством коммуникационных протоколов.

RDA/SQL устанавливает соответствие RDA-протокола стандартным протоколам TCP/IP и TLS (Transport Layer Security), вводит понятия RDA-сообщения, RDA-оператора, RDA-протокола и RDA-передачи.

В стандарте определяется RDA-модель среды SQL (рис 1.1) и функциональные компоненты, составляющие среду RDA-клиента и среду RDA-сервера.

RDA-модель среды SQL
Рис. 1.1.  RDA-модель среды SQL

RDA-модель определяет провайдера транспортного уровня, реализующего взаимодействие между RDA-клиентом и RDA-сервером.

Стандарт ISO/IEC 9075-3 (SQL/CLI) описывает результирующий набор, определяемый на стороне сервера, а стандарт RDA/SQL описывает RDA-операторы, предназначаемые для взаимодействия с результирующим набором и соответствующие вызовам SQL/CLI. Наряду с RDA-операторами, данный стандарт вводит коды атрибутов, используемые RDA. К настоящему времени рабочей группой WR5 опубликована 4-я редакция разрабатываемого стандарта RDA/SQL.