Історія мов програмування: SQL - стандартизація довжиною в життя



думку аналітиків CodingDojo, SQL — самий важливий і потрібний мова запитів серед мов програмування, як би дивно це не звучало. Рейтинг CodingDojo враховує статистику популярності мов програмування на ринку праці.

Адже СУБД – MySQL, PostgreSQL і Microsoft SQL Server – поширені повсюдно: у великому і малому бізнесі, в лікарнях, банках, університетах і так далі. В принципі, SQL не обмежується тільки настільними девайсами: СУБД SQLite з успіхом зайняла своє місце на Android-смартфонах і мобільних пристроях Apple. Відповідно, такі програми, як Skype і Dropbox, постійно до неї звертаються.

Проте були часи, коли не було смартфонів, а ця мова вже існував. Історія SQL – це не роки, а десятиліття. Повірили в нього не відразу.

System R і IBM
Перші згадки про це мовою датуються 1974 роком. SQL створювався в рамках проекту експериментальної реляційної СУБД System R. Займалася цим проектом компанія IBM.

Спочатку мова називався SEQUEL (Structured English Query Language), але потім слово «English» пропало з цього словосполучення, а абревіатура придбала той вигляд, до якого ми давно вже звикли. З одного боку, SQL був орієнтований на зручну і зрозумілу користувачам формулювання запитів до реляційних БД. З іншого боку, практично з самого початку він був так званим «повним мовою БД». Це означає, що SQL включав:

• засоби визначення та маніпулювання схемою БД;
• засоби визначення обмежень цілісності і тригерів;
• засоби визначення уявлень БД;
• засоби визначення структур фізичного рівня, що підтримують ефективне виконання запитів;
• засобу авторизації доступу до відносин і їх полів;
• засоби визначення точок збереження транзакції і виконання фіксації і відкатів транзакцій.

Правда, в ньому не були реалізовані засоби синхронізації доступу до об'єктів БД з боку паралельно виконуваних транзакцій. Справа в тому, що розробники спочатку розраховували, що необхідну синхронізацію неявно виконує СУБД.

Мова реалізований в переважній більшості СУБД – як реляційних, так і нереляційних. Метою розробки було створення простого непроцедурного мови, якими міг скористатися будь-який користувач, що не має навичок програмування.

Розробкою мови запитів займалися Дональд Чэмбэрлин (Donald D. Chamberlin) і Рей Бойс (Ray Boyce).



SEQUEL був не єдиною мовою подібного призначення. У Каліфорнійському Університеті Берклі була розроблена некомерційна СУБД Ingres, яка була реляційної СУБД, але використала свій власний мову QUEL, який, однак, не витримав конкуренції за кількістю підтримуючих його СУБД порівняно з мовою SQL.
В System R була реалізована найбільш складна і повна версія SQL. Трохи менше функціональності було в SQL/DS і DB2 від тієї ж IBM. З SQL System R були видалені тільки ті частини, які були недостатньо опрацьовані (наприклад, точки збереження) або реалізація яких викликала занадто великі технічні труднощі (наприклад, обмеження цілісності і тригери).

Комерційний успіх
Тому шлях до комерційної реалізації SQL, який пройшла IBM, називають рухом «згори вниз».

Oracle, Informix і Sybase пішли по іншому шляху – «знизу вгору»: у перших версіях цих систем, випущених на ринок, використовувалося істотно обмежена підмножина SQL System R. А далі вони почали поступово розширюватися. Однак у першій комерційної реалізації SQL в СУБД Oracle в операторах вибірки не допускалося використання вкладених підпорядкованого відсутня можливість формулювання запитів з сполуками декількох відносин.


Розподіл ринкових часток станом на 2011 рік

Зростаюча зацікавленість ринку в якнайшвидшому переході до реляційних систем управління базами даних дозволила розробникам перерахованих вище компаній домогтися комерційного успіху. Це відбулося, швидше, всупереч тому, що СУБД були тоді дуже далекі від досконалості. Ну а тепер Oracle, Informix, Sybase і Microsoft SQL Server підтримують досить потужні діалекти SQL.

Стандартизація
Поява численних діалектів SQL та їх розростання повинно було привести до проблем сумісності та інших суперечностей.

Однак діяльність з стандартизації мови SQL почалася дуже вчасно – практично одночасно з появою його перших комерційних реалізацій. У 1982 році комітетові по базах даних Американського національного інституту стандартів (ANSI) було доручено розробити специфікацію стандартного мови реляційних баз даних.



Після відхилення ряду невдалих версій стандарту в 1986 році експерти прийшли до єдиного знаменника. А в 1987 році стандарт SQL/86 був схвалений Міжнародною організацією по стандартизації (ISO).

За основу стандарту не можна було брати SQL System R. По-перше, цей варіант мови був недостатньо опрацьований технічно. По-друге, його дуже складно було б реалізувати. Тому за основу був узятий діалект мови SQL, що склався в IBM до початку 1980-х років. По суті, цей діалект представляв собою підмножину SQL System R.

