ФорумРазработкаБазы данных → Бизнес-логика в БД (процедура и/или триггер)

Бизнес-логика в БД (процедура и/или триггер)

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 7:09

    Доброго.

    Имеем БД. С кучкой приложений.
    Бизнес-логику запихиваем по максимуму в БД (триггеры/процедуры и т.д. и.т.п.) Дабы никто корявыми руками не поверг данные в Хаос.
    Используем свою систему разграничений прав на записи.
    Просмотр данных - через view (чтобы спрятать не положенные юзеру записи)
    Изменения - через процедуры.

    И тут вопрос … как органично распределить код между триггерами и процедурами.
    Куда что?

    В процедуры только контроль доступа, а в триггеры ссылочную целостность и корректность данных.

    Или уйти от триггеров? (всё одно изменения в процедурах проходят. В них и следить толком, что и куда меняем)

    Или обернуть update/insert в процедуры, а проверки убрать в триггеры?

    Где она - золотая середина?
  • adw0rd

    Сообщения: 22943 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 7:25, спустя 15 минут 46 секунд

    Не могу особо ничего посоветовать, не мой принцип.
    Объясните и по возможности убедите что это удобно - может и порассуждаем.
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 7:41, спустя 16 минут 18 секунд

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

    в другом случае имхо на пхп все это разделять куда удобнее, ведь ТСКЛ как бы не для этого)
    Сапожник без сапог
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 8:33, спустя 51 минуту 38 секунд

    Имеем БД.
    С ней работают несколько разных клиентских приложений. (в том числе и тонкий клиент через WEB)

    Дабы в каждом из не напрягаться реализацией бизн.-логики - всю её запихиваем в БД.
    Теперь, даже, подключившись простым менеджером БД … юзер не сможет натворить там делов - только в пределах дозволенного.

    При обновлениях в бизн-логике/структуре и т.п. в большинстве случаев не нужно пересобирать все клиентские приложения.

  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 8:54, спустя 20 минут 51 секунду

    Я вообще про такой подход слышал больше относительно ASP. И судя по объяснениям, я понял, что таким макаром гибкость приложения страдает + появляется зависимость от конкретных разработчиков. Я сильно ошибаюсь?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 8:54, спустя 16 секунд


    Имеем БД.
    С ней работают несколько разных клиентских приложений. (в том числе и тонкий клиент через WEB)

    Дабы в каждом из не напрягаться реализацией бизн.-логики - всю её запихиваем в БД.
    Теперь, даже, подключившись простым менеджером БД … юзер не сможет натворить там делов - только в пределах дозволенного.

    При обновлениях в бизн-логике/структуре и т.п. в большинстве случаев не нужно пересобирать все клиентские приложения.


    круто. так и надо в расширяемых сайтах, жаль что так не делают в 95% ситуаций
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 8:55, спустя 30 секунд


    Я вообще про такой подход слышал больше относительно ASP. И судя по объяснениям, я понял, что таким макаром гибкость приложения страдает + появляется зависимость от конкретных разработчиков. Я сильно ошибаюсь?
    сильно. хотя тут больше зависит от реализации + от требований системы
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 8:57, спустя 2 минуты 43 секунды

    это как раз из серии рассуждений модель контроллер и тп.

    так вот модель она вся в бд лежит, ты

    $news = new News();
    while($item = $news->getItem())
    {
    echo …
    }

    мы получаем нечто
    $items = $db->exec("News_getItem");
    while($item = $item->fetch())
    {
    echo …
    }

    и вот второй то вариант уже становится независимым от языка реализации, то есть что на пхп это так, что на асп, что на перле, что на си. хоть на чем
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 9:04, спустя 6 минут 44 секунды

    Немного понял, спасибо. Но все равно что-то не вдупляю пока до конца. Ну и хер пока на него :)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 9:08, спустя 4 минуты


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

    вот представляешь если бы в 1с все было в процедурах?
    тогда из пхп было бы легко

    $items = $db->exec("GetSkladOstatki",$now); и никакой ебли с ксв и тп
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 9:12, спустя 3 минуты 35 секунд

    helldude, если бы 1С было бы с процедурами, то тут точно можно бы было йопнутсо, та как там и без онных хватает пиздеца )))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 9:13, спустя 1 минуту 45 секунд


    helldude, если бы 1С было бы с процедурами, то тут точно можно бы было йопнутсо, та как там и без онных хватает пиздеца )))
    ты не понял фишки, если бы это было все процедуры, то пизздеца небыло бы при переносе логики, ат оя посмотрел в функцию формирования остатков и понял что проще 1с покурить мануалы, чем попробовать на пхп это повторить ))))
    Сапожник без сапог
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 9:50, спустя 36 минут 16 секунд



    Немного понял, спасибо. Но все равно что-то не вдупляю пока до конца. Ну и хер пока на него :)
    ты просто не писал приложения, которые необходимо реализовать больше чем на одном языке программирования видимо))
    ….

    Сложно пример придумать…
    Имеем две таблицы "гулянка" и "участники гулянки".
    Гулянка может иметь статусы "набор окончен", "деньги собраны" и т.д.
    Учтите … с этими таблицами работают различные приложения …
    и Вася Пупкин, который подключился к базе напрямую и добавил себя в участники гулянки, когда на ней статус висел "Деньга собрана".
    И началось … стаканов не хватает, тапочек тоже … все трезвые домой пошли.

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

    helldude, тут не сильно и важно к-во языков реализации … тут кайф, что всё переделывать не нужно :-)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 9:51, спустя 1 минуту 46 секунд




    Немного понял, спасибо. Но все равно что-то не вдупляю пока до конца. Ну и хер пока на него :)
    ты просто не писал приложения, которые необходимо реализовать больше чем на одном языке программирования видимо))
    ….

    Сложно пример придумать…
    Имеем две таблицы "гулянка" и "участники гулянки".
    Гулянка может иметь статусы "набор окончен", "деньги собраны" и т.д.
    Учтите … с этими таблицами работают различные приложения …
    и Вася Пупкин, который подключился к базе напрямую и добавил себя в участники гулянки, когда на ней статус висел "Деньга собрана".
    И началось … стаканов не хватает, тапочек тоже … все трезвые домой пошли.

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

    helldude, тут не сильно и важно к-во языков реализации … тут кайф, что всё переделывать не нужно :-)

    нехуй васе пупкину давать права на бд в любом виде.
    Сапожник без сапог
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 21 мая 2009 г. 9:35, спустя 5 дней 23 часа 43 минуты

    А как мне тогда Васю в Базу пускать? Логин его и пароль тоже … шо ж я с ним поделать смогу?!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!