Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бизнес логика в хранимых процедурах... 
:(
    Опции темы
emchenko
Дата 15.3.2003, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.3.2003

Репутация: нет
Всего: нет



Интересно поговорить о достоинствах и недостатках такой организации. На сколько мне известно, вещь достаточно распространенная, тем более что на этом форуме уже не раз обсуждали такой подход... Господа, как вам кажеться, это удачное решение для крупной системы?
PM MAIL   Вверх
Vit
Дата 15.3.2003, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Это необходимое решение для крупной системы. Другого просто нет.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 15.3.2003, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



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

Т.е. просто песня какая-то biggrin.gif

PM MAIL WWW ICQ   Вверх
Vit
Дата 15.3.2003, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Бог с ним с гибкостью и скоростью, только этот способ даёт возможность достичь достаточного уровня защиты данных


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 15.3.2003, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
Бог с ним с гибкостью и скоростью, только этот способ даёт возможность достичь достаточного уровня защиты данных


И это тоже. Просто я испытал и гибкость. Вообщем все круто biggrin.gif
И однозначно такой подход должен быть использован.
PM MAIL WWW ICQ   Вверх
Medved
Дата 16.3.2003, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Да - это всеми признанный способ, но не все всегда его придерживаються. Почему? Потому что это занимает гораздо больше времени, чем при топорном подходе.

Я сам предпочитаю использовать только такую архитектуру доступа к БД, и не раз говорил себе спасибо за это. Но в нескольких крупных проектах, наши менеджеры одобрили именно такую (топорную) схему, в связи с тем, что не было достаточно времени на разработку, а результат требовался всего лишь через три месяца. Хотя по всем правилам - на разработку этого софта требовалось около 8-9 месяцев, и то, по приблизительным расчетам.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
emchenko
Дата 17.3.2003, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.3.2003

Репутация: нет
Всего: нет



Спасибо огромное за то что поддержали тему!
1. Гибкость.
Многим менеджерам необходимы отчеты структура которых заранее не определена (типа OLAP). Как это решается хранимыми процедурами?
Количетво процедур многократно превышает количество таблиц. Что делать при изменение логики работы? Менять половину серверной части ради незначительных новшеств? (уже не говоря о переходе на новую версию платформы, где вызовы некоторых системных процедур могут не поддерживаться)
2. Скорость.
На серверной части описывать обработки не очень-то удобно. Иногда приходиться создавать кучу временных таблиц для выполнения простых операций. В подавляющем большенстве случаев безусловно хранимые процедуры быстрее, но иногда из-за ограниченности языка приходиться воротить...
3. Доступ.
Пермишенов достаточно далеко не всегда. Иногда нужно внутри процедуры производить проверку специфических прав пользователей. При изменение этих прав пиходиться производить изменения в тексте процедур, а так как процедур много то задача не простая...

Возможно я глубоко заблуждаюсь, но проблемы мне кажуться очевидными... Есть ли эффективные методики для развития таких проектов?
PM MAIL   Вверх
Guest
Дата 17.3.2003, 19:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
1. Гибкость.
Многим менеджерам необходимы отчеты структура которых заранее не определена (типа OLAP). Как это решается хранимыми процедурами?
Количетво процедур многократно превышает количество таблиц. Что делать при изменение логики работы? Менять половину серверной части ради незначительных новшеств? (уже не говоря о переходе на новую версию платформы, где вызовы некоторых системных процедур могут не поддерживаться)


Если говорит об OLAP, то я не встречал менеджеров, которые умели бы по таблицам получать данные - в подавляющем большинстве случаев никто из них не знает структуру таблиц и поэтому все запросы все равно идут к программисту. А программист пишет просто еще одну процедуру.
Если речь идет о смене SQL-сервера, то я на Oracle и MS SQL не испытал огромных перемен при смене версий - практически все функции остались. Если же предполагается использовать SQL-сервера разных фирм, тогда надо думать об организации трех уровней
1. Клиент
2. Бизнас-логика (на Delphi, C++, VB, JAVA)
3. Хранилище данных (только тупые таблицы, никакой логики - SELECT, INSERT, UPDATE, DELETE)

Цитата
2. Скорость.
На серверной части описывать обработки не очень-то удобно. Иногда приходиться создавать кучу временных таблиц для выполнения простых операций. В подавляющем большенстве случаев безусловно хранимые процедуры быстрее, но иногда из-за ограниченности языка приходиться воротить...


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

Цитата
3. Доступ.
Пермишенов достаточно далеко не всегда. Иногда нужно внутри процедуры производить проверку специфических прав пользователей. При изменение этих прав пиходиться производить изменения в тексте процедур, а так как процедур много то задача не простая...


Но она становится возможной - в случае, если права даются ТОЛЬКО в виде доступа к таблицам это просто иногда не решается никак. Механизм VIEW тоже ограничен в этом вопросе. Да и тогда редактирования тоже не избежать.
Кроме этого я для себя разработал достаточно удобную архитектуру доступа практически к любым объектам базы данных и это требует не очень большого количества переделок. Уверен, что это не единственный существующий способ.
Понятно, что если доступ меняется сразу ко многим объектам, то работы много. Но еще раз повторюсь - подход работы через процедуры дает возможность это сделать проще. А иногда это просто единственный способ при котором можно что-то сделать.

  Вверх
Guest_AntonSaburov
Дата 17.3.2003, 19:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Что-то регистрация отвалилась
  Вверх
Vyacheslav
Дата 17.3.2003, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 59



По моему личному мнению - бизнес-логика, зашитая в хранимые процедуры, может быть использована только при отсутствии времени на детальную проработку и при полной уверенности, что смены платформы не предвидится. SQL - это не процедурный язык, и решение типа Transact-SQL является лишь компромисом. (Про PL/SQL - не упоминаю, не работал). Наилучшее решение: применение многозвенной архитектуры СУБД <-> Сервер приложений <->Клиент(тонкий). С учетом того, что возможно связывание СУБД и Сервера приложений высокоскоростным доступом или, в крайнем случае (если мощности позволяют), размещение их физически на одном сервере, возражения , что в этом случае снижается производительность, считаю мало обоснованными. Весь вопрос заключается в увеличении сложности разработки подобной системы. Хотя при использовании не самопальных, а промышленных серверов приложений и этот вопрос решается достаточно комфортно.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
emchenko
Дата 17.3.2003, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.3.2003

Репутация: нет
Всего: нет



Цитата
Если говорить об OLAP, то я не встречал менеджеров, которые умели бы по таблицам получать данные - в подавляющем большинстве случаев никто из них не знает структуру таблиц и поэтому все запросы все равно идут к программисту.

Многи финансовые аналитики (особенно молодые) которых я знаю с успехом используют запросы в Access для получения отчетов и имеют неплохое представление о структуре данных. Более того есть замечательные средства типа Decision Cube (Borland Delphi) которые могут избавить программиста от клепания несчетного количества процедур (большая часть из которых становиться не актуальна уже к моменту появления работающей версии) или от необходимости отказывать заказчику.
Vyacheslav, полностью согласен с Вами. С огромным удовольствием обсудил бы проблемы и методики реализации такого подхода в отдельной теме...
Цитата
Кроме этого я для себя разработал достаточно удобную архитектуру доступа практически к любым объектам базы данных и это требует не очень большого количества переделок. Уверен, что это не единственный существующий способ

Если вам не сложно, расскажите подробнее. Я в поисках подобного решения...
PM MAIL   Вверх
Vit
Дата 18.3.2003, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(emchenko @ 17.3.2003, 09:08)
Спасибо огромное за то что поддержали тему!
1. Гибкость.
Многим менеджерам необходимы отчеты структура которых заранее не определена (типа OLAP). Как это решается хранимыми процедурами?
Количетво процедур многократно превышает количество таблиц. Что делать при изменение логики работы? Менять половину серверной части ради незначительных новшеств? (уже не говоря о переходе на новую версию платформы, где вызовы некоторых системных процедур могут не поддерживаться)
2. Скорость.
На серверной части описывать обработки не очень-то удобно. Иногда приходиться создавать кучу временных таблиц для выполнения простых операций. В подавляющем большенстве случаев безусловно хранимые процедуры быстрее, но иногда из-за ограниченности языка приходиться воротить...
3. Доступ.
Пермишенов достаточно далеко не всегда. Иногда нужно внутри процедуры производить проверку специфических прав пользователей. При изменение этих прав пиходиться производить изменения в тексте процедур, а так как процедур много то задача не простая...

Возможно я глубоко заблуждаюсь, но проблемы мне кажуться очевидными... Есть ли эффективные методики для развития таких проектов?

1) C Репортингом действительно проблемы, хороший репортинг на процедурах не сделаешь, для серьёзной работы надо делать репорт-сервер, или что-то ещё

