Intereting Posts
Алиасирование столбцов в операторах SELECT не работает с SQuirrel SQL + Firebird Использование коррелированного подзапроса MySQL Как назначить нулевое значение несоответствующим столбцам при использовании Group By Как распределенные транзакции ведут себя с несколькими подключениями к одному и тому же БД в потоковой среде? Сгенерировать сценарии CREATE для списка индексов MySQL: мне нужно показывать от 1 до максимум n сообщений от каждого пользователя за каждый день Могу ли я избежать всех атак SQL-инъекций с помощью параметров? SQL для удаления дубликатов в таблице Использует ли использование не-SQL-баз данных необходимость защиты от «SQL-инъекции»? nHibernate – подзаголовок в select с порядком Render html из sql – webmatrix Создать индекс в mysql не работает Правильная схема данных NoSQL для веб-галереи фотографий Затем измените таблицу, затем обновите Анонимные данные клиента для разработки или тестирования

Какие недостатки вы ощущаете в SQL и какие изменения вы могли бы сделать с этим?

У вас возникли недостатки, ограничения или недостатки при использовании SQL?

Задачи, которые легко выполнить с другими языками, отличными от SQL, настолько сложны или невозможны для SQL!

Вот хороший пример

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

Можете ли вы предложить улучшения, чтобы сделать SQL более мощным и менее сложным? Пример: PSM

Какая реализация SQL вы считаете наиболее надежной?

Какие возможности из среды, отличной от SQL, вы бы хотели увидеть в SQL? ..

Предположим, что SQL не существует, что бы вы использовали для управления данными? ..

Лично у меня есть мягкое пятно для баз данных CODASYL, где вы просматриваете наборы данных для доступа к связанным элементам данных … возможно, потому что моим первым опытом работы с базами данных была СУБД DEC. Возможность найти родительскую запись, а затем просто пройти набор детей была проста в использовании; и явные отношения между наборами данных, встроенными в базовую структуру базы данных, – это то, чего, к сожалению, не хватает в реляционных базах данных … и, прежде чем кто-либо подскажет это, внешние ключи являются бледной одномерной тенью этих отношений.

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

Недостатком было то, что почти вся конструкция должна была быть выполнена впереди … как только структура базы данных была спроектирована, она была довольно фиксированной, трудно меняющейся … по сравнению с РСУБД, где гораздо проще добавлять новые таблицы в любое время …. не особенно подходит для мира RAD / Agile / XP / Scrum.

Теперь, если бы только кто-то мог придумать систему баз данных, где структура была такой же гибкой и легко изменяемой, как RDBMS, со всей простотой доступа к данным в базе данных CODASYL.

Базы данных OLAP – еще одна отличная альтернатива РСУБД, где данные могут быть легко структурированы как n-мерный куб, где запрос позволяет вам «кусочек и кубик» куба, быстро извлекая сегменты данных. Моим первым введением в OLAP был Oracle Express, который (к сожалению) использует собственный собственный язык запросов, а не стандартный MDX de facto. Однако не все данные могут быть легко установлены на «кубическую» структуру, поэтому подходят только для определенных типов приложений, хотя практически любые приложения для интеллектуального анализа данных хорошо подходят.

SQL вообще имеет некоторые серьезные недостатки как язык базы данных. Вот лишь некоторые из проблем:

  • Дублирующие строки (мультиустановка, а не модель на основе набора)

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

  • Синтаксис оператора SELECT гораздо более подробный и сложный, чем реляционная алгебра

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

Два примера более конкретных проблем с запросами, которые сложны в SQL:

  • Нет простого эквивалента транзитивного замыкания в SQL. Поэтому выбор из структур отношений смежности требует использования либо процедурного кода, либо курсора, либо неинтуитивного и трудно оптимизировать рекурсивный синтаксис запроса.

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

Улучшения? Я не верю, что есть какие-то полезные улучшения, которые имели бы смысл, потому что исправление вышеизложенного изменило бы язык настолько радикально, что не было бы особого смысла даже притворяться, что это SQL больше. Лучший способ продвижения вперед, я считаю, заключается в разработке совершенно новых, действительно реляционных языков. Дата и модель D Darwen, являющиеся наиболее очевидным преемником SQL, уже привели к ряду новых реализаций реляционных языков.

