Нашёл очень забавную статью на англ. о «проблемах» SQL Server. Кто сможет правильно опровергнуть утверждения автора?
Оригинал: ссылка
Перевод:
1. SQL слишком сложный!
Если у меня есть множество значений в моих столбцах, например «ЯНВАРЬ, ФЕВРАЛЬ, МАРТ» или «15,84,22» , это не волнует SQL Server. Практически невозможно писать операторы SQL для таких таблиц! Если я захочу получить хотя бы какие-нибудь данные, придется написать оператор SELECT из 500 строк!! За каким? И к тому же понадобится божественное вмешательство, чтобы удалить какое-нибудь значение из этих списков. Зачем MS настолько все усложняет?
2. Преобразования типов данных!
Что за фигня с преобразованием данных? Я просто использую VARCHAR для всего, так как это единственный способ избежать тупых сообщений об ошибках при добавлении данных в мои таблицы. Работает отлично, пока мне не требуется получить месяц из даты или сложить два числа — тупой SQL Server заставляет меня сначала использовать функцию convert() для преобразования значений. Что за тупизм? SQL не знает как сложить «12» и «5» — он считает, что получится «125» !!!! И чтобы все еще ухудшить, в половине случаев SQL Server выдает мне ошибки, которые говорят, что он НЕ МОЖЕТ ВЫПОЛНИТЬ ПРЕОБРАЗОВАНИЕ! Блин, если бы я был компьютером, я бы смог до этого допереть.
3. Ёпрст, что с форматированием?
Все мы с этим сталкивались: хочу выровнять по правому краю столбец в своем SELECT’е — этого нельзя сделать, не вспотев! Ни говоря уже о том, чтобы отцентрировать, сделать отступы, вставить номера страниц, или что типа того. К тому же, сплошное мученье — отформатировать даты или округлить числа как я хочу. Я с трудом могу создать нормально выглядящий отчет в Query Analyzer, он выглядит как древние файлы MS-DOS! Может пора уже перейти в 21-й век, и включить какую-нибудь поддержку графики, цвета и шрифтов, эй вы, там, в Microsoft?
4. А что с сортировкой?
В половине случаев мои записи возвращаются БЕСПОРЯДОЧНО! Да, да, они вообще не отсортированы! Это бред. SQL Server должен понимать, что все должно быть отсортировано по имени/фамилии или по дате, без всякого напоминания! Компьютеры вроде бы умные, так ведь? Мои пользователи ненавидят это, потому что им сложно ориентироваться в своих отчетах. Если они жалуются, я просто говорю им, «Блин, если бы вы не были такими скупыми, и у нас был бы Oracle, нам не пришлось бы возиться с этой «особенностью» Microsoft!«И чтобы все еще ухудшить, когда я пытаюсь отсортировать, SQL Server считает, что «Декабрь» идет перед «Январем», или, что «10» меньше «2»! Блин, господин Гейтс, уже не удивляет, что вы никогда не выпускаете свои продукты в срок, так еще и ваши парни не в курсе, как работает календарь!
5. Оператор IN() вообще никогда не работает!
Это меня бесит. Конструкция IN (@Var) никогда не работает правильно! Я никогда не получаю то, что я хочу, даже если @Var точно содержит нормальный список идентификаторов. И вы даже не получите сообщение об ошибке!
6. Ограничения внешних ключей!
По каким-то причинам, в SQL вы можете обновлять или добавлять записи только в одну таблицу за раз! Я могу написать свои обычные FULL OUTER JOIN’ы и сдуреть от SELECT’а, который выполняется весь день, но что на счет того чтобы эта штука работала в UPDATE’ах и INSERT’ах!? Как по-другому сделать ссылочную целостность? Если запись в таблице A должна соответствовать записи в таблице B, то как, черт возьми, мне их запихнуть туда одновременно? По-моему это очень глупо.
7. Первичные ключи не работают!
Я дурею от этого. У меня есть первичный ключ identity под названием «ID» у каждой таблицы, но я все равно получаю дублирующиеся данные! Я должен иметь 20 разных записей для Бобруйска в моей таблице «tblStatesTable»! Тогда в чем смысл первичных ключей? Я надеюсь в следующем сервис-паке это будет исправлено.
8. S-Q-L — Т-О-Р-М-О-З!!!
Почему SQL такой медленный? Например, чтобы найти все данные в моей таблице для Января, я использую WHERE LTRIM(tblTable.tblTable_colMonthList) LIKE ‘%Янв%’ Довольно стандартная конструкция. Но она выполняется ВЕЧНО! А столбец индексирован!! Эй, вы, там, в Micro-тормозе, вообще-то индексы нужны для ускорения!
9. Загадочные сообщения об ошибках!
Значит, я пытаюсь добавить данные в таблицу, и вот что получаю: INSERT statement conflicted with COLUMN FOREIGN KEY constraint ‘FK_Order_Details_Orders’. The conflict occurred in database ‘Northwind’, table ‘Orders’, column ‘OrderID’. The statement has been terminated. Или я пытаюсь написать простой GROUP BY, и получаю вот что: Column ‘orders.OrderID’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Или иногда я делаю обалденные динамические запросы, но они, похоже, не работают, и я получаю: You are not allowed to truncate the system table ‘master..sysobjects’. Ээээй? Может расскажете, что не так, вместо того, чтобы писать длинные непонятные сообщения на языке мумбо-юмбо. Господин, Билл Гейтс, может, стоит потратить немного баксов на то, чтобы в SQL Server не было багов, вместо того, чтобы писать все эти дурацкие сообщения об ошибках! У кого есть время на то, чтобы вникать в эту чушь?
10. Ссылки на таблицы и столбцы!
Это вообще бред. Значит, у нас есть умные компьютеры, так? И у нас есть что-то под названием «переменные», так? В этих переменных мы можем хранить все что угодно, даже названия столбцов и таблиц. Но вот это вообще не работает: Select @TableName.@ColumnName from @TableName И мне понятно, и вам понятно, я не пойму, почему это не понятно SQL Server’у! Как получить данные из таблицы ‘tblCustomerNumber0121’ вместо таблицы ‘tblCustomerNumber0122’, или получить данные из столбца ‘Янв2005’, если я не могу использовать переменные в такой конструкции!? Это надо делать хард-кодом!? Как, черт возьми, я должен писать отчеты с пользовательскими параметрами, если я ограничен заранее определенными названиями таблиц и столбцов!? Ну же, Micro-тупость, что на счет ДЕЙСТВИТЕЛЬНО НУЖНЫХ вещей для программирования в T-SQL, например ПОЛНОЙ поддержки переменных! К тому же на, самом деле, очень тяжело добавлять новые данные в таблицы. INSERT? Он никогда не работал! INSERT не может даже добавить новый столбец в таблицу! Как предполагается добавлять данные для нового месяца, если у меня вообще еще нет этого столбца? Может это, наконец, сделают в SQL Server 2005.
Задание: Опровергнуть все утверждение автора.