Открытые системы
Разное
Открытые системы
Все статьи номера
Архив номеров



White Papers

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

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

Открытые системы

SQL:1999, ранее известный как SQL3Версия для печати

Джим Мелтон,Эндрю Эйзенберг

Уже несколько лет вы слышите и читаете о грядущем стандарте, который все называют SQL3. Предназначенный для того, чтобы стать существенной модернизацией текущего стандарта языка SQL второго поколения, повсеместно называемого SQL-92 в соответствии с годом публикации, SQL3 первоначально планировался к выпуску в 1996 году? но дела шли не так, как планировалось.

Истоки

Возможно, вы знаете, что SQL3 характеризуется как "объектно-ориентированный SQL" и является основой нескольких объектно-реляционных систем управления базами данных (включая, среди прочих, ORACLE8 компании Oracle, Universal Server компании Informix, DB2 Universal Database компании IBM и Cloudscape компании Cloudscape). Широко распространена точка зрения, что это хорошо, но имеется и обратная сторона: работа заняла около семи лет, вместо планировавшихся трех-четырех.

Как мы покажем, SQL:1999 означает намного больше, чем просто SQL-92 плюс объектная технология. Он включает дополнительные средства, которые мы считаем соответствующими наследию SQL, а также структура самих документов стандарта полностью пересмотрена в соответствии со стремлением добиться более эффективной работы в области стандартизации в будущем.

Процесс разработки стандартов

Двумя юридически признанными организациями, активно вовлеченными в процесс стандартизации SQL и тем самым разработки SQL:1999, являются ANSI и ISO.

Более точно, международное сообщество работает через ISO/IEC JTC1 (Joint Technical Committee 1), комитет, сформированные Международной организацией по стандартизации совместно с Международной электротехнической комиссией. В сферу ответственности JTC1 входит разработка и поддержка стандартов, связанных с информационными технологиями. Внутри JTC1 недавно был образован подкомитет CS32, названный Data Management and Interchange (управление и обмен данными), чтобы принять дела в связи с несколькими стандартами, связанными с базами данных и метаданными и разработанными другими организациями (такими, как распущенный подкомитет SC21). В свою очередь, CS32 сформировал ряд рабочих групп для реального выполнения технической работы — WG3 (языки баз данных) отвечает за стандарт SQL3, а WG4 развивает SQL/MM (SQL Multi-Media, набор стандартов, определяющих библиотеки типов с использованием объектно-ориентированных средств SQL3).

В Соединенных Штатах компьютерные стандарты находятся в ведении аккредитованного при ANSI комитета NCITS (National Committee for Information Technology Standardization), ранее называвшегося просто "X3". Технический комитет NCITS H2 (раньше "X3H2") отвечает за несколько стандартов, связанных с управлением данными, включая SQL и SQL/MM.

Когда был разработан SQL первого поколения (SQL-86 и его незначительное развитие SQL-89), большая — а возможно, и основная — часть работы была выполнена в США в X3H2, а остальные страны широко участвовали в работе в режиме обзоров и критики предложений ANSI. Но ко времени опубликования SQL-89 международное сообщество начало очень активно действовать в написании предложений для спецификации того, что стало SQL-92; ситуация не изменилась во время разработки SQL:1999, и мы надеемся, что не изменится и в будущем — SQL — это действительно совместная международная работа.

Некоторых пояснений требуют неформальные названия, которые мы применяем к разным редакциям стандарта SQL. Первые версии стандарта широко известны под названиями SQL-86 (или SQL-87, поскольку версия ISO не публиковалась до начала 1987 г.), SQL-89 и SQL-92, в то время версию, разработка которой сейчас завершается, следует называть SQL:1999. Откуда это отличие? Почему не "SQL-99"? Просто потому, что мы должны начать думать о том, как будет называться следующее поколение, и "SQL-02" вполне можно спутать с "SQL2" (название проекта, в рамках которого разрабатывался SQL-92), не принимая во внимание тот факт, что "02" на самом деле не больше "99". Другими словами, мы не хотим, чтобы название стандарта SQL страдало от Проблемы 2000 года!

Содержание SQL:1999

При наличии приведенной исходной информации самое время дать обзор реального содержания SQL:1999. Хотя мы понимаем, что большинство читателей этого раздела не знает точного содержания даже SQL-92, ограничения на объем статьи не позволяют нам представить полный набор свойств SQL:1999.

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

Свойства SQL:1999 можно грубо разделить на "реляционные" и "объектно-ориентированные". Для удобства мы опишем их в такой последовательности.

Реляционные свойства

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

Часто эти свойства разбиваются примерно на пять групп: новые типы данных, новые предикаты, улучшенная семантика, дополнительная безопасность и активная база данных. Мы рассмотрим их по порядку.

Новые типы данных

В SQL:1999 имеется четыре новых типа данных (хотя для одного из низ имеются некоторые опознаваемые варианты). Первым из этих типов является тип LARGE OBJECT, или LOB. Это тип с вариантами: CHARACTER LARGE OBJECT (CLOB) и BINARY LARGE OBJECT (BLOB). CLOB?ы ведут себя во многом подобно символьным строкам, но ограничены тем, что запрещено их использование в предикатах PRIMARY KEY и UNIQUE, в FOREIGN KEY, а также в сравнениях, отличных от чистых равенства или неравенства. Для BLOB-объектов действуют аналогичные ограничения. (Косвенным образом, LOB-объекты нельзя также использовать в разделах GROUP BY и ORDER BY.) Обычно приложениям не требуется пересылать весь LOB целиком в базу данных и из базы данных (конечно, после исходного их размещения); следует манипулировать LOB-значениями через специальный тип на стороне клиента, называемый LOB-локатором. В SQL:1999 локатор — это уникальное двоичное значение, которое действует как вид суррогата значения, сохраняемого в базе данных; локаторы могут использоваться в операциях (таких, как SUBSTRING) без привлечения накладных расходов для пересылки всего LOB-значения через интерфейс клиента и сервера.