Чтобы добавить к отличным ответам @dportas, для меня большие «упущенные возможности» в SQL – это то, что предлагаемые временные расширения, известные как TSQL2, никогда не попадали в SQL-стандарт. Следовательно, временные базы данных чрезвычайно трудно получить прав даже при использовании Full SQL-92, например, множественное присвоение было бы благом, когда, скажем, секвенциальное удаление в таблице действительного состояния требует четырех операторов ( INSERT s, два UPDATE s и DELETE ). Когда вы считаете, что большинству поставщиков не хватает поддержки функций SQL-92 (например, SQL Server не DEFERRABLE ограничений DEFERRABLE , Oracle не хватает aubqueries в ограничениях CHECK и т. Д.), Почти невозможно достичь без «худшего» типа процедурного кода.

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

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

Это то, что, я думаю, поможет ему в качестве языка реляционных данных. Для других типов данных SQL недостаточно хорош.

Фантастические ответы, dportas 🙂

Хотя это не так гламурно, что я хочу в стандарте SQL, это алгоритм разрешения конфликтов ограничений INSERT или UPDATE. MySQL и SQLite реализовали это как расширение стандарта SQL .

Эта ИМО должна быть функциональной функциональностью БД, иначе вы будете общаться с такими вещами, как:

 IF (record_exists) THEN -- update record ELSE -- insert new record 

Что кажется тривиальным, но это

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

Два запроса можно легко заменить одним:

 "Insert OR Update Table (field = value) Where ID = @ID" 

Чувствует себя гораздо более естественным 🙂

У вас возникли недостатки, ограничения или недостатки при использовании SQL?

Многие: http://c2.com/cgi/wiki?SqlFlaws

Не могли бы вы легко выполнить одну и ту же задачу с помощью другого языка DML или языка программирования?

Я уверен, что да. Третий манифест описывает, что мы должны использовать вместо SQL: Учебник D

Можете ли вы предоставить мне примеры примеров проблем, с которыми вы столкнулись, или случаи, когда, например, SQL-запрос требовал сложных конструкций или простых конструкций в чем-то другом?

Да. Возьмем, например, переименование столбцов в SQL. Скажем, у меня есть таблица с этими столбцами: a, b, c, d, e, f, g, h, i теперь, скажем, я хочу переименовать столбец a в «X». в SQL мне нужно написать:

 SELECT a as X,b,c,d,e,f,g,h,i FROM SomeTable 

В Tutorial DI только пишите:

 SomeTable RENAME ( a AS x) 

Или давайте посмотрим на это наоборот, что эквивалентно этому запросу Tutorial D:

  SomeTable REMOVE (e) 

Ну, это (трудно найти пропавших "е" .. нет?):

 SELECT a,b,c,d,f,g,h,i FROM SomeTable 

Или просто скажите мне, с каким кодом легче понять намерение разработчика с этим:

 SELECT a as X,c,d,e,f,g,h,i, g+h as z from SomeTable 

или с этим (это тот же запрос!):

 SomeTable RENAME (a AS X) REMOVE (b) ADD (g+hz) 

Видеть? SQL имеет недостатки в ядре! Или просто попробуйте написать select * из вызова хранимой процедуры . В зависимости от базы данных она может не работать

Можете ли вы предложить улучшения, чтобы сделать SQL более мощным и менее сложным?

Многие, замените его чем-то вроде Tutorial D или Dataphor

Какая реализация продукта RDBMS / SQL вы считаете наиболее надежной?

Надежная псевдоредакция ? Oracle, DB2 и SQLServer. Надежная РСУБД? НЕТ. Возможно, Dataphor или Rel станут первыми … все остальные не имеют права называться «реляционными»,

Какие возможности из среды, отличной от SQL, вы бы хотели увидеть в SQL?

Моя мечта – однажды увидеть правильную реляционную реализацию … но на данный момент я был бы рад, если бы какая-либо база данных полностью реализовала стандарт SQL (нет)

Предположим, что SQL не существует, что бы вы использовали для управления данными? ..

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

Или, совсем недавно, запросы ODATA (но, к сожалению, ODATA разделяет некоторые недостатки SQL)