Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Sql триггер для перерасчета данных  [new]
Владислав Колосов
Member

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

Таким образом, область применения строго разграничивается. Таблицы и зависимые от них объекты обеспечивают достоверность данных, процедуры - бизнес логику. Мы отделяем слой валидации от прикладного слоя. Сразу ясно, где искать "косяк" и не получите сюрприз в виде триггера, который внезапно обновляет таблицы в других базах.
10 ноя 17, 12:15    [20943042]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Cammomile
Это всё ясно-понятно. Я задал предельно конкретный вопрос.

Для каких задач надо ПРОЕКТИРОВАТЬ ЛОГИКУ на триггерах. Мне бы конкретный пример когда писать что то на уровне Процедур плохо, а на уровне Триггеров хорошо.

Вон Тапак сделал заявку, что ему такие случаи широко известны, но он никому не расскажет...

1. Реализация ограничений, которые выходят или черезмерно усложняют логику на констрейнах(огромный аспект)
2. Реалзация прав, которые значительно шире чем права на представление/таблицу и т/п
3. Реакция системы на события
4. неожиданно DDL триггеры :)
Ну и озвученное логирования(хотя есть и CT, CDC)

В любом случае экспет скажет, что чёта мы можным большую часть реализовывать на хранимках, и мы его благословим
10 ноя 17, 12:17    [20943053]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Я всё еще не вижу аргументации почему лучше.

1. Реализация ограничений, которые выходят или черезмерно усложняют логику на констрейнах(огромный аспект)
Реализуется через хранимые процедуры ровно также,как и через триггеры. Только в отличие от тригеров еще и отлично сопровождается. Заодно можно организовать тонкие и точные настройки прав на всякие части бизнес логики. В том числе путем включения процедур в схемы. Как там схемы для триггеров, завезли ?

2. Реалзация прав, которые значительно шире чем права на представление/таблицу и т/п
Конечно же проще и понятнее через соответсвующие процедуры.

3. Реакция системы на события
Общий набор слов

4. неожиданно DDL триггеры :)
Разговор про бизнес логику, приплел ДДЛ, яснопонятно.

Открытий, как я и ожидал, не произошло...
10 ноя 17, 12:24    [20943107]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
aleksrov
Member

Откуда:
Сообщений: 948
TaPaK
Cammomile
Это всё ясно-понятно. Я задал предельно конкретный вопрос.

Для каких задач надо ПРОЕКТИРОВАТЬ ЛОГИКУ на триггерах. Мне бы конкретный пример когда писать что то на уровне Процедур плохо, а на уровне Триггеров хорошо.

Вон Тапак сделал заявку, что ему такие случаи широко известны, но он никому не расскажет...

1. Реализация ограничений, которые выходят или черезмерно усложняют логику на констрейнах(огромный аспект)
2. Реалзация прав, которые значительно шире чем права на представление/таблицу и т/п
3. Реакция системы на события
4. неожиданно DDL триггеры :)
Ну и озвученное логирования(хотя есть и CT, CDC)

В любом случае экспет скажет, что чёта мы можным большую часть реализовывать на хранимках, и мы его благословим


А CDC кто нибудь реализовывал (вопрос ко всем кто прочтет :) )? Единственный раз где я его видел, это пример в книге по SSIS, где говорилась как с помощью CDC Task выкачивать только те данные что нужно, попробывал, прикольно. Но так и не нашел как это влияет на OLTP нагрузку.
10 ноя 17, 12:26    [20943120]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
И главное, вот заметьте. Я задаю вопрос "где триггер лучше процедуры?", а Тапак мне рассказывает как триггер можно применять. Это выборочная слепота? Отсутствие квалификации?
10 ноя 17, 12:31    [20943157]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Cammomile,

для застудивших уши
автор
A trigger is a special kind of stored procedure

ну и если добавить и закрыть моё присутсвие в теме:
Существуют системы(и речь даже не только о dwh) посторенные на нескольки, многих источниках(и при этом возможно для одного и тогоже же объекта), в том числе и различных dbms и принуждать всех дёргать ваши хранимочки это могут только спецы высшей категории
10 ноя 17, 12:32    [20943161]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Модератор: Cammomile, TaPaK, а вы можете пикироваться более элегантно, что ли. А то срач вытру, а виновных побаню. Спасибо за понимание.
10 ноя 17, 12:48    [20943243]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Cammomile
Я всё еще не вижу аргументации почему лучше.

1. Реализация ограничений, которые выходят или черезмерно усложняют логику на констрейнах(огромный аспект)
Реализуется через хранимые процедуры ровно также,как и через триггеры. Только в отличие от тригеров еще и отлично сопровождается. Заодно можно организовать тонкие и точные настройки прав на всякие части бизнес логики. В том числе путем включения процедур в схемы. Как там схемы для триггеров, завезли ?

