Jag vill bara nämna några punkter:
Använd kodgeneratorer Du kan inte ha en enda procedur för att spåra alla tabeller, du måste generera liknande men distinkta triggers på varje spårad tabell. Den här typen av jobb är bäst lämpad för automatisk kodgenerering. I ditt ställe skulle jag använda en XSLT-transformation för att generera koden från XML, och XML kan genereras automatiskt från metadata. Detta gör att du enkelt kan underhålla utlösare genom att återskapa dem varje gång du gör en ändring i granskningslogiken/strukturen eller en måltabell läggs till/ändras.
Överväg kapacitetsplanering för revisionen. En granskningstabell som spårar alla värdeförändringar kommer att vara den överlägset största tabellen i databasen:den kommer att innehålla alla aktuella data och all historik för aktuell data. En sådan tabell kommer att öka databasens storlek med 2-3 storleksordningar (x10, x100). Och revisionstabellen kommer snabbt att bli flaskhalsen för allt:
- varje DML-operation kommer att kräva låsningar i granskningstabellen
- alla administrativa och underhållsoperationer måste anpassas till databasens storlek på grund av revision
Ta hänsyn till schemaändringarna . En tabell med namnet 'Foo' kan släppas och senare kan en annan tabell med namnet 'Foo' skapas. Revisionsspåret måste kunna särskilja de två olika objekten. Bättre använd en långsam föränderlig dimension.
Tänk på behovet av att effektivt radera revisionsprotokoll. När lagringsperioden som dikteras av din ansökans ämnespolicy förfaller, måste du kunna radera förfallna granskningsposter. Det kanske inte verkar vara en så stor sak nu, men 5 år senare när de första posterna kommer att revisionstabellen har vuxit till 9,5 TB kan det vara ett problem.
Tänk på behovet av att fråga granskningen . Granskningstabellstrukturen måste vara förberedd för att svara effektivt på frågorna om revision. Om din revision inte kan ifrågasättas har den inget värde. Frågorna kommer helt och hållet att styras av dina krav och det är bara du som känner till dem, men de flesta granskningsposter efterfrågas för tidsintervall ("vilka förändringar inträffade mellan 19.00 och 20.00 igår?"), per objekt ("vilka ändringar har skett i denna post i denna post). tabell?') eller av författare ('vad ändrade Bob i databasen?').