Искам само да изтъкна няколко точки:
Използвайте генератори на код Не можете да имате една процедура за проследяване на всички таблици, ще трябва да генерирате подобни, но различни тригери за всяка проследявана таблица. Този вид работа е най-подходяща за автоматизирано генериране на код. На ваше място бих използвал XSLT трансформация, за да генерирам кода от XML, а XML може да се генерира автоматично от метаданни. Това ви позволява лесно да поддържате тригерите, като ги регенерирате всеки път, когато правите промяна в одитната логика/структура или се добавя/променя целева таблица.
Помислете за планиране на капацитет за одита. Таблица за одит, която проследява всички промени в стойностите, ще бъде най-голямата таблица в базата данни:тя ще съдържа всички текущи данни и цялата история на текущите данни. Такава таблица ще увеличи размера на базата данни с 2-3 порядъка (x10, x100). И таблицата за одит бързо ще се превърне в тесното място на всичко:
- всяка DML операция ще изисква ключалки в таблицата за одит
- всички административни и поддържащи операции ще трябва да отговарят на размера на базата данни поради одит
Вземете предвид промените на схемата . Таблица с име 'Foo' може да бъде изпусната и по-късно може да се създаде друга таблица с име 'Foo'. Одитната пътека трябва да може да разграничи двата различни обекта. По-добре използвайте подхода на бавно променящите се измерения.
Помислете за необходимостта отефективно изтриване одитни записи. Когато периодът на запазване, продиктуван от правилата на вашата кандидатура, изтече, трябва да можете да изтриете необходимите записи за одит. Може да не изглежда толкова голяма работа сега, но 5 години по-късно, когато трябва да се направят първите записи, таблицата за одит е нараснала до 9,5 TB, това може да е проблем.
Помислете за необходимостта от запитване за одита . Структурата на одитната таблица трябва да бъде подготвена, за да отговори ефективно на запитванията за одит. Ако вашият одит не може да бъде запитан, тогава той няма стойност. Заявките ще се ръководят изцяло от вашите изисквания и само вие ги знаете, но повечето одиторски записи се запитват за интервали от време („какви промени са настъпили между 19:00 и 20:00 часа вчера?“), по обект („какви промени са настъпили в този запис в този“). таблица?“) или от автор („какви промени направи Боб в базата данни?“).