|
|
su.dbms- SU.DBMS ---------------------------------------------------------------------- From : Victor Metelitsa 2:5020/400 14 Jan 2002 18:19:24 To : All Subject : в чем зло хранимых проце дур? --------------------------------------------------------------------------------
Во-первых, я считаю их злом из "педагогических" соображений. Реляционка
- это ведь про множества записей и операции над множествами? А некие
товарищи (не буду говорить, кто... ! да я даже в книжке по Oracle
примеры такого кода видел, якобы учебного) обращаются с реляционкой, как
с Клиппером, даже когда убогие возможности "их" SQL позволяют без этого
обойтись. Рекорд (в моих глазах) поставил некий крутой спец по ораклу,
который и количество записей в выборке так считает - открыл курсор,
обнулил счетчик, и вперед по записям, накручивая счетчик!
Во-вторых, всякие сложные вычисления. Здесь - вопрос веры. Я верю, что
немыслимо закрученные UPDATE и т.п. (изредка демонстрируемые мне) - это
всего лишь результат неправильной постановки задачи. Доказать я это не
могу, потому что для этого придется в каждую задачу вникать, а это
немыслимо. Hо я в это верю. Когда-то я в SU.DBMS.SQL продемонстрировал
DB2-шный запрос немыслимой величины, а Румянцев по этому или подобному
поводу сказал, что это результат плохой схемы данных. Когда я
познакомился с TOPLink'ом и ее (схему) переосмыслил, я понял/решил, что
он был прав.
Контрпример из IBM-овской поставки - нахождение медианы выборки.
Действительно, нет способа ее вычислить, кроме как просканировать
выборку до середины, и не тянуть же ее на клиента? Hо - кому она нужна,
медиана?
Третье - построение изощренных схем проверок бизнес-правил и секьюрити.
Hо SP для этого не обязательны (на DB2, понятно).
Четвертое - псевдо-ОО-подход, инкапсуляция etc. У меня к этому
отношение, как к тому же псевдо-ОО на plain C. Там теоретически тоже
можно этим заниматься, делать объекты через структуры и указатели на
функции, только ведь это чудовищное уродство. А в случае СУБД - в десять
раз уродливее. Чем брать суррогат, не лучше ли взять натуральный продукт?
Пятое - раздувание кода. Если программёрам платят построчно, это для них
достоинство, но...
***
"правильный подход по ВВМ".
Я предпочитаю минимизировать усилия. Скажем, для настройки СУБД или
создания индексов для запросов я прибегаю к "визардам".
Hо, как правило, и SQL-запросов не пишу. Я когда-то приводил примеры
работы с TOPLink'ом, приведу еще. Hапример, пусть объект employee имеет
атрибут
lname со значением 'Иванов', session - коннект с базой данных.
"1" session beginUnitOfWork.
"2" session registerObject: employee.
"3" employee lname: 'Петров'.
"4" session beginUnitOfWork.
"5" session registerObject: employee.
"6" employee lname: 'Сидоров'.
"7" session rollbackUnitOfWork.
"8" session commitUnitOfWork.
Пример демонстрирует вложенные транзакции. В двойных кавычках -
комментарий (я перенумеровал строки для наглядности). После
registerObject: система отслеживает изменения. Когда в 7-й строке
произошел rollback, фамилия сотрудника автоматически вернулась к
прежнему значению ('Петров'), присвоенному в 3-й строке. Когда в 8-й
строке произошел commitUnitOfWork, если эта единица работы не заключена
в какую-то другую, TOPLink сгенерировал SQL-выражение (наподобие UPDATE
EMPLOYEE SET lname='Петров' WHERE employeeId=что-то-там) и выполнил его,
затем COMMIT. TOPLink имеет много возможностей и умеет генерировать
очень сложные запросы, а также берет на себя заботу об identity-полях
(причем эмулируя их там, где их нет).
Hа SP так просто не получится (мягко говоря).
Далее,
у меня такой код зашит в клиентских программах, их обновления
автоматически доставляются на рабочее место (а можно было использовать
shared resource), так что рассинхронизации нет. Более правильно было бы,
чтобы такой код был загружен в единственном экземпляре, т.е. трехзвенка;
а если application server расположен, скажем, там же, где и
SQL-сервер, то и медианы можно было бы находить без напряга, сетевого
трафика нет; увы, у меня пока не так. Еще лучше было бы выкинуть
SQL-сервер на помойку и пользоваться чистым GemStone/S, но это слишком
дорого (особенно, учитывая, что спиратить его, в отличие от
DB2/Oracle/etc, практически невозможно).
--
Отправлено через сервер Talk.Ru - http://www.talk.ru
--- ifmail v.2.15dev5
* Origin: Talk.Ru (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms/53640ffd1573.html, оценка из 5, голосов 10
|