на шляху до визнання SQL на ринку стала
поява стандартів на цей Мова. Звичайно при згадці стандарту SQL мають у вигляді офіційний стандарт, затверджений американським інститутом національних стандартів (American National Standards Institute — ANSI) і Міжнародною організацією за стандартами (International Standards Organization— ISO). Проте існують і інші важливі стандарти SQL, включаючи SQL, реалізований в системі DB2 компанії IBM, і стандарт X/OPEN для SQL в середовищі UNIX.
2.15 Стандарти ANSI/ISO
Робота над офіційним стандартом SQL почалася в 1982 році, коли ANSI
поставив перед своїм комітетом ХЗН2 задачу по створенню стандарту Моваа реляційних баз даних. Спочатку в комітеті обговорювалися достоїнства різних запропонованих Моваів. Проте оскільки на той час SQL вже став фактичним стандартом, комітет ХЗН2 зупинив свій вибір на ньому і зайнявся стандартизацією SQL.
Розроблений в результаті стандарт у великій мірі був заснований на діалекті SQL системи DB/2, хоча і містив в собі ряд істотних відмінностей від цього діалекту. Після декількох доробок, в 1986 році стандарт був офіційно затверджений як стандарт ANSI номер Х3.135, а в 1987 році — як стандарт ISO. Потім стандарт ANSMSO був прийнятий урядом США як федеральний стандарт США по обробці інформації (FIPS — Federal Information Processing Standard). Цей стандарт, трохи переглянутий в 1989 році, звичайно називають стандартом "SQL-89", ttJi"SQLI". Коли в даній книзі згадується "стандарт
ANSI/ISO", то мається на увазі SQLI, який в даний час лежить в основі більшості комерційних продуктів.
Багато кого з членів комітетів із стандартизації ANSI і ISO представляли фірми-постачальники різних СУБД, в кожній з яких був реалізований власний діалект SQL. Як і діалекти людського Моваа, діалекти SQL були в основному схожі один на одного, проте несумісні в деталях. У багатьох випадках комітет просто обійшов існуючі відмінності і не стандартизував деякі частини Моваа, визначивши, що вони реалізуються по розсуду розробника. Цей підхід дозволив оголосити велике число реалізацій SQL сумісними із стандартом, проте зробив сам стандарт відносно слабким.
Щоб заповнити ці пропуски, комітет ANSI продовжив свою роботу і створив проект нового, більш жорсткого стандарту SQL2. На відміну від стандарту 1989 року, проект SQL2 передбачав можливості, що виходять за рамки таких, вже існуючих в реальних комерційних продуктах. А для наступного за ним стандарту SQL3 були запропоновані ще більш глибокі зміни. В результаті запропоновані стандарти SQL2 і SQL3 виявилися більш суперечливими, ніж початковий стандарт. Стандарт SQL2 пройшов процес твердження в ANSI і був остаточно прийнятий в жовтні 1992 року. В той час, як перший стандарт 1986 року займає не більше ста сторінок, офіційний стандарт SQL2 містить близько шестисот.
Всупереч стандарту SQL2, у всіх існуючих на сьогоднішній день комерційних продуктах підтримуються власні діалекти SQL. Більш того, постачальники СУБД включають в свої продукти нові можливості і розширюють власні діалекти SQL, чим ще більше віддаляють їх від стандарту. Проте ядро SQL стандартизовано досить жорстко. Там, де це можна було зробити, не ущемляючи інтереси клієнтів, постачальники СУБД привели свої продукти у відповідність із стандартом SQL-89, те ж саме поступово відбудеться і з SQL2.
2.16 Інші стандарти SQL
Хоча стандарт ANSMSO найбільш широко поширений, він не є єдиним
стандартом SQL. Європейська група постачальників X/OPEN також прийняла SQL як один з своїх стандартів для "середовища переносимих додатків11 на основі UNIX. Стандарти групи X/OPEN грають важливу роль на європейському комп'ютерному ринку, де основною проблемою є переносимість додатків між комп'ютерними системами різних виробників. До нещастя, стандарт X/OPEN відрізняється від стандарту ANSMSO.
Крім того, компанія IBM включила SQL в свою специфікацію Systems Application Architecture (архітектура прикладних систем) і пообіцяла, що всі її продукти, очевидно, будуть перекладені на цей діалект SQL. Хоча дана специфікація і не виправдала надій на уніфікацію лінії продуктів компанії ЮМ, рух у бік уніфікації SQL в ЮМ продовжується. Система DB2 залишається основною СУБД компанії IBM для мейнфреймів. Проте компанія випустила реалізацію DB2 і для О8/2собственной операційної системи для персональних комп'ютерів, і для лінії серверів і робочих станцій RS/6000, що працюють під управлінням UNIX. Таким чином, діалект DB2 Моваа SQL є могутнім стандартом де-факто.
2.17 Міф про переносимість
Поява стандарту SQL викликала досить багато захоплених заяв про
переносимість SQL і використовуючих його додатків. Для ілюстрації того, як будь-який додаток, використовуючи SQL, може працювати з будь-якою СУБД, часто приводять діаграми, подібні зображеною на мал. 3.1. Насправді пропуски в стандарті SQL-89 і відмінності між існуючими діалектами SQL достатньо значні, і при перекладі додатку під іншу СУБД його завжди доводиться модифікувати. Ці відмінності, більшість з яких усунена в стандарті SQL2, включають:*
Коди помилок. В стандарті SQL-89 не визначені коди, які повертають оператори SQL при виникненні помилок, і в кожній з комерційних реалізацій використовується власний набір таких кодів. В стандарті SQL2
визначені стандартні коди помилок.
> Типи даних. В стандарті SQL-89 визначений мінімальний набір типів даних, проте в ньому відсутні деякі з найпоширеніших і корисних типів, наприклад символьні рядки змінної довжини, дата і час, а також грошові одиниці. В стандарті SQL2 згадані ці типи даних, проте відсутні "нові" типи даних, такі як графічні і мультимедійні об'єкти.
Системні таблиці. В стандарті SQL-89 умовчується про системні таблиці, в яких міститься інформація про структуру самої бази даних. Тому кожний постачальник створював власні системні таблиці, і їх структура відрізняється навіть в чотирьох реалізаціях SQL компанії IBM. Системні таблиці стандартизовані в SQL2.
Інтерактивний