SQL

редактировать
Язык для управления и использования реляционных баз данных
SQL (язык структурированных запросов)
Парадигма Декларативный
СемействоЯзык запросов
Разработал Дональд Д. Чемберлин. Раймонд Ф. Бойс
Разработчик ISO / IEC
Впервые появился1974; 46 лет назад (1974 г.)
Стабильный выпуск SQL: 2016 / декабрь 2016 г.; 3 года назад (2016-12)
Дисциплина печати Статический, сильный
OS Кросс-платформенный
Веб-сайтwww.iso.org / standard / 63555.html
Основные реализации
Многие
диалекты
Под влиянием
Даталог
Под влиянием
CQL, LINQ, SPARQL, SOQL, PowerShell, JPQL, jOOQ, N1QL
SQL (формат файла)
Расширение имени файла .sql
Тип интернет-носителя application / sql
РазработаноISO / IEC
Первый выпуск1986 (1986)
Тип форматаБаза данных
Стандарт ISO / IEC 9075
Открытый формат ?Да
Веб-сайтwww.iso.org / standard / 63555.html

SQL ((Об этом звуке слушайте ) SQL, "продолжение"; язык структурированных запросов ) - это предметно-ориентированный язык, используемый в программировании и предназначенный для управления данными, хранящимися в системе управления реляционными базами данных (RDBMS), или для потоковой обработка в системе управления реляционными потоками данных (RDSMS). Это особенно полезно при обработке структурированных данных, то есть данных, включающих отношения между сущностями и переменными.

SQL предлагает два основных преимущества по сравнению с более старыми API чтения-записи , такими как ISAM или VSAM. Во-первых, он представил концепцию доступа к множеству записей с помощью одной единственной команды. Во-вторых, это избавляет от необходимости указывать, как достичь записи, например с индексом или без него.

Первоначально основанный на реляционной алгебре и кортежном реляционном исчислении, SQL состоит из множества типов операторов, которые можно неофициально классифицировать как подъязыки, обычно: язык запросов данных (DQL), язык определения данных (DDL), язык управления данными (DCL) и язык управления данными (DML). Объем SQL включает запрос данных, манипулирование данными (вставка, обновление и удаление), определение данных (создание и изменение схемы ) и управление доступом к данным. Хотя SQL по сути является декларативным языком (4GL ), он также включает в себя процедурные элементы.

SQL был одним из первых коммерческих языков, в которых использовалась реляционная модель Эдгара Ф. Кодда . Модель была описана в его влиятельной статье 1970 года «Реляционная модель данных для больших общих банков данных». Несмотря на то, что он не полностью придерживался реляционной модели, описанной Коддом, он стал наиболее широко используемым языком баз данных.

SQL стал стандартом американской Национальный институт стандартов (ANSI) в 1986 году и Международной организации по стандартизации (ISO) в 1987 году. С тех пор стандарт был пересмотрен, чтобы включить более широкий набор функций. Несмотря на наличие стандартов, большая часть кода SQL требует по крайней мере некоторых изменений перед переносом в другие системы баз данных.

Содержание

  • 1 История
  • 2 Синтаксис
  • 3 Процедурные расширения
  • 4 Взаимодействие и стандартизация
    • 4.1 Обзор
    • 4.2 Причины несовместимости
    • 4.3 История стандартизации
    • 4.4 Текущий стандарт
      • 4.4.1 Анатомия стандарта SQL
      • 4.4.2 Расширения стандарта ISO / IEC
  • 5 Альтернативы
  • 6 Распределенная обработка SQL
  • 7 Критические замечания
    • 7.1 Дизайн
    • 7.2 Другие критические замечания
      • 7.2.1 Ортогональность и полнота
      • 7.2.2 Нулевой
      • 7.2.3 Дубликаты
      • 7.2.4 Несовпадение импеданса
  • 8 Категории целостности данных
    • 8.1 Целостность объекта
    • 8.2 Целостность домена
    • 8.3 Ссылочная целостность
    • 8.4 Целостность, определяемая пользователем
  • 9 Типы данных SQL
    • 9.1 Предопределенные типы данных
    • 9.2 Сконструированные типы
  • 10 См. Также
  • 11 Примечания
  • 12 Ссылки
  • 13 Источники
    • 13.1 Документы стандартов SQL
      • 13.1.1 Общедоступные стандарты ITTF и технические отчеты
      • 13.1.2 Проекты документов
  • 14 Внешние ссылки

