Oracle для профессионалов



              

Влияние стандартов


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

SQL92 — это стандарт ANSI/ISO для СУБД. Он является развитием стандарта ANSI/ISO SQL89. Этот стандарт задает язык (SQL) и поведение (транзакции, уровни изоляции и т.д.) для СУБД. Знаете ли вы, что многие коммерческие СУБД соответствуют стандарту SQL92? А знаете ли, как немного это значит для переносимости запросов и приложений?

Начиная читать стандарт SQL92, обнаруживаешь, что он имеет четыре уровня.

  • Начальный уровень. Именно этому уровню соответствует большинство предлагаемых СУБД. Этот уровень является незначительным развитием предыдущего стандарта, SQL89. Ни одна СУБД не сертифицирована по более высокому уровню. Более того, фактически Национальный институт стандартов и технологий (National Institute of Standards and Technology — NIST), агентство, сертифицировавшее соответствие стандартам SQL, сертификацией больше не занимается. Я входил в состав команды, сертифицировавшей Oracle 7.0 в NIST как соответствующий начальному уровню стандарта SQL92 в 1993 году. СУБД, соответствующая начальному уровню этого стандарта, поддерживает набор возможностей Oracle 7.0.
  • Переходный. С точки зрения поддерживаемых возможностей это что-то среднее между начальным и промежуточным уровнем.
  • Промежуточный. Этот уровень добавляет много возможностей, в том числе (этот список далеко не исчерпывающий):
    • динамический SQL;
    • каскадное удаление для обеспечения целостности ссылок;
    • типы данных DATE и TIME;
    • домены;
    • символьные строки переменной длины;
    • выражения CASE;
    • функции CAST для преобразования типов данных.
    • Полный. Добавляет следующие возможности (этот список тоже не исчерпывающий):
    • управление подключением;
    • тип данных BIT для битовых строк;
    • отложенная проверка ограничений целостности;
    • производные таблицы в конструкции FROM;
    • подзапросы в конструкции CHECK;
    • временные таблицы.
    • В стандарт начального уровня не входят такие конструкции, как внешние соединения, новый синтаксис для внутренних соединений и т.д. Переходный уровень требует поддержки соответствующего синтаксиса внешнего и внутреннего соединения. Промежуточный уровень добавляет новые возможности, а полный и представляет собой, собственно, SQL92. В большинстве книг по SQL92 не различаются эти уровни поддержки, что сбивает с толку. В них демонстрируется, как должна работать "идеальная" СУБД, полностью реализующая стандарт SQL92. В результате нельзя взять книгу по SQL92 и применить представленные в ней приемы к СУБД, соответствующей стандарту SQL92. Например, в СУБД SQL Server предлагаемый стандартом синтаксис "внутреннего соединения" в SQL-операторах поддерживается, а в СУБД Oracle — нет. Но обе эти СУБД соответствуют стандарту SQL92. В СУБД Oracle можно выполнять внешние и внутренние соединения, но делать это надо не так, как в SQL Server. В результате начальный уровень стандарта SQL92 мало что дает, а при использовании средств более высоких уровней возможны проблемы при переносе на другую СУБД.




      Содержание  Назад  Вперед