Допустим, я хочу хранить пользователей и группы в базе данных MySQL. У них есть отношение n: m. Для отслеживания всех изменений в каждой таблице есть таблица аудита user_journal, group_journal и user_group_journal. Триггеры MySQL копируют текущую запись в таблицу журнала при каждом INSERT или UPDATE (DELETES не поддерживаются, потому что мне нужна информация о том, какой пользователь приложения удалил запись, поэтому есть флаг active
, который будет установлен на 0
вместо удаление).
Мой вопрос / проблема: если я добавляю в группу сразу 10 пользователей. Когда я позже просматриваю историю этой группы в пользовательском интерфейсе приложения, я хочу видеть добавление этих 10 пользователей как за один шаг, а не как за 10 независимых шагов. Есть ли хорошее решение для группировки таких изменений вместе? Может быть, можно иметь счетчик, который увеличивается каждый раз, когда триггер ... срабатывает? Никогда не работал с триггерами.
Лучшее решение - собрать воедино все изменения, внесенные в транзакцию. Поэтому, когда пользователь обновляет имя группы и добавляет 10 пользователей за один шаг (один вызов контроллера формы), это будет один шаг в истории. Может быть, можно определить случайный хеш или увеличить глобальный счетчик каждый раз при запуске транзакции и получить доступ к этому значению в триггере?
Я не хочу усложнять дизайн таблицы, чем иметь одну журнальную таблицу для каждой «реальной» таблицы. Я не хочу добавлять хеш транзакции в каждую таблицу базы данных (имеется в виду «настоящие» таблицы, а не таблицы аудита - там, конечно, все было бы хорошо). Также хотелось бы иметь решение в базе данных, а не в приложении.