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