2. Реалзация прав, которые значительно шире чем права на представление/таблицу и т/п
Конечно же проще и понятнее через соответсвующие процедуры.

3. Реакция системы на события
Общий набор слов

4. неожиданно DDL триггеры :)
Разговор про бизнес логику, приплел ДДЛ, яснопонятно.

Открытий, как я и ожидал, не произошло...
В ООП есть такое понятие, как инкапсуляция. То есть, любую задачу можно решить без ООП на процедурах, структурах и глобальных переменных. Но, таки классы удобнее. И таки как раз с точки зрения облегчения сопровождения. Таким образом, триггеры похожи на конструкторы/деструкторы.

#Хэш=
10 ноя 17, 13:49    [20943544]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
04cf9f9576a6f15
В ООП есть такое понятие, как инкапсуляция.
То есть, любую задачу можно решить без ООП на процедурах, структурах и глобальных переменных.
Но, таки классы удобнее.
И таки как раз с точки зрения облегчения сопровождения.
Таким образом, триггеры похожи на конструкторы/деструкторы.

т.е. по-вашему, триггеры облегчают сопровождение?
а подтверждение-то какое-то будет, или это "IMHO"?
10 ноя 17, 13:53    [20943554]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
вон в соседней теме товарищ пытается определить,
что же пишет в его таблицу.
не подскажете ему, как быстренько найти, что именно туда пишет?
особенно интересует, как искать какой-нибудь триггер вообще не из этой базы
и даже с другого сервера, который туда пишет
10 ноя 17, 13:58    [20943587]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Yasha123
04cf9f9576a6f15
В ООП есть такое понятие, как инкапсуляция.
То есть, любую задачу можно решить без ООП на процедурах, структурах и глобальных переменных.
Но, таки классы удобнее.
И таки как раз с точки зрения облегчения сопровождения.
Таким образом, триггеры похожи на конструкторы/деструкторы.

т.е. по-вашему, триггеры облегчают сопровождение?
а подтверждение-то какое-то будет, или это "IMHO"?
Чего тут подтверждать-то?
Триггер - это самое узкое место программы, которое всегда выполняется при вставке,
удалении, изменении (в зависимости от привязки к событию).
А вот процедуру могут вызвать, а могут и не вызвать. Могут даже не подозревать о её существовании.
10 ноя 17, 14:00    [20943599]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
iap
. Могут даже не подозревать о её существовании.

Разработчик вашего клиента к бд знает ровно о том, о чем вы ему сказали. А о триггерах он как раз ни знать ни думать не должен.

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

А вот когда какой-нибудь вебщик честно отсылает вам 100500, а его пользователь в вебморде вместо 100500 видит 300200? И этот пользователь ачинает писать тикеты в поддержку. Вебщик начинает бегать кругами и дебажить свою приладу. Он ведь не знает, и не должен знать, что у вас есть какой-то там тригер на апдейте.
10 ноя 17, 14:14    [20943668]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
iap
Триггер - это самое узкое место программы, которое всегда выполняется при вставке,

даже так?
триггер у вас в программе?
а у некоторых на другом сервере, о котором вы ничего не знаете.
и доступа к нему у вас нет.
зато у него есть,
и при вставке в некую неведомую вам таблицу на совсем другом сервере
этот триггер пишет в вашу таблицу,
о которой вы всегда думали, что знаете о ней все
10 ноя 17, 14:50    [20943892]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Yasha123
даже так?
триггер у вас в программе?
Весь SQL Server - это программа. Не знали?
И текст SQL запроса, и текст триггера - тоже программа. Как-то так...
10 ноя 17, 14:53    [20943903]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
iap,
автор
Чего тут подтверждать-то?
Триггер - это самое узкое место программы, которое всегда выполняется при вставке,
удалении, изменении (в зависимости от привязки к событию).
А вот процедуру могут вызвать, а могут и не вызвать. Могут даже не подозревать о её существовании.

кроме того, приходят еноты и начинают строчить свои процедуры со своими бизнес правилами, в итоге налетает ворох этих хранимок и понимание откуда же такой сброд и как его ловить(в соседних темах страдальцы:)). + не самое прозрачное место определения этого вороха хранимок которые что-то меняют в объекте и встать и сказать что мы обработали новые бизнес правила никто уже так смело не может. Хотя в общем основные спецы сидят на готовых решениях десятки лет максимум подпирают их
10 ноя 17, 14:55    [20943913]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Я все еще не понял, почему делать ворох хранимок для бузнесс логики и поддержания целостности данных это плохо, а делать триггеры это лучше?
Разгребать ворох непонятных триггеров еще более стремная задача чем ворох процедурок.

Сложную вложенность процедур, на худой конец, можно раскрутить через sys.sql_dependencies.

