Решение, которое мне больше всего нравится для этого, состоит в том, чтобы потребовать (используя функции безопасности, если это возможно) весь доступ к данным приложения (или, по крайней мере, все операции CRUD), чтобы пройти через хранимые процедуры, и чтобы SP могли управлять отслеживанием и аудитом изменений.
Проблема с триггерами в том, что они плохо масштабируются;они могут налагать существенные потери производительности, превращая то, что может быть пакетными вставками или обновлениями, во многие однострочные операции.
Что касается сохранения изменений в строке или в другой таблице, я предпочитаю использовать другую таблицу,Таким образом, у меня также может быть история реальных изменений, когда это необходимо, а не просто кто и когда.Ограничение исходной таблицы также может помочь с производительностью запросов / чтения.
Вы также можете применить разбиение к таблицам аудита, что позволит легко их исключать / отбрасывать, когда придет время.