История

Изначально SQL был разработан в IBM от Дональда Д. Чемберлина и Рэймонда Ф. Бойса после изучения реляционной модели от Эдгара Ф. Кодда в начале 1970-х.. Эта версия, первоначально называвшаяся SEQUEL (Structured English Query Language), была разработана для манипулирования и извлечения данных, хранящихся в исходной квазиреляционной системе управления базами данных IBM, которая была создана IBM, группа в Исследовательской лаборатории IBM в Сан-Хосе была разработана в 1970-х годах.

Первой попыткой Чемберлина и Бойса создать язык реляционных баз данных был Square, но его было трудно использовать из-за обозначения индекса. После перехода в исследовательскую лабораторию Сан-Хосе в 1973 году они начали работу над SEQUEL. Акроним SEQUEL позже был изменен на SQL, потому что SEQUEL был товарным знаком компании Великобритании Hawker Siddeley Dynamics Engineering Limited.

После тестирования SQL на тестовых сайтах заказчиков для определения полезности и практичности системы IBM приступила к разработке коммерческих продуктов на основе своего прототипа System R, включая System / 38, SQL / DS, и DB2, которые были коммерчески доступны в 1979, 1981 и 1983 годах соответственно.

В конце 1970-х годов Relational Software, Inc. (сейчас Oracle Corporation ) увидели потенциал концепций, описанных Коддом, Чемберлином и Бойсом, и разработали свою собственную РСУБД на основе SQL и надеялись продать ее США. ВМС, Центральное разведывательное управление и другие США государственные агентства. В июне 1979 года компания Relational Software, Inc. представила первую коммерчески доступную реализацию SQL, Oracle V2 (Version2) для компьютеров VAX.

К 1986 году стандартные группы ANSI и ISO официально приняли стандартное определение языка "Database Language SQL". Новые версии стандарта были опубликованы в 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 и, в последний раз, в 2016 году.

Синтаксис

