Является ли использование триггеров хорошей практикой для обновления полей количества или меток времени? - PullRequest
1 голос
/ 27 января 2020

У меня есть две таблицы (упрощенно):

TABLE batch
batch_id      uuid
student_count smallint

TABLE students
batch_id    uuid
student_id  uuid

Поэтому я хочу обновлять student_count (добавить 1) всякий раз, когда ученик вставляется в базу данных. У меня вопрос, должен ли я использовать триггер для обновления student_count или использовать отдельный запрос для обновления student_count. (Моя база данных и сервер находятся не на одном компьютере.)

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

так в основном это хорошая практика?

1 Ответ

3 голосов
/ 27 января 2020

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

Однако лучшим решением может быть не хранить избыточные student_count вообще, но вычислять их на лету, когда вы SELECT из таблиц. Сохранение избыточных данных является хорошим решением, если их вычисление в случае необходимости было бы недопустимым с точки зрения производительности.

...