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] fraks-nsk.livejournal.com 2013-04-03 04:04 pm (UTC)(link)
Про блокировки транзакциями - почитайте про оптимистические и пессимистические блокировки
http://ibase.ru/devinfo/plocks.htm

Блокировка НЕ транзакцией - например если сервер не поддерживает транзакции. Или если надо блокировать на длительное время что транзакцией делать крайне нежелательно - тогда флагами, таблицами со списком блокировок, отдельным приложением которое ведет списки блокированных объектов... мало ли чего можно придумать.
Вот атомарность транзакции или ее свойство Repeatable Read никаким другим механизмом не заменишь. А блокировку в принципе можно.

[identity profile] norguhtar.livejournal.com 2013-04-03 04:20 pm (UTC)(link)
Я вообще в курсе что такое блокировки. И да все серверы РСУБД в данный момент так или иначе поддерживают транзакции. А то что вы описываете это не блокировка на уровне РСУБД это логическая блокировка.

[identity profile] fraks-nsk.livejournal.com 2013-04-03 04:31 pm (UTC)(link)
Так я про то и говорю что для реализации уверенности в актуальности имеющихся данных не обязательно пользоваться средствами блокировки на уровне СУБД.

[identity profile] norguhtar.livejournal.com 2013-04-03 05:29 pm (UTC)(link)
Вообще при использовании РСУБД обязательно. Так-как даже если вы их не используете транзакции никуда не деваются.

[identity profile] fraks-nsk.livejournal.com 2013-04-03 05:47 pm (UTC)(link)
Объясните мне еще про транзакции, я про них первый раз слышу.

[identity profile] norguhtar.livejournal.com 2013-04-04 02:28 am (UTC)(link)
Шли бы вы почитали вот этот вот курс http://citforum.ru/database/osbd/contents.shtml
А то специальные формы, данные изменяются на сервере.

[identity profile] fraks-nsk.livejournal.com 2013-04-04 02:48 am (UTC)(link)
Сарказм был не виден?

[identity profile] norguhtar.livejournal.com 2013-04-04 03:09 am (UTC)(link)
Увы нет. Пока вы мне рассказываете про специальные некешируемые формы его не видно.