Стандарт SQL1
До 1989 році стандарт SQL/86 було дещо розширено, після чого з'явився наступний стандарт, що одержав назву ANSI/ISO SQL/89.

SQL/89 став першим всесвітньо прийнятим стандартом мови SQL. У цієї мови є маса недоліків: багато важливі поняття не визначені, багато віддано на відкуп реалізацій. У цьому стандарті повністю відсутні такі важливі розділи, як маніпулювання схемою БД і динамічний SQL.

Але тим не менш він зіграв свою роль у становленні справді стандартизованих реляційних систем управління базами даних. Більше того, з появою стандарту SQL/89 стало можливо проектувати, розробляти та супроводжувати інформаційні системи, не надто прив'язані до конкретного виробника СУБД. В деякому сенсі поява SQL/89 стало просуванням технології баз даних в бік відкритих систем.

Можливо, найбільш важливими досягненнями стандарту SQL/89 є чітка стандартизація синтаксису, семантики операторів вибірки даних і маніпулювання даними, а також фіксацію засобів обмеження цілісності БД.

У стандарті визначаються два рівні мови і окреме засіб підтримки цілісності. Рівень 2 — це повний мова баз даних SQL, не включає засіб підтримки цілісності. Рівень 1 — це специфицированное домен 2 рівня.

Засіб підтримки цілісності включає можливості визначення:

• необхідних обмежень на посилання між таблицями;
• перевірочних обмежень на рядки таблиці;
• значень стовпця за замовчуванням при занесенні рядки в таблицю.

Засоби визначення зовнішніх ключів, дозволяють легко формулювати вимоги так званої посилальної цілісності БД. Це поширене в реляційних БД вимогу можна було сформулювати і на основі загального механізму обмежень цілісності SQL System R, але формулювання на основі поняття зовнішнього ключа більш проста і зрозуміла.


Можливості операції Join в різних стандартах

