ISSN 0236-235X (P)
ISSN 2311-2735 (E)
4

09 Сентября 2024

Стандартизация языка SQL-состояние и проблемы


Демут Б. () -
Ключевое слово:
Ключевое слово:


     

SQL| - язык структурированных запросов (Structured Query Language), включающий набор средств для определения, манипулирования и управления данными в реляционной базе данных. Чтобы понять, почему этот язык так широко используется, а его значение все возрастает, надо вспомнить некоторые основные этапы развития технологии базы данных за последние девятнадцать лет.

 

В 1970 г. Е.Ф.Кодд опубликовал признанную теперь классической работу, в которой изложил ряд абстрактных принципов управления базой данных (так называемой реляционной моделью). Идеи Кодда способствовали развертыванию большого числа экспериментальных и исследовательских работ в этой области.

К середине 70-х годов было создано и внедрено несколько реляционных языков [1,2].

В конце 70-х тт. некоторые фирмы, в том числе IBM, основываясь на успехе System R, разработали по ее технологии некоторые продукты на основе языка SQL.

В 1986 г. на рынке уже было около пятидесяти систем, поддерживаюших различные диалекты языка SQL для всех типов компьютеров - от микро- до больших ЭВМ. Благодаря возможности увеличения производительности труда пользователей в несколько раз язык SOL фактически становится стандартом в мире реляционных баз данных.

Среди достоинств SQL, позволяющих повысить производительность труда, можно выделить следующие:

•     простота структур данных;

•     наличие мощных операторов;

•     простота освоения;

■ большая независимость данных;

•     объединение объявления данных и работа с ними;

•     двойной режим использования;

•     объединенный каталог;

•     компиляция и оптимизация.

О СТАНДАРТИЗАЦИИ ЯЗЫКА SQL

Язык SQL стал официальным стандартом. Предложения по стандартизации реляционного языка, включающего в себя главным образом диалект SQL, разработанный фирмой IBM, были окончательно приняты Американским Национальным институтом стандартов (ANSI) в 1986 г. Этот диалект был охарактеризован как "пересечение существующих реализаций" [4,3].

Признавая этот факт, комитет ХЗН2 института ANSI приступил к работе по расширению базового стандарта [5]. В 1987 г. Международная организация по стандартизации (ISO) приняла ANSI SQL в качестве международного стандарта (ISO SQL). Определение языка X/OPEN SQL основано на ANSI SQL в соответствии с "ХЗ.135-1986", но имеет ряд отличий от ISO SQL, так как определения X/OPEN должны учитывать спектр существующих реализаций UNIX.

В 1988 г. в Техническом университете г. Дрездена был подготовлен стандарт языка SQL на немецком языке [б], эквивалентный ISO SQL.

Основные проблемы, связанные с этой работой:

1. Стандарт SQL не полностью соответствует реляционной модели [3].

2.      В ISO SQL невозможно непосредственно выполнить операции SELECT над мно жествами строк, так как стандарт касается в основном использования SQL вместе с языками программирования.

3.      Набор имеющихся включающих языков (PL/1, FORTRAN, COBOL, Pascal) не достаточен для прикладного программирования, поэтому требуется расширение этого набора языков (например С и Modula-2).

4.      Язык описания схемы (the Schema Definition Language) находится в некотором противоречии с принципами многоуровневых архитектур.

5.      Большинство осиованных на SQL программяых продуктов поддерживает не сколько дополнительных на логическом уровне (ALTER TABLE, REVOKE, ASSIGN, DROP) и в большей степени ориентированных на физический (CREATE INDEX, CREATE CLUSTER) уровень операций.

Стандартный SQL обладает такими преимуществами, как мобильность и широта применения, кросс-возможности (в распределенных базах данных) в небольшие затраты на освоение при смене среды разработки.

ОБЗОР ЯЗЫКА SQL

Функция языка SQL - обеспечение определения, манипулирования и управления данными в реляционной базе данных, которая воспринимается пользователем как набор таблиц, в котором отдельная таблица предстает как неупорядоченная совокупность строк. "Отношение" - математический термин, употребляемый в этих таблицах.

Язык ISO SQL состоит из языка описания схемы и языка манипулирования данными (рис. 1).

Команда манипулирования данными языка SQL может быть вызвана в интерактивном режиме или из прикладной программы.

Кроме SELECT, в языке SQL имеются и другие команды манипулирования лап ними: INSERT, UPDATE, DELETE.

