metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-03 01:06 am

В Советской Белоруссии SQL разжигает айседа

http://theiced.livejournal.com/238346.html
Собственно, про кобол я не знаю, на дельфи пишу уже 15 лет и никак избавится от него не могу (слишком много легаси кода), а вот про SQL я с ним не согласен.
Сам по себе SQL очень хорошо подходит для генерации отчетов. Если отчет сводится к фильтрации-сортировке-группировке множеств - идеально. С рекурсивными CTE - еще и деревья можно обрабатывать, не особо включая мозг. Всунув поверх этого минимальных размеров постобработку на какой-нибудь функциональщине, можно сделать почти любой отчет, пришедший в голову свихнувшимся на Excel выпускникам нархоза, работающим в минстате, минфине и МНС.

Но когда доходит до процедурных расширений, API между СУБД и клиентскими приложениями или каких-нибудь вещей, которые забыли вовремя добавить в стандарт - начинается полная, немыслимая жопа.
Например, проклятая тема - генерация автоинкрементных ключей и возвращение значений автоматически заполненных полей. Кто во что горазд - identity, генераторы, sequence, функции (в каждой СУБД названные по разному), returning, заебы на тему "вызывать в той же транзакции и сессии" и прочая и прочая. Про вариации на тему "вернуть поле, которое заполняется автоматически, но не является ключом/identity" лучше даже не думать.
Неудивительно, что люди при первой же возможности сбегают в ORM (которые являются уже второй производной от всего этого маразма и несут на себе его неизгладимый след).

[identity profile] vit-r.livejournal.com 2013-04-03 07:49 am (UTC)(link)
Хороший ЯП/DSL/что-там-ещё может получиться исключительно в случае когда он спроектирован реальными программистами для реальных программистов.
Хорошим ЯП/DSL/чем-то-ещё считаем такой инструмент, который нужен программистам чтобы писать программы для программистов.

По сути, SQL - язык элементарных запросов. Все данные для неэлементарных запросов должны быть подготовлены в базе данных в том виде, чтобы они получались элементарными запросами. На этом DWH сейчас и поднимается.

[identity profile] theiced.livejournal.com 2013-04-03 07:51 am (UTC)(link)
невсегда возможно ;]

[identity profile] vit-r.livejournal.com 2013-04-03 08:23 am (UTC)(link)
То, что невозможно, требует других решений. И, скорее всего, оно и не нужно.

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

[identity profile] guamoka.livejournal.com 2013-04-03 09:31 am (UTC)(link)
Все данные для неэлементарных запросов должны быть подготовлены в базе данных в том виде, чтобы они получались элементарными запросами. На этом DWH сейчас и поднимается.

А подготавливаются они в DWH (помимо всего прочего) не тем же SQL?

[identity profile] vit-r.livejournal.com 2013-04-03 09:39 am (UTC)(link)
Это уже монописуально. Можно выкачивать данные из таблиц в Экселе, обрабатывать в Яве и уже так складывать в базу данных.

[identity profile] guamoka.livejournal.com 2013-04-03 09:49 am (UTC)(link)
Можно по-разному, можно и через мессеж кью закачивать. Просто количество работы как бы не уменьшается. Всё равно кто-то должен (возможно, что и постоянно) проделывать это. И что при этом будет задействован тот же SQL шансы тоже не нулевые.
А так- да. Проблемы производительности лучше решать один раз и за счёт структуры, а не хитрых запросов и хинтования.