Другим новым типом является тип BOOLEAN, который дает возможность в SQL непосредственно записывать истинностные значения true, false и unknown. Сложные комбинации предикатов можно также выразить способами, которые в чем-то более дружественны к пользователям, чем этого можно добиться обычными методами реструктуризации:

	WHERE COL1 > COL2 AND
	COL3 = COL4 OR
	UNIQUE (COL6) IS NOT FALSE

В SQL:1999 имеются также два новых составных типа: ARRAY и ROW. Тип ARRAY позволяет хранить коллекции данных непосредственно в столбце таблицы базы данных. Например, определение

	WEEKDAYS VARCHAR (10) ARRAY[7]

позволило бы хранить названия всех семи дней недели в одной строке базы данных. Означает ли это, что SQL:1999 допускает базы данных, не удовлетворяющие первой нормальной форме? Действительно, допускает, в том смысле, что разрешаются "повторяющиеся группы", запрещаемые первой нормальной формой. (Однако некоторые утверждают, что тип ARRAY в SQL:1999 всего лишь допускает хранение информации, которую можно декомпозировать, во многом подобно тому, как функция SUBSTRING может декомпозировать символьные строки — и поэтому в действительности не противоречит духу первой нормальной формы.)

Тип ROW в SQL:1999 является расширением (анонимного) строчного типа, который всегда был в SQL и от наличия которого язык зависел. Этот тип обеспечивает разработчиков баз данных дополнительной возможностью хранения структурированных значений в одном столбце базы данных:

	CREATE TABLE employee (
		EMP_ID   INTEGER,
		NAME   ROW(
			GIVEN   VARCHAR (30),
			FAMILY   VARCHAR (30) ),
		ADDRESS   ROW(
			STREET   VARCHAR (50),
			CITY   VARCHAR (30),
			STATE   CHAR (2)),
		SALARY   REAL )
	SELECT   E.NAME.FAMILY
	FROM   employee E

Хотя можно было бы утверждать, что здесь также нарушается первая нормальная форма, многие считают, что это всего лишь еще один "декомпозируемый" тип данных.

В SQL:1999 добавлена еще одна связанная с типами данных возможность, называемая "индивидуальными типами" (distinct types). Учитывая, что в общем случае маловероятно, что в приложении потребуется непосредственно сравнивать, например, размер обуви служащего со значением его или ее IQ, программистам SQL позволяется объявить типы SHOE_SIZE и IQ, основанные на INTEGER, и запрещается непосредственное перемешивание этих двух типов в выражениях. Так, выражение вида

	WHERE MY_SHOE_SIZE > MY_IQ

(где имя переменной соответствует ее типу данных) было бы опознано как синтаксическая ошибка. Каждый из этих двух типов может быть "представлен" как INTEGER, но SQL не разрешает перемешивать их в выражениях — и не один из них не допускает, скажем, умножения на INTERGER:

	 cccccccSET MY_IQ = MY_IQ * 2

Взамен этого в программах должно явно выражаться продуманное намерение допускать такое смешение:

 	WHERE MY_SHOE_SIZE >
 	CAST (MY_IQ AS SHOE_SIZE)
 	SET MY_IQ = MY_IQ * CAST (2 AS IQ)

В дополнение к этим типам в SQL:1999 также введены определяемые пользователями типы, но они попадают в список объектно-ориентированных свойств.

Новые предикаты

В SQL:1999 имеются три новых предиката, один из которых мы будем рассматривать среди объектно-ориентированных свойств. Другими двумя являются предикат SIMILAR и DISTINCT.

С первой версии стандарта SQL поиск через символьные строки был ограничен очень простыми сравнениями (типа =, > или <>) и довольно рудиментарными возможностями сопоставления с образцами предиката LIKE:

	WHERE NAME LIKE ?%SMIT_?

В данном случае значения столбца NAME сопоставляются со значениями, включающими ноль или более символов перед четырьмя символами ?SMIT? и в точности один символ за ними (такими, как SMITH или HAMMERSMITS).

В связи с пониманием того, что приложениям часто требуются более усложненные возможности, которые, тем не менее, не совпадают с полным набором операций над текстами, в SQL:1999 был введен предикат SIMILAR, где в образцах сопоставления можно использовать регулярные выражения в стиле UNIX. Например:


1 2 3 4

16.01.1999г


Также в разделе:

Новости ОСП-ТВ - 18.03.10


16/01/1999 №01

Очерки истории советской вычислительной техники
Наталья Дубова
Очерк первый: ИТМ и ВТ. Машины 1 И 2 поколений Многие принципы структурной организации БЭСМ-6 были революционными для своего времени и предвосхищали архитектурные особенности машин третьего поколения "Генеология" вычислительной техники
Что такое OMG-UML и почему он важен

В развитии информационных систем 90-е годы стали временем становления объектных технологий. Начал формироваться и активно развивается рынок объектных СУБД. Благодаря появлению в 1996-1997 годах нового поколения объектно-реляционных серверов баз данных
Управление данными, размещенными в оперативной памяти
Галина Никитина
Уже пятнадцать лет различные научные и коммерческие организации изучают, насколько изменяется время обработки, алгоритмы оптимизации и общая производительность информационной системы, если реляционные СУБД разместить не жестком диске, а в оперативной памяти.



Эта рубрика в архиве
Список номеров за



OSP.RU :: Написать письмо.