Стандарт SQL2 і його доповнення
Усвідомлюючи неповноту стандарту SQL, фахівці різних компаній почали роботу над черговим стандартом, який отримав назву SQL2. Ця робота тривала кілька років, було випущено безліч проектів стандарту, поки нарешті в березні 1992 року був прийнятий остаточний проект стандарту (SQL/92). Цей стандарт істотно повніше стандарту SQL/89 і охоплює практично всі аспекти, необхідні для реалізації програм: маніпулювання схемою БД, управління транзакціями (з'явилися точки збереження) і сесіями (сесія – це послідовність транзакцій, в межах якої зберігаються тимчасові відносини), підключення до БД, динамічний SQL. Нарешті, були стандартизовані відносини-каталоги БД, що взагалі-то не пов'язане безпосередньо з мовою, але дуже сильно впливає на реалізацію.

У 1995 році стандарт був доповнений специфікації інтерфейсу рівня виклику (Call Level Interface – SQL/CLI). SQL/CLI являє собою набір специфікацій інтерфейсів процедур, виклики яких дозволяють виконувати динамічно задаються оператори SQL. По суті справи, SQL/CLI являє собою альтернативу динамічного SQL.

Стандарт SQL/CLI послужив основою для створення повсюдно поширених сьогодні інтерфейсів ODBC (Open Database Connectivity) і JDBC (Java Database Connectivity).

У 1996 році до стандарту SQL/92 був доданий ще один компонент – SQL/PSM (Persistent Stored Modules). Основна мета цієї специфікації – стандартизувати способи визначення і використання збережених процедур, тобто спеціальним чином оформлених програм, що включають оператори SQL, які зберігаються в базі даних, можуть викликатися додатками і виконуються всередині СУБД.

Oracle є однією з найбільш популярних СУБД. Більше того, саме там вперше була реалізована сумісність зі стандартом SQL/92.
А спочатку першої СУБД, підтримує мову SQL, Oracle стала V2, розроблена для машин VAX. Це було ще в 1979 році.
Oracle підтримує ряд різних платформ, включаючи Windows, Linux і Max OS X і Sun Solaris.

Процедурне розширення SQL, розроблене Oracle, називається PL/SQL (Procedural Language/Structured Query Language) і заснований на синтаксисі мов Ada і Pascal. Третім ключовим мовою, що використовується в СУБД Oracle нарівні з SQL і PL/SQL, є Java.

PL/SQL підтримує програмні блоки, а також різноманітні типи даних для зберігання чисел, рядків і дат, оператори управління потоком обчислень (у тому числі умовні переходи і цикли) і три типи контейнерів (колекцій) — масиви змінної довжини, асоціативні масиви і вкладені таблиці.

Стандарт SQL3
Спочатку планувалося закінчити роботу над новим стандартом в 1995 році. Реально роботу над новим стандартом вдалося частково завершити тільки в 1999 році, і з цієї причини стандарт отримав назву SQL:1999.
Кожен новий варіант стандарту мови SQL був суттєво об'ємнішим попередніх версій. Так, якщо стандарт SQL/89 займав близько 600 сторінок, обсяг SQL/92 становив на 300 з гаком сторінок більше.
перші проекти SQL3 займали близько 1500 сторінок.

Однак розробники SQL3 прийшли до висновку, що при таких обсягах стандарту ймовірність його прийняття і подальшої успішної підтримки помітно зменшується. Тому вони вирішили розбити стандарт на відносно незалежні частини, які можна було б розробляти і підтримувати окремо.

У 1999 році були прийняті п'ять частин стандарту SQL:1999.

Перша частина (SQL/Framework) присвячена опису концептуальної структури стандарту. У цій частині наводиться розгорнута анотація наступних чотирьох частин і формулюються вимоги до реалізацій, які претендують на відповідність стандарту.

Друга частина SQL:1999 (SQL/Foundation) утворює базис стандарту. Вводиться система типів мови, формулюються правила визначення функціональних залежностей і можливих ключів, визначаються синтаксис і семантика основних операторів SQL:

• операторів визначення та маніпулювання схемою баз даних;
• операторів маніпулювання даними;
• операторів управління транзакціями;
• операторів керування підключеннями до бази даних і т. д.



Третю частину займає уточнена порівняно з SQL/92 специфікація SQL/CLI. У четвертій частині специфікується SQL/PSM – синтаксис і семантика мови визначення збережених процедур. Нарешті, в п'ятій частині – SQL/Bindings – визначаються правила зв'язування SQL для стандартних версій мов програмування.

У стандарт SQL:1999 повинні були увійти ще кілька частин. Серед них специфікації наступних засобів:

• управління розподіленими транзакціями (SQL/Transaction);
• підтримка темпоральних властивостей даних (SQL/Temporal);
• управління зовнішніми даними (SQL/MED);
• зв'язування з об'єктно-орієнтованими мовами програмування (SQL/OLB);
• підтримка оперативної аналітичної обробки (SQL/OLAP).

SQL в XXI столітті
В кінці 2003 року був прийнятий і опублікований новий варіант міжнародного стандарту SQL:2003. Багато фахівців вважали, що у варіанті стандарту, наступного за SQL:1999, будуть лише виправлені неточності SQL:1999. Але насправді, в SQL:2003 специфицирован ряд нових і важливих властивостей, з невеликими модифікаціями, внесеними пізніше в 2008 році.

Найбільш серйозні зміни мови SQL, специфіковані в частині 2 стандарту SQL:2003, стосуються наступних аспектів:

• типи даних;
• підпрограми, що викликаються з SQL;
• розширені можливості оператора CREATE TABLE;
• новий об'єкт схеми – генератор послідовностей;
• нові види стовпців – ідентифікують стовпці (identity column) і генеруються стовпці (generated column);
• новий оператор MERGE;

Зазнала деякі зміни загальна організація стандарту. Стандарт SQL:2003 складається з наступних частин:

• 9075-1, SQL/Framework;
• 9075-2, SQL/Foundation;
• 9075-3, SQL/CLI;
• 9075-4, SQL/PSM;
• 9075-9, SQL/MED;
• 9075-10, SQL/OLB;
• 9075-11, SQL/Schemata;
• 9075-13, SQL/JRT;
• 9075-14, SQL/XML.

Частини 1-4 і 9-10 з необхідними змінами залишилися такими ж, як і в SQL:1999. Частина 5 (SQL/Bindings) перестала існувати; відповідні специфікації включені в частину 2.

Розділ частини 2 SQL:1999, присвячений інформаційній схемі, виділений в окрему частину 11. З'явилися дві нові частини – 13 і 14.

Частина 13 повністю називається «SQL Routines and Types Using the Java Programming Language» («Використання підпрограм і типів SQL в мові програмування Java»). Поява такої частини стандарту виправдано підвищеною увагою до мови Java з боку провідних виробників SQL-орієнтованих СУБД.

Нарешті, остання частина SQL:2003 присвячена специфікаціям мовних засобів, що дозволяють працювати з XML-документами в середовищі SQL.

Незважаючи на старання розробників, процес стандартизації явно не встигає за змінами, що відбуваються.


Основні моменти в історії SQL

Тим не менш, можна сказати, що базовий набір операторів SQL, що включає оператори визначення схеми БД, вибірки і маніпулювання даними, авторизації доступу до даних, підтримки вбудовування SQL в мови програмування і оператори динамічного SQL, комерційних реалізаціях устоявся і більш або менш відповідає стандарту.

p.s. SQL можна повною мірою віднести до традиційних мов програмування, він не містить традиційні оператори, що керують ходом виконання програми, оператори опису типів і багато іншого, він містить лише набір стандартних операторів доступу до даних, що зберігаються в базі даних. Однак ці «недоліки» йому прощають, враховуючи його місце в історії ІТ.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.