Как распутывать ворох триггеров, кроме как тыкать в ручную, я не представляю...
10 ноя 17, 15:11    [20943962]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
iap
Yasha123
даже так?
триггер у вас в программе?
Весь SQL Server - это программа. Не знали?

т.е. "триггер в программе" означает запись вашего триггера в программу "SQL Server"?
каждый день меняется на лету код программы SQL Server?
бред какой-то пятничный.
10 ноя 17, 15:12    [20943966]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Cammomile
Я все еще не понял, почему делать ворох хранимок для бузнесс логики и поддержания целостности данных это плохо, а делать триггеры это лучше?
Разгребать ворох непонятных триггеров еще более стремная задача чем ворох процедурок.

Сложную вложенность процедур, на худой конец, можно раскрутить через sys.sql_dependencies.

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

получить ворох триггеров, сможет даже такой мышко-программист как вы, а получить хранимки которые меняют объект эта афигенно веселее, я даже готов увидеть ваш скрипт, на зависимости который отдаст мне вставку, а не миллин хранимок для отчётов, расчётов абсолютно других объъектов и т.д.
10 ноя 17, 15:14    [20943982]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
TaPaK
Cammomile
Я все еще не понял, почему делать ворох хранимок для бузнесс логики и поддержания целостности данных это плохо, а делать триггеры это лучше?
Разгребать ворох непонятных триггеров еще более стремная задача чем ворох процедурок.

Сложную вложенность процедур, на худой конец, можно раскрутить через sys.sql_dependencies.

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

получить ворох триггеров, сможет даже такой мышко-программист как вы, а получить хранимки которые меняют объект эта афигенно веселее, я даже готов увидеть ваш скрипт, на зависимости который отдаст мне вставку, а не миллин хранимок для отчётов, расчётов абсолютно других объъектов и т.д.
INSERT, DELETE, UPDATE можно послать на сервер и без всякой процедуры.
Yasha123
т.е. "триггер в программе" означает запись вашего триггера в программу "SQL Server"?
каждый день меняется на лету код программы SQL Server?
бред какой-то пятничный.
Самокритично.
Сам бред пишет - сам и оценивает.
Ещё и sql_dependencies приплёл.
10 ноя 17, 15:19    [20944008]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
автор
INSERT, DELETE, UPDATE можно послать на сервер и без всякой процедуры.

Угу, и упереться в отсутствие полномочий на эти операции. Потому, что архитектор перед написанием подумал головой. ;-)
10 ноя 17, 15:21    [20944019]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
iap,

автор
INSERT, DELETE, UPDATE можно послать на сервер и без всякой процедуры.

И да, когда прибегает Маруся из бухгалтерии к каммомилю, с криком, надо проапдейтить, сей благородный муж гордо туторящий новичков, лупит её требования без зазрения совести и мозгов. Или затуторенные новички начинают лупить свои инсёрты в базу :)
ps тему надо закрывать :)
10 ноя 17, 15:24    [20944031]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Тётю Марусю направляют к человеку, с полномочиями и знаниями, и он мимо этих вот процедурок делает необходимые апдейты/инсерты/делиты, потому, что понимает что к чему.


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

Что ТЫ будешь делать, когда массовые изменения данных необходимо провести мимо триггера? Отключишь триггер и выкинешь с базы всех пользователей, пока реализуется хотелка Тёти Маруси Из Бухгалтерии?
10 ноя 17, 16:06    [20944207]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Cammomile
Тётю Марусю направляют к человеку, с полномочиями и знаниями, и он мимо этих вот процедурок делает необходимые апдейты/инсерты/делиты, потому, что понимает что к чему.


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

Что ТЫ будешь делать, когда массовые изменения данных необходимо провести мимо триггера? Отключишь триггер и выкинешь с базы всех пользователей, пока реализуется хотелка Тёти Маруси Из Бухгалтерии?

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

ps. В рамках сопровождения я могу сообщить(если не читали документацию), что если поднять определённый флаг в сессии, то бизнес логика в наших триггерах будет не учтена, это будут обычные операции.
10 ноя 17, 16:16    [20944244]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Т.е. ты предлагаешь кодить триггеры так, чтоб они обрабатывали контекст инфо?
Все, я вопросов к докладчику более не имею...
10 ноя 17, 16:21    [20944277]     Ответить | Цитировать Сообщить модератору
 Re: Sql триггер для перерасчета данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Cammomile
Т.е. ты предлагаешь кодить триггеры так, чтоб они обрабатывали контекст инфо?
Все, я вопросов к докладчику более не имею...

камомиля, есть абсолютно простые инструкции ака IF EXISTS('tempdb..#table') GOTO

но вы то нам покажете как же найти ваши хранимки изменяющие объекты? так ведь?
10 ноя 17, 16:25    [20944291]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить