Всем привет! Подскажите, как правильно создавать тригеры для Mysql, например при голосовании за комментарий пользователя, добавлять ему рейтинг?
Нужно сохранять триггеры в самом MySql или же добавлять и удалять их на лету?
Для правильного вопроса надо знать половину ответа
Триггер в MySQL - это сохранённая процедура, вызываемая перед или после добавления, изменения или удаления строки в таблице. Триггер сохраняется в базе и привязан к конкретной таблице, по событию в которой срабатывает.
Алексей Коновалов, триггер размазывает манипуляции с данными по двум разным частям приложения.
Это сейчас у вас условно +1 голос - это +1 в рейтинг и триггер выглядит хорошей идеей.
Но в будущем эта логика может сильно усложнится.
Андрей, плохо понимаю... Вы имеете ввиду, что если можно ответить положительно на вопрос "может ли измениться условие триггера", то стоит от него отказаться?
Ну т.е. если взять в пример такое использование триггера:
У пользователя есть поле users.posts, которое указывает количество постов.
Триггер INSERT добавляем на таблицу posts, где при обновлении записи происходит обновление количества постов у пользователя.
Я так понимаю тут условие поменяться не может, а значит триггер можно использовать?
Алексей Коновалов, Вы добавляете еще одну сущность которая манипулирует данными, раньше у вас был только ваш код, теперь у вас еще и триггер про кторый надо помнить. (например обычный бекап базы при помощи mysqldump не забекапит тригер, так как нужно явно указывать ключ --routines)
Правильнее делать INSERT в posts и UPTATE users.posts.