Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 что выбрать для констрейнта - check или trigger?  [new]
alneo
Member

Откуда: USSR
Сообщений: 1056
нужно создать сложную проверку ввода данных в таблицу (на основе запросов, в том чиле к дургим таблицам).
проверка должна быть на вставку и апдейт записей, от есть подходит как триггер так и check, логику опишу в функции.
какой вариант предпочесть с точки зрения производительности (или на какие аспекты а плане производительности может повлиять)?
7 янв 15, 12:40    [17091545]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
UInt64
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 26
alneo,

Если хотите, чтобы всё нормально работало (с вашей супер-сложной логикой), то реализуйте ввод данных с помощью хранимых процедур. Ну а если хотите подурачиться, то можно и через триггер.
7 янв 15, 12:57    [17091563]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
alneo
нужно создать сложную проверку ввода данных в таблицу (на основе запросов, в том чиле к дургим таблицам).
проверка должна быть на вставку и апдейт записей, от есть подходит как триггер так и check, логику опишу в функции.
какой вариант предпочесть с точки зрения производительности (или на какие аспекты а плане производительности может повлиять)?
Триггер будет быстрее работать. Функция вызывается для каждой записи, а триггер для всего изменяемого множества.
7 янв 15, 13:21    [17091593]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
alexeyvg,

Только автор хочет логику проверки воткнуть в функции.
Видать болен code first.
7 янв 15, 14:12    [17091664]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Ken@t
Только автор хочет логику проверки воткнуть в функции.
Наверное, имеется в виду, что в случае триггера логику писать непосредственно в нём, а не вызывать в цикле функцию?

Если в триггере использовать функцию, то, конечно, лучше констрейн - будет такой же отстой, но хотя бы будет меньше объектов в системе, и меньше потенциальных мест для совершения ошибок.
7 янв 15, 14:55    [17091747]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
SERG1257
Member

Откуда:
Сообщений: 2828
Еще одно маленькое замечание:
триггер можно отключить, вставить плохие записи и включить вновь.
С check такого не получится, оно просто не включится.
7 янв 15, 17:04    [17091970]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
SERG1257
С check такого не получится, оно просто не включится.
С опцией with nocheck включится.
7 янв 15, 18:02    [17092092]     Ответить | Цитировать Сообщить модератору
 Re: что выбрать для констрейнта - check или trigger?  [new]
alneo
Member

Откуда: USSR
Сообщений: 1056
хотя я и сторонник ORM и особенно EF + CodeFirst, в этом проекте Model First, хранимок нет, констрейнты максимум прсотенькие check и unique. На уровне системы в BLL есть проверка этих условию, но вот некторые разработчики которые пишут DAL и BLL не всегда о них знают и в базу попадают неверные значения. То есть нужно поступить некрасиво и для надежности продублировать часть бизнес-логики в базе данных. К хранимках уже никто возарвщаться не будет, так что при йдется иххитряться триггерами (что я очень не люблю) и check, а логику выносить в функции. Я н когда не писал сложных выражения в чек констрентах и чувсвтую чт с производительностью будут проблемы.
8 янв 15, 11:57    [17093831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить