Почему ни одна база данных не полностью поддерживает стандарты ANSI или ISO SQL? - PullRequest
45 голосов
/ 24 апреля 2009

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

Почему общие базы данных выбирают, какие части стандартов они придерживаются, и почему на первый план не выходят системы, полностью соответствующие стандартам? Являются ли стандарты «нарушенными», не имеют сферы применения или слишком сложны для разработки?

Принятие этого к выводу; какой смысл в ANSI (или ISO) определять стандарты для SQL?

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

Ответы [ 12 ]

16 голосов
/ 24 апреля 2009

В индустрии программного обеспечения у вас есть некоторые стандарты, которые действительно являются стандартами, то есть продукты, которые не соответствуют им, просто не работают. Спецификации файлов попадают в эту категорию. Но тогда у вас также есть «стандарты», которые больше похожи на руководящие принципы: они могут быть определены как стандарты с точечными определениями, но обычно применяются только частично или со значительными различиями. Веб-разработка полна таких «стандартов», как HTML, CSS и «ECMAScript», где разные поставщики (то есть веб-браузеры) реализуют стандарты по-разному.

Разница вызывает головные боли, но стандартизация по-прежнему дает преимущества. Представьте, что вообще не было стандарта HTML, и каждый браузер использовал свой язык разметки. Аналогично, представьте себе, если бы не было стандарта SQL, и каждый поставщик баз данных использовал свой собственный проприетарный язык запросов. Было бы гораздо больше привязки к поставщикам, и разработчикам было бы гораздо сложнее работать с более чем одним продуктом.

Таким образом, нет, ANSI SQL не служит той же цели, что и стандарты ANSI в других отраслях. Но, тем не менее, оно служит полезной цели.

13 голосов
/ 24 апреля 2009

Возможно, потому что соответствие стандартам имеет низкий приоритет для покупателей систем баз данных. Их больше интересует:

  • совместимость с тем, что у них уже есть
  • производительности
  • цена
  • Поддержка ОС

назвать лишь несколько факторов.

То же самое относится и к языкам программирования - очень немногие (если таковые имеются) компиляторы поддерживают все функции текущих стандартов ANSI C и C ++.

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

12 голосов
/ 02 августа 2010

См. Статью « Является ли SQL реальным стандартом больше?» для обсуждения текущих (2005 г.) проблем стандарта SQL.

6 голосов
/ 27 апреля 2009

Действительно, стандарт ANSI SQL не часто соблюдается. Просто прочитайте SO: большинство потоков SQL никогда не ссылаются на стандарт, в то время как, например, обсуждения сетевых протоколов часто включают в себя фактическую цитату, главу и стих соответствующего RFC.

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

Другая причина в том, что это очень сложный и плохо организованный текст. Он использует странный словарь (например, «authID» вместо «user»). Вам нужны книги только для того, чтобы понять стандарт («Руководство по стандарту SQL», C.J. Date, Hugh Darwen - Addison-Wesley).

5 голосов
/ 02 августа 2010

Mimer SQL имеет отличную поддержку стандартов, но пока неизвестно. Он находится в производстве на нескольких крупных площадках, в основном в Швеции. Но я думаю, что многие сайты переходят на другие.

Подробные сведения о поддержке:

  • SQL-99
  • SQL-2003
  • PSM
  • Триггеры и функции базы данных в соответствии с SQL: 1999
  • Поддержка двоичных и символьных больших объектов (BLOB / CLOB / NCLOB) в соответствии с SQL: 1999
  • Транзакции с несколькими базами данных (двухфазная фиксация) в соответствии с XA-стандартом Open Group
  • Поддержка базового профиля Java ME CDC и Java ME CLDC / MIDP
4 голосов
/ 24 апреля 2009

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

3 голосов
/ 24 апреля 2009

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

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

Если вы вернетесь достаточно далеко, вы можете найти время в Нью-Йорке, где около половины электрической сети было постоянным током, одобренным Эдисоном, а другая половина была переменным током, одобренным Вестингаузом.

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

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

2 голосов
/ 25 марта 2012

Согласно руководству HSQLDB, это СУБД, соответствующая большинству стандартов .

  • Поддерживаются почти все синтаксические функции SQL-92 вплоть до продвинутого уровня
  • ядро ​​SQL: 2008 и множество дополнительных функций этого стандарта
2 голосов
/ 24 апреля 2009

ИМХО, поставщики БД продвигают стандарты ANSI SQL для включения новых функций и конструкций в свою область гораздо больше, чем ANSI, говоря поставщикам БД «единственно верный путь».

Рынок БД определяется возможностями, масштабируемостью и стоимостью. Это не коммерческий приоритет - отказываться от технического преимущества и откладывать его (например, разбиение, сводка, UPSERT, репликация), ожидая, пока ANSI ратифицирует синтаксис. К тому времени, когда это будет сделано, уже существует значительная установка проприетарного синтаксиса.

При этом большинство поставщиков БД значительно улучшили свою базовую поддержку "ANSI SQL" за последние несколько лет. (SQL Server с соединениями SELECT FROM INFORMATION_SCHEMA и ANSI Oracle фактически работает, а также нативные объединения в CBO)

1 голос
/ 27 апреля 2009

Реальная причина: большинство «разработчиков» являются ориентированными на клиента кодерами и поэтому не понимают и не заботятся о 12 правилах доктора Кодда. Именно поэтому MySql, который не является реляционной базой данных в какой-либо значительной степени, часто встречается в разработке webKiddie. Такие разработчики хотят только элементарный разбор SELECT, UPDATE, DELETE. Они избегают ограничений любого рода, предпочитая «делать это в приложении». Реакционные приложения 1960-х годов - это то, что вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...