Okay, dette er en omskrivning. Hvad jeg savnede, da jeg først svarede, er, at applikationen gemmer sin historie i hovedtabellen. Nu forstår jeg, hvorfor @NickCraver er så undskyldende over koden.
Den første ting at gøre er at jage gerningsmændene bag dette design og sørge for, at de aldrig gør det igen. Lagring af historie som denne skaleres ikke, gør normale (ikke-historiske) forespørgsler mere komplicerede og saboterer relationel integritet. Der er naturligvis scenarier, hvor intet af det betyder noget, og måske er dit websted et af dem, men generelt er dette en meget dårlig implementering.
Den bedste måde at gøre dette på er Oracle 11g Total Recall . Det er en elegant løsning med en fuldstændig usynlig og effektiv implementering, og - efter standarderne for Oracles andre afgiftspligtige ekstraudstyr - ganske rimeligt prissat.
Men hvis Total Recall ikke kommer på tale, og du virkelig skal gøre det, tillad ikke opdateringer . En ændring af en eksisterende KONTAKTpost skal være en indsættelse. For at få dette til at fungere, skal du muligvis bygge en visning med en I STEDET FOR trigger. Det er stadig yucky, men ikke helt så yucky, som det, du har nu.
Fra og med Oracle 11.2.0.4 er Total Recall blevet omdøbt til Flashback Archive og er inkluderet som en del af Enterprise License (selvom fjernet fra de komprimerede journaltabeller, medmindre vi køber Advanced Compress-indstillingen).
Denne storhed fra Oracle burde gøre FDA til den normale måde at gemme historie på:det er effektivt, det er performativt, det er et Oracle indbygget med standardsyntaks til at understøtte historiske forespørgsler. Desværre forventer jeg at se halvt tilberedte implementeringer med spatchcocked triggere, ødelagte primære nøgler og forfærdelig ydeevne i mange år endnu. Fordi journalføring ser ud til at være en af de distraktioner, som udviklere glæder sig over, på trods af at det er lavt niveau VVS, som stort set er irrelevant for 99,99 % af alle forretningsaktiviteter.