Главная » SQL, Базы данных » НЕСОВЕРШЕНСТВО ЯЗЫКА SQL

0

Как отмечалось в разделе 4.1 этой главы, язык SQL отнюдь нельзя назвать  "совершенным"  реляционным  языком,  поскольку  он  имеет  много  недостатков,  вызванных многочисленными недоделками и переделками.  Конкретные критические замечания будут представлены в следующих главах. Отметим лишь основной недостаток, который заключается в том, что в целом язык SQL, строго говоря, некорректно поддерживает реляционную модель. Поэтому  возникает сомнение, действительно ли современные продукты SQL заслужили право называться реляционными. Фактически, насколько это известно автору, на сегодняшний день на рынке нет ни одного продукта, который поддерживал бы реляционную модель в полном объеме6. Мы не хотим этим сказать, что если современные продукты обходятся без каких-то элементов реляционной модели, то последние не очень важны; напротив, в модели важен каждый элемент. Более того, каждый из ее элементов важен исключительно по практическим соображениям.  Нельзя не подчеркнуть тот непреложный факт, что назначение реляционной теории состоит не в том, чтобы быть просто "теорией ради теории". Вовсе нет, ее назначение — заложить основу для построения систем, которые будут практически применимыми на все сто процентов. Но, как это ни печально, со стороны изготовителей продуктов еще не сделано реальных шагов к решению проблемы реализации реляционной теории во всей ее полноте. В результате, с позволения сказать, "реляционные" продукты сегодняшнего дня все как один по тем или иным причинам оказываются неспособными реализовать преимущества, которые могут быть достигнуты в результате использования реляционной технологии в потном объеме.

4.7.  РЕЗЮМЕ

На этом завершается знакомство с некоторыми важнейшими функциональными возможностями, предусмотренными стандартом языка SQL. Мы подчеркиваем тот факт, что язык SQL очень важен с коммерческой точки зрения, хотя, к сожалению, в определенной степени несовершенен с чисто реляционной точки зрения.

Язык SQL состоит из двух компонентов: языка определения данных (Data Definition Language — DDL) и языка манипулирования данными (Data Manipulation Language — DML). Язык манипулирования данными может  применяться и на внешнем уровне (по

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

возможности управления данными, т.е. возможности, которые нельзя отнести ни к языку DDL, ни к языку DML. Примером здесь может служить оператор GRANT, который одни пользователи могут применять для предоставления привилегий доступа другим пользователям системы (глава 17).

Было показано, как можно использовать язык SQL для создания базовых таблиц с помощью оператора CREATE TABLE (кроме того, был кратко  рассмотрен оператор

CREATE TYPE). Затем было приведено несколько примеров использования операторов

6 Однако см. [20.1].

SELECT, INSERT, DELETE  и UPDATE и, в частности, продемонстрировано, как  можно применять оператор SELECT для реализации реляционных операций сокращения, проекции и соединения. Также некоторое внимание было уделено  информационной схеме, состоящей из множества предопределенных  представлений гипотетической "схемы определения", и возможностям языка SQL по работе с представлениями и транзакциями.

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

Далее мы обсуждали главным образом вопросы синтаксиса, в том числе выяснили назначение переменной SQLSTATE И рассмотрели такие операторы, как однострочный оператор SELECT и операторы INSERT, DELETE И UPDATE, ДЛЯ которых курсор не нужен.

Затем мы обратились к операторам, для которых действительно требуется использование курсора, и обсудили операторы DECLARE CURSOR, OPEN, FETCH, CLOSE, а также операторы DELETE и UPDATE с конструкцией CURRENT. (В стандарте языка SQL форму этих операторов с конструкцией CURRENT называют, соответственно, позиционным оператором UPDATE и DELETE, а термин поисковый используют для других форм этих операторов, отличных от использующих CURRENT.) Наконец, мы кратко обсудили концепцию динамического языка SQL, в частности — операторы PREPARE и EXECUTE, а также кратко коснулись (в сравнении с ODBC и JDBC) назначения интерфейса уровня вызовов SQL (SQL CallLevel Interface — SQL/CLI).

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии