Каковы хорошие альтернативы SQL (язык)?

Я иногда слышу о том, как SQL отстой, и это не хороший язык, но я никогда не слышал об альтернативах. Итак, другие хорошие языки, которые служат той же цели (доступ к базе данных) и что делает их лучше, чем SQL? Есть ли хорошие базы данных, которые используют этот альтернативный язык?

EDIT: Я знаком с SQL и использую его все время. У меня нет проблем с этим, меня просто интересуют любые альтернативы, которые могут существовать, и почему люди любят их лучше.

Я также не ищу альтернативные типы баз данных (движение NoSQL), просто разные способы доступа к базам данных.

Ответ 1

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

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

  • SchemeQL и CLSQL, который вероятно, являются самыми гибкими из-за их наследия Lisp, но они также выглядят намного более похожими на SQL, чем другие интерфейсы.
  • LINQ (в .Net)
  • ScalaQL и ScalaQuery (в Scala)
  • SqlStatement, ActiveRecord и многие другие в Рубин,
  • HaskellDB
  • ... список доступен для многих других языков.

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

Ответ 2

Взгляните на этот список.

Hibernate Query Language, вероятно, наиболее распространен. Преимущество Hibernate заключается в том, что объекты очень легко (почти автоматически) сопоставляются с реляционной базой данных, и разработчику не нужно тратить много времени на разработку базы данных. Ознакомьтесь с сайтом Hibernate для получения дополнительной информации. Я уверен, что другие будут перекликаться с другими интересными языками запросов...

Конечно, там много материалов NoSQL, но вы конкретно указываете, что вас это не интересуют.

Ответ 3

Возможно, вы думаете о критике C. Дата и его друзья высказались против существующих реляционных баз данных и SQL; они говорят, что системы и язык не являются на 100% реляционными и должны быть. Я действительно не вижу здесь настоящей проблемы; насколько я вижу, вы можете иметь 100% -ную реляционную систему, если хотите, просто обучая тем, как вы используете SQL.

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

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

Ответ 4

"Я иногда слышу о том, как SQL отстой, и это не хороший язык"

SQL старше 30 лет. Понимание о том, "какие функции делают что-то" хорошим "языком, а какие делают его" плохим ", развивались быстрее, чем сам SQL.

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

", но я никогда не слышал об альтернативах."

Я приглашаю вас задуматься над тем, что вы пытаетесь услышать только в неправильных местах (т.е. исключительно в коммерческой индустрии СУБД).

"Итак, другие хорошие языки, которые служат той же цели (доступ к базе данных) и что делает их лучше, чем SQL?"

Date & Darwen описывает функции, которые современный язык манипулирования данными должен соответствовать в своем "Третьем манифесте", последняя версия которого изложена в их книге "Базы данных, типы и реляционная модель".

"Есть ли хорошие базы данных, которые используют этот альтернативный язык?"

Если "добрый", вы имеете в виду что-то вроде "промышленной силы", то нет. Ближайшим доступным может быть Dataphor.

Проект Rel предлагает реализацию для языка Tutorial D, определенного в "Базах данных, типах и реляционной модели", но текущая основная цель Rel должна быть образовательной в природе.

Мой проект SIRA_PRISE предлагает реализацию для "действительно реляционного" управления данными, но я смущаюсь также называть его "реализацией языка".

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

О, и, кстати, программная система, которая используется для управления базами данных, не является "базой данных", а "системой управления базой данных", "СУБД" для краткости. Точно так же, как фотография - это не то же самое, что камера, и если вы обсуждаете камеры, и вы хотите избежать путаницы, тогда вы должны использовать правильное слово "камеры" вместо "фотографии".

Ответ 5

Посмотрите LINQ to SQL...

Пробовал пару месяцев назад и никогда не оглядывался назад.

Ответ 6

Прямой ответ: я не думаю, что там есть серьезный соперник. DBase и его подделки (Foxpro, Codebase и т.д.) Некоторое время были соперниками, но я думаю, что они в основном потеряли язык запросов к базе данных. Было много других продуктов баз данных, которые имели свой собственный язык запросов, таких как "Прогресс" и "Парадокс", а также несколько других, которые я использовал, имена которых я не помню и, безусловно, многие другие, о которых я никогда не слышал. Но я не думаю, что любой другой соперник даже приблизился к тому, чтобы получить нетривиальную долю рынка.

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

