![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хочу покаяться за то, что наговорил про генераторы в триггерах [IB6.x, Firebird]
kaif © (2006-07-16 20:28:00)Как-то месяц назад я заявил, что юзать генераторы в триггерах IB - плохая традиция, так как это не позволяет найти только что вставленную запись (информация внутри триггера во внешний мир не проникает).
Вполне разумное предложение использовать в триггере проверку на NULL
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(MyGenerator, 1);
я отверг, так как это не решало проблему.
Так получилось потому что я уже давно не использовал средства разработки типа IBExpress, а работал в основном в своей специализированной среде, где эти вопросы решались системой и несколько иначе.
Сейчас я пишу одну базу данных с нуля, используя IBExpert и я заметил, что если в IBExpert делаешь ручное добавление записей в таблицы, то приходится еще параллельно потом не забыватьмодифицировать генераторы, чтобы при работе приложения не попасть в VIOLATION первичного ключа.
Оказалось, что использование генераторов в триггерах с условием проверки ключевого поля при вставке на NULL снимает эту проблему и значительно упрощает процесс разработки базы, так как позволяет просто забыть о генераторах, даже если работаешь не из своего приложения, а просто "руками" в IBExpert.
Так что каюсь и беру свои слова назад.
Я вижу, что все же Имеет смыслиспользовать присвоение в триггерах BEFORE INSERT IB.
Разумеется, это не решает проблему нахождения вставленной записи, но зато решает другую проблему - герантированную модификацию генератора, не зависящую от способа вставки записи - из приложения или "руками" в IBExpert.
Как IBExpert находит вставленные записи - для меня загадка, если честно. Либо он прощучивает уникальные альтернативные ключи, либо опирается на содержимое всех полей. Не знаю.
Desdechado (2006-07-17 10:56:00) [1]> имеет смысл использовать
Это и называется "бизнес-логика на сервере"
:)
Суслик (2006-07-17 03:20:00) [2]новичек ты наш :)
unknown (2006-07-17 00:12:00) [3]Аминь.
DrPass (2006-07-16 21:17:00) [4]Господь прощает твои грехи, сын мой