Причины различий в SQL - PullRequest
       33

Причины различий в SQL

5 голосов
/ 01 сентября 2008

Почему распределения SQL так нестандартны, несмотря на наличие стандарта ANSI для SQL? Действительно ли много значимых различий в том, как работают базы данных SQL, или это просто две базы данных, с которыми я работал: MS-SQL и PostgreSQL? Почему возникают эти различия?

Ответы [ 5 ]

8 голосов
/ 01 сентября 2008

Стандарт ANSI определяет только ограниченный набор команд и типов данных. Как только вы выйдете за их пределы, разработчики сами по себе. А некоторые очень важные понятия вообще не указаны, например, автоинкрементные столбцы. SQLite просто выбирает первое ненулевое целое число, MySQL требует AUTO INCREMENT, PostgreSQL использует последовательности и т. Д. Это беспорядок, и это только среди баз данных OSS! Попробуйте заставить Oracle, Microsoft и IBM совместно решить сложную задачу.

5 голосов
/ 04 сентября 2008

Во-первых, я не нахожу базы данных такими, как, скажем, браузеры или операционные системы с точки зрения несовместимости. Любой, у кого есть несколько часов обучения, может начать делать выборки, вставки, удаления и обновления в любой базе данных SQL. Между тем, сложно писать HTML, который одинаково визуализируется в каждом браузере, или писать системный код для более чем одной ОС. Как правило, различия в SQL связаны с производительностью или довольно эзотерическими функциями. Основным исключением, похоже, являются форматы и функции даты.

Во-вторых, разработчики баз данных, как правило, заинтересованы в добавлении функций, которые отличают их продукт от всех остальных. Такие продукты, как Oracle, MS SQL Server и MySQL, представляют собой обширные экосистемы, которые на практике редко подвергаются перекрестному опылению. На моем рабочем месте мы используем Oracle и MySQL, но, возможно, мы могли бы перейти на 100% Oracle примерно за день, если это необходимо или желательно. Поэтому меня очень волнуют блестящие игрушки, которые Oracle дает нам с каждым выпуском, но я даже не знаю, какую версию MySQL мы используем. IBM, Microsoft, PostgreSQL и другие могут не существовать для нас. Наличие функций для получения и удержания клиентов и пользователей гораздо важнее, чем совместимость в мире баз данных. (Полагаю, это положительный поворот в ответе о блокировке).

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

5 голосов
/ 01 сентября 2008

Это форма "стелс-блокировки". Джоэл подробно останавливается здесь:

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

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

4 голосов
/ 04 сентября 2008

Джон: Стандарт на самом деле охватывает множество предметов, в том числе столбцы идентификаторов, последовательности, триггеры, подпрограммы, upsert и т. Д. Но, конечно, многие из этих компонентов-стандартов, возможно, были внедрены позже, чем первые реализации; и это может быть причиной того, что соответствие стандартам SQL, как правило, несколько низкое.

Neall: На самом деле существуют области, в которых стандарт SQL опережает реализации. Например, было бы неплохо иметь CREATE ASSERTION, но, насколько мне известно, ни одна СУБД еще не реализует утверждения.

Лично я считаю, что закрытая природа некоторых стандартов ISO (например, стандарта SQL) является частью проблемы: когда стандарт не доступен онлайн, он менее известен для разработчиков / планировщиков, и слишком мало клиенты просят о соответствии, потому что они не знают, о чем просить.

2 голосов
/ 01 сентября 2008

Это, безусловно, эффективная блокировка, как говорит 1800. Но по справедливости для поставщиков баз данных стандарт SQL всегда играет в догонялки к текущим наборам функций баз данных. Большинство баз данных, которые мы имеем сегодня, имеют довольно древние линии. Если вы проследите Microsoft SQL Server до его корней, я думаю, вы найдете Ingres - одну из самых первых реляционных баз данных, написанную в 70-х годах. И Postgres был первоначально написан некоторыми из тех же людей в 80-х годах как преемник Ingres. Oracle уходит очень далеко, и я не уверен, откуда появился MySQL.

Непереносимость базы данных - отстой, но это может быть намного хуже.

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