Side ramble: я бы не сказал, что SQL отстой, но у него много недостатков. Имея в виду многолетний опыт и задним числом, которые мы имеем сейчас, я уверен, что можно разработать лучший язык запросов. Но создание лучшего языка запросов и убеждение людей в его использовании - это две разные вещи. Было бы достаточно лучше убедить людей в том, что это стоит того, чтобы учиться. Люди потратили много лет своей жизни на изучение эффективного использования SQL. Даже если ваш новый язык проще в использовании, наверняка будет кривая обучения. И как бы вы перенести существующие системы с SQL на новый язык? И т.д. Это можно сделать, конечно, так же, как С++, С# и Java в значительной степени свергли COBOL и FORTRAN. Но для этого требуется сочетание технического превосходства и хорошего маркетинга.

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

Ответ 7

Общее движение в эти дни - NoSQL; обычно эти технологии:

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

Ответ 8

Еще в 1980-х годах ObjectStore обеспечивал прозрачный доступ к объектам. Это было похоже на RDBMS плюс ORM, за исключением всех лишних негерметичных уровней абстракции: он хранил объекты непосредственно в базе данных.

Таким образом, эта альтернатива была действительно "нигде вообще", или, возможно, "язык, который вы уже используете". Вы должны писать код С++ и создавать или перемещать объекты, как если бы они были родными объектами, и база данных позаботилась обо всем по мере необходимости. Вроде как ActiveRecord, но он действительно работал так же, как заявка на маркетинг Blitzes от ActiveRecord.: -)

(Конечно, у него не было маркетинговой мышцы Oracle, и у него не было нулевой стоимости MySQL, поэтому все проигнорировали его. И теперь мы пытаемся реплицировать это с помощью RDBMS и ORM, а некоторые пытаются утверждать что таблицы действительно имеют смысл для хранения объектов, и что создание гигантского XML файла, чтобы сообщить компьютеру, как сопоставлять объекты с таблицами, является разумным решением.)

Ответ 9

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

Если ваши потребности в хранении и обработке относительно традиционных данных, используйте некоторые СУБД на основе SQL.

В ответ на ваше редактирование:

Если вы ищете альтернативы SQL DML для извлечения данных из реляционных хранилищ данных, я никогда не слышал о какой-либо серьезной альтернативе SQL.

Отступы SQL-данных, по-моему, так сильно отличаются от языка, в отличие от базовых принципов хранения данных, на которых основан язык. Люди часто путают язык SQL с реляционной моделью данных, на которой построены RDBMS.

Ответ 10

Существует множество реализаций SQL (SQL Server, mysql, Oracle и т.д.), но нет другого языка, который будет служить той же цели в смысле того, что является языком общего назначения, предназначенным для реляционного хранения и поиска данных.

Существуют базы данных объектов, такие как db4o, и есть похожие так называемые базы данных noSQL, которые относятся только к любому механизму хранения данных, который не полагается на SQL, но чаще всего такие продукты с открытым исходным кодом, как Cassandra, основанные на Google Bigtable.

Существует также ряд специальных продуктов для баз данных, таких как CDF, но вам, вероятно, не нужно беспокоиться о них - если вам это нужно, вы узнаете.

Ни один из них не эквивалентен SQL.

Это не значит, что они "лучше" или "хуже" - они просто не то же самое. Деннис Форбс написал отличный пост, недавно разбив ряд странных претензий, всплывающих против SQL. Он утверждает (и я согласен), что эти жалобы происходят в основном от людей и магазинов, которые либо выбрали неправильный инструмент для работы в первую очередь, либо неправильно используют свои SQL-СУБД (я больше не удивляюсь, когда я см. другую базу данных SQL, где каждый столбец является varchar(50) и там ни один индекс или ключ нигде).