2) Ну так и делайте временные таблицы, просто доступ из вне остаётся через SP...

3) Да, не всё так просто, но хочу заметить что работа через SP еднственно возможный способ сделать нормальное разграничение доступа пользователям к базе данных, другого просто нет!

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

Проблема доработок всё равно остаётся - как ни делай, а практика показывает, что всё равно прийдётся менять и клиента, и сервер и добавлять поля, таблицы, view, sp - как бы продуманна система ни была, и чем больше система, тем большее количество "слоёв" прийдётся менять даже при небольших доделках...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 19.3.2003, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 59



Цитата

3) Да, не всё так просто, но хочу заметить что работа через SP еднственно возможный способ сделать нормальное разграничение доступа пользователям к базе данных, другого просто нет!

Наоборот через сервер приложений это делается эффективней и гибче. В результате у нас доступ регламентируется не только на таблицу и поле, но и на запись, т.е реализована контекстуальная защита.

Цитата

Проблема доработок всё равно остаётся - как ни делай, а практика показывает, что всё равно прийдётся менять и клиента, и сервер и добавлять поля, таблицы, view, sp - как бы продуманна система ни была, и чем больше система, тем большее количество "слоёв" прийдётся менять даже при небольших доделках...

Не совсем. При использовании промежуточного слоя смена платформы (если конечно граничиться чистым SQL, что вполне возможно) не заденет клиентской части и переработка серверного ядра будет незначительной и чисто формальной.
Имеется возможность и уменьшить эффект при модификации БД. У нас объектно-ориентированный подход наложен на реляционную систему хранения данных. В этом случае при использовании сервера приложений, иногда вообще удается обойтись при добавлении полей без внесения изменений в программу


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 20.3.2003, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
Наоборот через сервер приложений это делается эффективней и гибче. В результате у нас доступ регламентируется не только на таблицу и поле, но и на запись, т.е реализована контекстуальная защита.


Насколько я понимаю вопрос, обсуждается именно архитектура клиент-SQLсервер.
И вот для такого случая SP для разграничения полномочий вещь особо ценная.

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

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.