Предложение UPDATE {UPDATE страна SET предложение {SET совокупность = совокупность + 1 ⏞ выражение WHERE clause {WHERE name = ′ USA ′ ⏞ выражение ⏟ предикат; } инструкция {\ displaystyle \ left. {\ begin {array} {rl} \ textstyle {\ mathtt {UPDATE ~ clause}} \ {{\ mathtt {UPDATE \ country}} \\\ textstyle {\ mathtt {SET ~ clause}} \ {{\ mathtt {SET \ Population = ~}} \ overbrace {\ mathtt {population + 1}} ^ {\ mathtt {выражение}} \\\ textstyle {\ mathtt {WHERE ~ clause}} \ {{\ mathtt {WHERE \ \ underbrace {{name =} \ overbrace {'USA'} ^ {выражение}} _ {предикат};}} \ end {array}} \ right \} {\ textstyle {\ texttt {statement}}}}{\displaystyle \left.{\begin{array}{rl}\textstyle {\mathtt {UPDATE~clause}}\{{\mathtt {UPDATE\ country}}\\\textstyle {\mathtt {SET~clause}}\{{\mathtt {SET\ population=~}}\overbrace {\mathtt {population+1}} ^{\mathtt {expression}}\\\textstyle {\mathtt {WHERE~clause}}\{{\mathtt {WHERE\ \underbrace {{name=}\overbrace {'USA'} ^{expression}} _{predicate};}}\end{array}}\right\}{\textstyle {\texttt {statement}}}}Диаграмма, показывающая несколько элементов языка SQL, составляющих один оператор

Язык SQL подразделяется на несколько языковых элементов, включая:

  • Разделы, которые являются составными компонентами операторов и запросы. (В некоторых случаях это необязательно.)
  • Выражения, которые могут давать либо скалярные значения, либо таблицы, состоящие из столбцов и строк данных
  • Предикаты, которые определяют условия, которые могут быть оценены с помощью SQL трехзначной логики (3VL) (истина / ложь / неизвестно) или логического значения истинности и используются для ограничения эффектов операторов и запросов или для изменения потока программы.
  • Запросы, которые извлекают данные на основе определенных критериев. Это важный элемент SQL.
  • Операторы, которые могут иметь постоянное влияние на схемы и данные или могут управлять транзакциями, потоком программы, соединениями, сеансами или диагностикой.
    • SQL-операторы также содержат символ конца оператора точка с запятой (";"). Хотя он не требуется на каждой платформе, он определен как стандартная часть грамматики SQL.
  • Незначительные пробелы обычно игнорируются в операторах и запросах SQL, что упрощает форматирование кода SQL для удобства чтения.

Процедурные extension

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

ИсточникАббревиатураПолное имя
Стандарт ANSI / ISOSQL / PSM Модули SQL / Persistent Stored
Interbase / Firebird PSQL процедурный SQL
IBM DB2 SQL PL процедурный язык SQL (реализует SQL / PSM)
IBM Informix SPLСохраненный процедурный язык
IBM Netezza NZPLSQL(на основе Postgres PL / pgSQL)
InvantivePSQLInvantive Procedural SQL (реализует SQL / PSM и PL / SQL )
MariaDB SQL / PSM, PL / SQL SQL / Persistent Stored Module (реализует SQL / PSM), процедурный язык / SQL (на основе Ada )
Microsoft / Sybase T-SQL Transact-SQL
Mimer SQL SQL / PSM SQL / Persistent Stored Module (реализует SQL / PSM)
MySQL SQL / PSM SQL / Persistent Stored Module (реализует SQL / PSM)
MonetDB SQL / PSM SQL / Persistent Stored Module (реализует SQL / PSM)
NuoDB SSPStarkey Stored Процедуры
Oracle PL / SQL процедурный язык / SQL (на основе Ada )
PostgreSQL PL / pgSQL процедурный язык / язык структурированных запросов PostgreSQL (на основе сокращенного PL / SQL )
SAP R / 3 ABAP Расширенное программирование бизнес-приложений
SAP HANA SQLScriptSQLScript
Sybase Watcom-SQLSQL Anywhere Watcom-SQL Dialect
Teradata SPLХранимый процедурный язык

В дополнение к стандартным расширениям SQL / PSM и проприетарным расширениям SQL, процедурным и объектно-ориентированное программирование доступно на многих платформах SQL через интеграцию СУБД с другими языками. Стандарт SQL определяет расширения SQL / JRT (процедуры и типы SQL для языка программирования Java) для поддержки кода Java в базах данных SQL. Microsoft SQL Server 2005 использует SQLCLR (общеязыковая среда выполнения SQL Server) для размещения управляемых сборок .NET в базе данных, тогда как предыдущие версии SQL Server были ограничены в неуправляемые расширенные хранимые процедуры, в основном написанные на C. PostgreSQL позволяет пользователям писать функции на самых разных языках, включая Perl, Python, Tcl, JavaScript (PL / V8) и C.

Взаимодействие и стандартизация

Обзор

Реализации SQL несовместимы между поставщиками и не обязательно полностью следовать стандартам. В частности, синтаксис даты и времени, конкатенация строк, NULLs и сравнение чувствительность к регистру варьируются от поставщика к поставщику. Конкретными исключениями являются PostgreSQL и Mimer SQL, которые стремятся к соответствию стандартам, хотя PostgreSQL не придерживается стандарта в том, как выполняется сворачивание имен без кавычек. Сворачивание имен без кавычек в нижний регистр в PostgreSQL несовместимо со стандартом SQL, согласно которому имена без кавычек следует переводить в верхний регистр. Таким образом, Fooдолжен быть эквивалентен FOO, а не fooсогласно стандарту.

Популярные реализации SQL обычно не поддерживают базовые функции стандартного SQL, такие как типы данных DATEили TIME. Наиболее очевидными из таких примеров и, кстати, наиболее популярными коммерческими и проприетарными СУБД SQL являются Oracle (чья DATEведет себя как DATETIMEи не имеет типа TIME) и MS SQL Server (до версии 2008). В результате код SQL редко может быть перенесен между системами баз данных без изменений.

Причины несовместимости

Существует несколько причин отсутствия переносимости между системами баз данных:

  • Сложность и размер стандарта SQL означает, что большинство разработчиков не поддерживают весь стандарт.
  • Стандарт не определяет поведение базы данных в нескольких важных областях (например, индексы, файловое хранилище...), оставляя реализациям решать, как себя вести.
  • SQL Стандарт точно определяет синтаксис, который должна реализовать соответствующая система баз данных. Однако стандартная спецификация семантики языковых конструкций менее четко определена, что приводит к двусмысленности.
  • Многие поставщики баз данных имеют большие существующие базы клиентов; там, где более новая версия стандарта SQL конфликтует с предыдущим поведением базы данных поставщика, поставщик может не желать нарушать обратную совместимость.
  • У поставщиков мало коммерческих стимулов, чтобы облегчить пользователям смену поставщиков базы данных (см. привязка к поставщику ).
  • Пользователи, оценивающие программное обеспечение баз данных, обычно ставят другие факторы, такие как производительность, выше в свои приоритеты, чем соответствие стандартам.

История стандартизации

SQL был принят в качестве стандарта в Американский национальный институт стандартов (ANSI) в 1986 году как SQL-86 и Международная организация по стандартизации (ISO) в 1987 году. Он поддерживается ISO / IEC JTC 1, Информационные технологии, Подкомитет SC 32, Управление данными и обмен.

До 1996 года программа стандартов управления данными Национального института стандартов и технологий (NIST) сертифицировала соответствие СУБД SQL стандарту SQL. Теперь поставщики самостоятельно -проверить соответствие t наследственные продукты.

Исходный стандарт объявил, что официальное произношение для «SQL» было инициализмом : («ess cue el»). Тем не менее, многие англоговорящие специалисты по базам данных (включая Дональда Чемберлина ) используют акроним -подобное произношение («продолжение»), отражая название предварительной версии языка, «SEQUEL».. Стандарт SQL претерпел ряд изменений:

ГодИмяПсевдонимКомментарии
1986SQL-86SQL-87Впервые формализована ANSI.
1989SQL-89FIPS 127-1Незначительная редакция, добавляющая ограничения целостности, принятая как FIPS 127-1.
1992SQL-92 SQL2, FIPS 127-2Основная версия (ISO 9075), начальный уровень SQL-92 принят как FIPS 127-2.
1999SQL: 1999 SQL3Добавлено сопоставление регулярных выражений, рекурсивные запросы (например, транзитивное замыкание ), триггеры, поддержка процедурных операторов и операторов управления потоком, нескалярных типов (массивов) и некоторых объектно-ориентированных функций (например, структурированных типов ). Поддержка встраивания SQL в Java (SQL / OLB ) и наоборот (SQL / JRT ).
2003SQL: 2003 Введены функции, связанные с XML (SQL / XML ), оконные функции, стандартизованные последовательности и столбцы с автоматически сгенерированными значениями (включая идентификационные столбцы).
2006SQL: 2006 ISO / IEC 9075-14: 2006 определяет способы использования SQL с XML. Он определяет способы импорта и хранения данных XML в базе данных SQL, управления ими в базе данных и публикации как XML, так и обычных данных SQL в форме XML. Кроме того, он позволяет приложениям интегрировать запросы в свой код SQL с помощью XQuery, языка запросов XML, опубликованного Консорциумом World Wide Web (W3C ), для одновременного доступа к обычным данным SQL и XML-документы.
2008SQL: 2008 Легализует определения ORDER BY за пределами курсора. Добавляет триггеры INSTEAD OF, оператор TRUNCATE, предложение FETCH.
2011SQL: 2011 Добавляет временные данные (PERIOD FOR) (дополнительная информация: Temporal database # History ). Улучшения для оконных функций и предложения FETCH.
2016SQL: 2016 Добавляет сопоставление шаблонов строк, полиморфные табличные функции, JSON.
2019SQL: 2019Добавляет Часть 15, многомерные массивы (тип и операторы MDarray).

Текущий стандарт

Стандарт обычно обозначается шаблоном: ISO / IEC 9075-n: yyyy Part n: title, или, сокращенно, ISO / IEC 9075.

ISO / IEC 9075 дополняется ISO / IEC 13249: SQL Multimedia and Application Packages (SQL / MM), который определяет интерфейсы и пакеты на основе SQL для широко распространенных приложений, таких как видео, аудио и пространственные данные. Заинтересованные стороны могут приобрести документы стандартов SQL в ISO, IEC или ANSI. Черновик SQL: 2008 находится в свободном доступе в виде архива zip.

Анатомия стандарта SQL

Стандарт SQL разделен на десять частей. Имеются пробелы в нумерации из-за вывода устаревших деталей.

  • ISO / IEC 9075-1: 2016, часть 1: Framework (SQL / Framework). Он предоставляет логические концепции.
  • ISO / IEC 9075-2: 2016 Часть 2: Foundation (SQL / Foundation). Он содержит наиболее важные элементы языка и состоит как из обязательных, так и из дополнительных функций.
  • ISO / IEC 9075-3: 2016 Часть 3: Интерфейс на уровне вызовов (SQL / CLI ). Он определяет сопрягающие компоненты (структуры, процедуры, привязки переменных), которые могут использоваться для выполнения операторов SQL из приложений, написанных на Ada, C соответственно C ++, COBOL, Fortran, MUMPS, Pascal или PL / I. (Для Java см. Часть 10.) SQL / CLI определен таким образом, что операторы SQL и вызовы процедур SQL / CLI обрабатываются отдельно от исходного кода вызывающего приложения. Открытые возможности подключения к базам данных - это хорошо известная расширенная версия SQL / CLI. Эта часть стандарта состоит исключительно из обязательных функций.
  • ISO / IEC 9075-4: 2016 Часть 4: Постоянно хранимые модули (SQL / PSM ). Он стандартизирует процедурные расширения для SQL, включая поток управления, обработку условий, сигналы условий оператора и отмены, курсоры и локальные переменные, а также присвоение выражений переменным и параметрам. Кроме того, SQL / PSM формализует объявление и обслуживание постоянных подпрограмм языка базы данных (например, «хранимых процедур»). Эта часть стандарта состоит исключительно из дополнительных функций.
  • ISO / IEC 9075-9: 2016 Часть 9: Управление внешними данными (SQL / MED ). Он предоставляет расширения для SQL, которые определяют оболочки сторонних данных и типы каналов данных, позволяющие SQL управлять внешними данными. Внешние данные - это данные, которые доступны СУБД на базе SQL, но не управляются ею. Эта часть стандарта состоит исключительно из дополнительных функций.
  • ISO / IEC 9075-10: 2016 Часть 10: Привязки объектного языка (SQL / OLB ). Он определяет синтаксис и семантику SQLJ, который является SQL, встроенным в Java (см. Также часть 3). Стандарт также описывает механизмы, обеспечивающие двоичную переносимость приложений SQLJ, и определяет различные пакеты Java и содержащиеся в них классы. Эта часть стандарта состоит исключительно из дополнительных функций. В отличие от SQL / OLB JDBC определяет API и не является частью стандарта SQL.
  • ISO / IEC 9075-11: 2016 Часть 11: Информация и схемы определения (SQL / схема ). Он определяет информационную схему и схему определения, предоставляя общий набор инструментов для самоописания баз данных и объектов SQL. Эти инструменты включают идентификатор объекта SQL, ограничения структуры и целостности, спецификации безопасности и авторизации, функции и пакеты стандарта ISO / IEC 9075, поддержку функций, предоставляемых реализациями СУБД на основе SQL, информацию о реализации СУБД на основе SQL и элементы определения размеров, а также значения, поддерживаемые реализациями СУБД. Эта часть стандарта содержит как обязательные, так и дополнительные функции.
  • ISO / IEC 9075-13: 2016 Часть 13: Процедуры и типы SQL с использованием языка программирования Java TM (SQL / JRT ). Он определяет возможность вызова статических методов Java как подпрограмм из приложений SQL («Java-in-the-database»). Это также требует возможности использовать классы Java в качестве структурированных пользователем типов SQL. Эта часть стандарта состоит исключительно из дополнительных функций.
  • ISO / IEC 9075-14: 2016 Часть 14: Спецификации, связанные с XML (SQL / XML ). Он определяет расширения на основе SQL для использования XML в сочетании с SQL. Представлен тип данных XML, а также несколько процедур, функций и сопоставлений типов данных XML-SQL для поддержки обработки и хранения XML в базе данных SQL. Эта часть стандарта состоит исключительно из дополнительных функций.
  • ISO / IEC 9075-15: 2019 Часть 15: Многомерные массивы (SQL / MDA). Он определяет тип многомерного массива (MDarray) для SQL, а также операции с MDarrays, срезами MDarray, ячейками MDarray и связанными функциями. Эта часть стандарта состоит исключительно из дополнительных функций.

Расширения стандарта ISO / IEC

ISO / IEC 9075 дополняются мультимедийными и прикладными пакетами ISO / IEC 13249 SQL. Этот тесно связанный, но отдельный стандарт разработан тем же комитетом. Он определяет интерфейсы и пакеты на основе SQL. Целью является унифицированный доступ к типичным приложениям баз данных, таким как текст, изображения, интеллектуальный анализ данных или пространственные данные.

  • ISO / IEC 13249-1: 2016 Часть 1: Framework
  • ISO / IEC 13249-2 : 2003 Часть 2: Полнотекстовый
  • ISO / IEC 13249-3: 2016 Часть 3: Пространственный
  • ISO / IEC 13249-5: 2003 Часть 5: Неподвижное изображение
  • ISO / IEC 13249-6: 2006 Часть 6: Интеллектуальный анализ данных
  • ISO / IEC 13249-7: 2013 Часть 7: История
  • ISO / IEC 13249-8: xxxx Часть 8: Метаданные Доступ к реестру MRA (в стадии разработки)

ISO / IEC 9075 также сопровождается серией технических отчетов, опубликованных как ISO / IEC TR 19075 в 8 частях. В этих технических отчетах объясняется обоснование и использование некоторых функций SQL, приводя примеры, где это необходимо. Технические отчеты не являются нормативными; если есть какие-либо расхождения с 9075, текст в 9075 остается в силе. В настоящее время доступны следующие технические отчеты 19075:

  • ISO / IEC TR 19075-1: 2011 Часть 1: Поддержка регулярных выражений XQuery в SQL
  • ISO / IEC TR 19075-2: 2015 Часть 2: Поддержка SQL для времени -Связанная информация
  • ISO / IEC TR 19075-3: 2015 Часть 3: SQL, встроенный в программы с использованием языка программирования Java
  • ISO / IEC TR 19075-4: 2015 Часть 4: SQL с Подпрограммы и типы с использованием языка программирования Java
  • ISO / IEC TR 19075-5: 2016 Часть 5: Распознавание шаблонов строк в SQL
  • ISO / IEC TR 19075-6: 2017 Часть 6: SQL поддержка нотации объектов JavaScript (JSON)
  • ISO / IEC TR 19075-7: 2017 Часть 7: Полиморфные табличные функции в SQL
  • ISO / IEC TR 19075-8: 2019 Часть 8: Multi -Массивы измерений (SQL / MDA)

Альтернативы

Следует проводить различие между альтернативами SQL как языку и альтернативами самой реляционной модели. Ниже предлагаются реляционные альтернативы языку SQL. См. навигационная база данных и NoSQL для получения информации об альтернативах реляционной модели.

  • .QL : объектно-ориентированный журнал данных
  • 4D Query Language (4D QL)
  • Datalog : критики предполагают, что Datalog имеет два преимущества перед SQL: он имеет более чистую семантику, которая облегчает понимание и обслуживание программ, и является более выразительным, в частности, для рекурсивных запросов.
  • HTSQL : метод запроса на основе URL
  • IBM Business System 12 (IBM BS12) : одна из первых полностью реляционных систем управления базами данных, представленная в 1982 году.
  • ISBL
  • jOOQ : SQL, реализованный в Java как внутренний предметно-ориентированный язык
  • Java Persistence Query Language (JPQL): язык запросов, используемый Java Persistence API и Hibernate библиотекой сохраняемости
  • JavaScript : MongoDB реализует свой язык запросов в JavaScript API.
  • LINQ : запускает операторы SQL, написанные как языковые конструкции, для запроса коллекций непосредственно из кода .Net.
  • Язык объектных запросов
  • Создан QBE (Query By Example ) автор: Moshè Z loof, IBM 1977
  • Quel, представленный в 1974 году U.C. Проект Berkeley Ingres.
  • Учебник D
  • XQuery

Распределенная обработка SQL

Архитектура распределенной реляционной базы данных (DRDA) была разработана рабочей группой внутри IBM в период с 1988 по 1994 год. DRDA обеспечивает работу в сети подключенные реляционные базы данных для взаимодействия для выполнения запросов SQL.

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

Сообщения, протоколы и структурные компоненты DRDA определены Архитектурой управления распределенными данными.

Критика

Дизайн

SQL по-разному отличается от его теоретическая основа, реляционная модель и ее кортежное исчисление. В этой модели таблица представляет собой набор кортежей, тогда как в SQL таблицы и результаты запросов представляют собой списки строк: одна и та же строка может встречаться несколько раз, и порядок строк могут использоваться в запросах (например, в разделе LIMIT).

Критики утверждают, что SQL следует заменить языком, который строго возвращается к исходной основе: например, см. Третий манифест. Однако не существует известных доказательств того, что такую ​​уникальность нельзя добавить к самому SQL или, по крайней мере, к его разновидности. Другими словами, вполне возможно, что SQL можно «исправить» или, по крайней мере, улучшить в этом отношении, так что отрасли, возможно, не придется переключаться на совершенно другой язык запросов для получения уникальности. Дебаты по этому поводу остаются открытыми.

Другая критика

Чемберлин обсуждает четыре исторических критических замечания SQL в статье 2012 года:

Ортогональность и полнота

Ранние спецификации не поддерживали основные функции, такие как как первичные ключи. Наборы результатов не могут быть названы, а подзапросы не определены. Они были добавлены в 1992 году.

Нулевой

Концепция Нулевого является предметом некоторых споров. Маркер Null указывает на отсутствие значения, даже 0 для целочисленного столбца или строки длины 0 для текстового столбца. Концепция Nulls применяет 3-значную логику в SQL, которая является конкретной реализацией общей 3-значной логики.

Duplicates

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

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

Несоответствие импеданса

В смысле, аналогичном Объектно-реляционное несоответствие импеданса, существует несоответствие между декларативным языком SQL и процедурными языками, в которые обычно встроен SQL..

Категории целостности данных

Основные категории целостности данных каждой СУБД.

Целостность сущности

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

Целостность домена

Ограничивает тип, формат и диапазон значений, которые применяются к допустимым записям для столбца в таблице

Ссылочная целостность

Создает строки в таблице, которые используются другими записями, невозможно удалить

Заданная пользователем целостность

Применяются другие особые правила, не указанные выше

Типы данных SQL

Стандарт SQL определяет три типа типов данных:

  • предопределенные типы данных
  • сконструированные типы
  • определяемые пользователем типы.

предопределенные типы данных

  • символьные типы
  • Символ (CHAR)
  • Изменение символа (VARCHAR)
  • Большой объект символа (CLOB)
  • Двоичные типы
  • Двоичный (BINARY)
  • Изменение двоичного значения (VARBINARY)
  • Большой двоичный объект (BLOB)
  • Числовые типы
  • Точные числовые типы (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
  • Приблизительные числовые типы (FLOAT, REAL, DOUBLE PRECISION)
  • Типы даты и времени (DATE, TIME, TIMESTAMP)
  • Тип интервала (INTER VAL)
  • Boolean
  • XML
  • JSON

Сконструированные типы

Сконструированные типы - это один из ARRAY, MULTISET, REF (erence) или ROW... Типы, определяемые пользователем, сопоставимы с классами объектно-ориентированного языка со своими собственными конструкторами, наблюдателями, мутаторами, методами, наследованием, перегрузкой, перезаписью, интерфейсами и т. Д.

См. Также

Примечания

Ссылки

Источники

документы стандартов SQL

общедоступные стандарты и технические отчеты ITTF

ISO /IEC Целевая группа по информационным технологиям публикует общедоступные стандарты, включая SQL. Здесь публикуются Технические исправления (исправления) и Технические отчеты (документы для обсуждения).

SQL - Часть 1: Framework (SQL / Framework)

Черновики документов

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

Внешние ссылки

Последняя правка сделана 2021-06-06 04:10:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте