Chcę tylko wymienić kilka punktów:
Użyj generatorów kodu Nie możesz mieć jednej procedury do śledzenia wszystkich tabel, musisz wygenerować podobne, ale odrębne wyzwalacze dla każdej śledzonej tabeli. Ten rodzaj pracy najlepiej nadaje się do automatycznego generowania kodu. W Twoim miejscu użyłbym transformacji XSLT do generowania kodu z XML, a XML może być generowany automatycznie z metadanych. Pozwala to na łatwe utrzymanie wyzwalaczy poprzez ich ponowne generowanie za każdym razem, gdy dokonasz zmiany w logice/strukturze audytu lub dodaniu/zmienieniu tabeli docelowej.
Rozważ planowanie wydajności do audytu. Tabela audytu, która śledzi wszystkie zmiany wartości, będzie zdecydowanie największą tabelą w bazie danych:będzie zawierała wszystkie bieżące dane i całą historię bieżących danych. Taka tabela zwiększy rozmiar bazy danych o 2-3 rzędy wielkości (x10, x100). A tabela audytu szybko stanie się wąskim gardłem wszystkiego:
- każda operacja DML będzie wymagała blokad w tabeli audytu
- wszystkie operacje administracyjne i konserwacyjne będą musiały dostosować się do rozmiaru bazy danych ze względu na audyt
Weź pod uwagę zmiany schematu . Tabela o nazwie „Foo” może zostać usunięta, a później może zostać utworzona inna tabela o nazwie „Foo”. Ścieżka audytu musi umożliwiać rozróżnienie dwóch różnych obiektów. Lepiej użyj podejścia wolno zmieniającego się wymiaru.
Rozważ potrzebę skutecznego usuwania zapisy audytu. Gdy upłynie okres przechowywania narzucony przez zasady tematu aplikacji, musisz mieć możliwość usunięcia rekordów wymaganych audytów. Teraz może nie wydawać się to wielkim problemem, ale 5 lat później, kiedy pierwsze rekordy są należne, tabela kontroli wzrosła do 9,5 TB, może to stanowić problem.
Rozważ potrzebę zapytania o audyt . Struktura tabeli audytu musi być przygotowana, aby skutecznie odpowiadać na zapytania dotyczące audytu. Jeśli Twój audyt nie może zostać zbadany, to nie ma on żadnej wartości. Zapytania będą w całości oparte na Twoich wymaganiach i tylko Ty je znasz, ale większość rekordów audytu jest odpytywana dla przedziałów czasowych („jakie zmiany nastąpiły wczoraj między 19:00 a 20:00?”), według obiektu („jakie zmiany nastąpiły w tym rekordzie w tym tabeli?”) lub autora („jakie zmiany wprowadził Bob w bazie danych?”).