Как уже отмечалось, операции SELECT над множествами строк не могут выполняться на стандартном языке SQL - необходим механизм последовательного чтения строк из этого множества. Таким механизмом является курсор (указатель) - объект SQL, связанный (через DECLARE... CURSOR) со специфической операцией SELECT. Чтобы получить доступ к строкам, определенным операцией SELECT, пользователь должен:

1. ОТКРЫТЬ (OPEN) курсор.

2.      При открытом курсоре для перехода с одной строки на другую необходимо циклически использовать FETCH.

3.       ЗАКРЫТЬ (CLOSE) курсор, когда будут обработаны все строки. Обеспечивается и особая форма UPDATE и DELETE для модификации или уда ления строки, па которой находится курсор.

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

Второй метод — использование модульного языка. Модульный язык состоит в основном из малого языка для выражения операций манипулирования данными в чисто синтаксической форме языка SQL. В модульном языке процедура состоит из ряда параметров и одного утверждения на языке SQL. Если принять во внимание, что параметр SQLCODE используется для передачи кода возврата программе, вызывающей данную процедуру, становится ясно, что модульный язык позволяет программам, написанным на включающем языке (например PL/I и др.), выполнять операции манипулирования данными без каких-либо изменений синтаксиса или семантики этого языка. Программа на включающем языке вызывает отдельпо скомпилированную программу на языке SQL, а не на включающем языке.

База данных определяется схемами, созданными с использованием языка описания схемы. Схема содержит операцию CREATE SCHEMA, оператор AUTHORIZATION, нулевую или несколько операций CREATE TABLE и/или операций CREATE VIEW и/или операцию GRANT. Операции описания схемы не являются частью модульного языка и не могут быть вызваны из обычной прикладной программы.

Стандартный язык SQL обеспечивает поддержку концепции транзакции. Транзакция - последовательность операций, которым гарантируется атомарность в отношении восстановления и обновления данных. Каждая транзакция завершается выполнением операции либо COMMIT (нормальное завершение), либо ROLLBACK (ненормальное завершение).

ПЛАНИРУЕМЫЕ РАСШИРЕНИЯ

Комитет ХЗН2 института ANSI занимается в настоящее время рассмотрением ряда расширений стандартного языка SQL [4,5]. Это касается двух областей: описания данных и манипулирования данными. Комитет ХЗН2 предлагает также дополнить список включающих языков языками С и Ada (рис. 2).

Расширение описаний

Расширение описаний касается вопросов целостности. В 1976 г. группа по азработке System R предложила концепцию утвердительных предложений и ереключателей. Описание базовой таблицы может включать определенные oipa-нчения целостности. Поддерживаются следующие ограничения целостности:

' NOT NULL можно определить для любой колонии таблицы.

■ UNIQUE можно определить для любой колонки или комбинаций колонок

аблицы.

Расширение описания целостности включает следующие средства спецификации;

ссылочные ограничения между таблицами (ссылочная целостность); проверка ограничений по строкам таблицы (предложение CHECK);

присвоение значений по умолчанию при включении строк в таблицу (предложе-ие DEFAULT).

Даны следующие отношения:

CREATE TABLE STRUCTURE

(PNO-OVER INTEGER NOT NULL, PNO INTEGER NOT NULL,

NUMBER INTEGER NOT NULL DEFAULT 1 CHECK (NUMBER>=1), PRIMARY KEY (PNO-OVER, PNO), FOREIGN KEY (PNO-OVER) REFERENCES PART, FOREIGN KEY (PNO) REFERENCES PART)

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

В операцию CREATE TABLE добавляется возможность использования PRIMARY KEY. Спецификация PRIMARY KEY (колонка-список) семантически идентична спецификации UNIQUE (колонка-список), за исключением:

а) каждый оператор CREATE TABLE может включать максимум одно предложение PRIMARY KEY;

в) первичный ключ (идентифицированный с помощью PRIMARY KEY) обрабатывается по-особому в любых спецификациях внешних ключей.

Внешний ключ - это колонка (шш совокупность колонок) в одной таблице Т2, значения которой должны соответствовать значениям первичного ключа в таблице Т1. Значение внешнего ключа представляет, таким образом, ссылку на строку, содержащую соответствующее значение первичного ключа [4].

Расширение манипулированием

Усовершенствование ортогональности

Язык ортогонален, если независимые концепции остаются независимыми и не смешиваются друг с другом. Язык ISO SQL не полностью ортогонален. Одно из предложений в этом направления заключается в следующем: выражение запроса (т.е. ОБЪЕДИНЕНИЯ "спецификации запросов") больше не ограничивается появлением только в контексте определения курсора.

