Триггеры и нормализация

zerkms

TDD infected
Команда форума
Триггеры и нормализация

Здравствуйте товарищи
(сразу оговорюсь - у меня есть опыт только с mysql, с "нормальными-взрослыми" субд вроде постгре/оракла/мсскл я не работал, в частности - с триггерами)

собственно вопрос:
сегодня в базе, крутящейся под mssql увидел следующее: имеется таблица-пустышка, реализованную в 1НФ
приложение вставляет в эту таблицу кортеж данных
затем триггер на добавление на этой таблице "нормализует" данные, "раскидывая" их по нужным таблицам БД (которая вся в 3НФ), реализует связи между сущностями
после чего запись удаляется

собственно вопрос: насколько такая практика пагубная, что в ней плохого и что хорошего?
 

neko

tеam neko
собственно вопрос: насколько такая практика пагубная, что в ней плохого и что хорошего?
первый вопрос -- если из этой таблицы сделать выборку ты получишь то что туда вставлял и она потом раскидала?

если ответ нет, то это будет сломанный контракт.
таблицы так не работают, так делать не стоит.

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

-~{}~ 31.10.07 16:05:

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

zerkms

TDD infected
Команда форума
первый вопрос -- если из этой таблицы сделать выборку ты получишь то что туда вставлял и она потом раскидала?
эта таблица - буферная, данные из неё удалять можно (но этого сейчас не делается)
цель таблицы - принять из приложения кортеж данных, которые потом раскидываются по таблам

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

neko

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

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

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

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

zerkms

TDD infected
Команда форума
вот, это уже хорошо
это уже как аргумент - отлично ;)
мерси
 
Сверху