Если вы внедряете еще один сайт социальной сети и не слишком озабочены принципами ACID, обязательно начинайте изучать такие продукты, как db4o. Однако, если вы разрабатываете критически важную бизнес-систему, я настоятельно рекомендую вам дважды подумать, прежде чем присоединиться к хору "SQL sucks". Сначала сделайте исследование, узнайте, какие функции могут и не могут поддерживать различные продукты.


Изменить - я был занят написанием своего ответа и не получил вопрос с нескольких минут. Сказав это, SQL по существу неотделима от СУБД. Если вы запустите продукт базы данных SQL, вы получите доступ к нему с SQL, периодом.

Возможно, вы ищете абстракции по синтаксису; Linq to SQL, Entity Framework, Hibernate/NHibernate, SubSonic и множество других инструментов ORM предоставляют собственный SQL-подобный синтаксис, который не совсем соответствует SQL. Все они "скомпилируются" для SQL. Если вы запустите SQL Server, вы также можете написать CLR Functions/Procedures/Triggers, который позволяет писать код на любом языке .NET, который будет работать внутри базы данных; однако на самом деле это не замена SQL, а расширение его.

Я не знаю ни одного полного "языка", который можно сложить поверх базы данных SQL; не переходя к другому продукту базы данных, вы, в конце концов, увидите SQL на трубе.

Ответ 11

Я думаю, вам может быть интересно посмотреть Dataphor, которая является средой реляционной разработки с открытым исходным кодом с собственным сервером базы данных (что говорит D), и возможность выводить пользовательские интерфейсы с языка запросов.

Также появляется Ingres по-прежнему поддерживает QUEL и открывает исходный код.

Ответ 12

SQL де-факто.

Рамки, которые пытаются защитить разработчиков от этого, в конечном итоге создали свой собственный язык (Hibernate HQL приходит на ум).

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

Учитывая, что ведущие поставщики баз данных, предоставляющие современные базы данных (Oracle и SQL Server), поддерживают SQL и вкладывают годы в механизмы оптимизации и т.д., и все ведущие программы моделирования данных и программного обеспечения для управления изменениями работают в SQL, я бы сказал это самая безопасная ставка.

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

Ответ 13

Реляционные базы данных - это не единственный тип баз данных. Я должен сказать слово Объектные базы данных, поскольку я не видел его в ответах других. У меня был некоторый опыт работы с фреймворком Zope python, который использует ZODB для стойкости объектов вместо RDBMS (ну, теоретически, возможно заменить ZODB другой базой данных в zope, но в последний раз, когда я проверил, мне не удалось заставить его работать, поэтому не может быть положительным в этом).

Образ ZODB действительно отличается, скорее, как объектное программирование, которое будет настойчивым.

ORM можно рассматривать как своего рода язык

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

Ответ 14

Проблемы с SQL побудили меня подготовить черновик запросов, называемый SMEQL, на Вики-хранилище паттернов Portland. Комментарии Добро пожаловать. Он заимствует идеи из функционального программирования и экспериментального языка IBM Business System 12. (Я изначально называл его TQL, но позже нашел это имя.)

Ответ 15

В мире .NET, в то время как у него все еще есть чувство SQL-esque, LINQ-to-SQL позволит вам иметь хорошее сочетание обработки данных и SQL-данных в памяти. Это также упрощает много низкоуровневых данных, которые никто не хочет делать.

Если вы хотите увидеть тип базы данных совершенно другого мышления, посмотрите CouchDB. "Лучше", очевидно, является относительным требованием, и такая база данных несовместимости "Лучше", но только в определенных сценариях.

Ответ 16

SQL язык очень мощный, а системы управления реляционными базами данных были и остаются огромным успехом. Но есть класс приложений, который требует очень высокой масштабируемости и доступности, но не обязательно высокой степени согласованности данных (в конечном итоге важна последовательная согласованность). Разнообразные системы получают лучшую производительность и масштабирование, чем СУБД, ослабляя потребность в полноценных транзакциях, совместимых с ACID. Они были названы "NoSQL", но, как указывают другие, это неправильное название: возможно, их следует называть базами данных NoACID.

Майкл Стоунбрейкер описывает это в Обсуждение "NoSQL" не имеет ничего общего с SQL.