KypcopuSCROLL

Единственной операцией перемещения курсора в ISO SQL является FETCH (^выбери следующее "). Курсор просмотра (SCROLL) - это расширенная версия стандартного курсора, поддерживающая другие операции перемещения курсора. Определение курсора расширяется при включении ключевого слова SCROLL и утверждении FETCH для "ориентации на выбор" (NEXT, PRIOR, FIRST,...).

Для доиолнения стандарта ISO планируются некоторые средства языка SQL [5] (например обработка символов и усовершенствованное управление транзакциями).

Основные вопросы, связанные с расширением стандартного языка SQL, на наш взгляд, должны включать;

• усовершенствование выразительных средств с целью превращения продуктов, основанных на языке SQL, в 'полностью реляционные'; эти расширения должны учитывать двенадцать правил, определенных Коддом [3], и критические замечания Лента по SQL [А];

Основное правило: Если какая-то система заявляется как СИСТЕМА

(Правило 0)           УПРАВЛЕНИЯ РЕЛЯЦИОННОЙ БАЗОЙ ДАННЫХ, то эта

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

Правило 1 : Обеспечение информацией

Правило 2:                Гарантированный доступ

Правило 3:          Системная обработка значения

Правило 4:          Динамический on-line каталог, основанный на

реляционной модели

Правило 5:          Исчерпывающий подъязык данных

Правило 6:          Возможность модификации представлений

Правило 7: Высокоуровневые вставки, модификация и удаление

Правило 8: Физическая независимость данных

Правило 9: Логическая независимость данных

Правило 10:        Независимость целостности

Правило 11:        Независимость от распределения

Правило !2:         Недопущение субверсня

•     Недостаток ортогональности: выражения

•     Недостаток ортогональности: встроенные функции

•     Недостаток ортогональности: смешанные элементы

•     Формальное определение

•     Несоответствие включающим языкам

•     Недостающие функции

•     Ошибки

■ Неподдерживаемые аспекты возможностей реляционной модели

— первичные ключи

— внешние ключе

— домены

— реляционное присваивание отношений

— явный оператор JOIN

— явные операторы INTERSECTION и DIFFERENCE • средства поддержки нестандартных приложений.

Области исследования расширений языка SQL для поддержки нестандартных приложений:

•     описание и обработка длинных полей;

•     описание и обработка сложных объектов;

•     дедуктивные базы данных и оценка рекурсивных запросов;

•     поддержка версий для инженерных баз данных;

•     новые (семантические) тины данных;

■ поддержание целостности;

•  управление транзакциями.

СИСТЕМЫ, БАЗИРУЮЩИЕСЯ НА ЯЗЫКЕ SQL, РАЗРАБОТАННЫЕ В ГДР

Для специалистов ГДР доступны следующие системы управления базами данных с интерфейсом на языке SQL: DABA1600, ALLDBS, WDATA, (INTERBAS).

Между стандартом и существующими СУБД имеются некоторые различия. Для дальнейшего развития СУБД, базирующихся на SQL (и особенно для внедрения INTERBAS), важно реализовать стандартный язык SQL.

Приняты два уровня соответствия реализации языка SQL стандарту: уровень 2 (полный язык SQL) и уровень 1 (подмножество уровня 2).

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

СПИСОК ЛИТЕРАТУРЫ

1.    Chambertin, D.D. u.a.: SEQUEL2: An Unified Approach to Data Definition, Manipulation and Control. IBM Journal of Res. and Dev. 20(1976)6, S, 560-575.

2.    Chamberiin, D.D. u.a.: ASummaiyof user experience with the SOL Data Sublanguage. IBM Research Report RJ 2767(35322)3/5/80.

3.    Codd, E,F.: An Evaluation Scheme for Database Management Systems that are claimed to be Relational. 1985 CW Communication Inc.

4.      Date, CJ-: A Guide lo the SQL Standard. Addison-Wesley Publishing Company, 1987.

5.      ISO 9075/DADl-Infomiation processing systems - Database language SQL. Addendum 1,1987-05-12.

6.      TGL44S82A)l-DieDatenbankspracheSQL. 1988 (Entwurf).

7.      X/OPEN - Portability Guide (January 1987). Relational Database Language (SQL).



http://swsys.ru/index.php?id=1424&lang=%29&page=article


Perhaps, you might be interested in the following articles of similar topics: