sql >> Database >  >> RDS >> Oracle

Oracle - Triggers om een ​​geschiedenisrij te maken bij update

Oké, dit is een herschrijving. Wat ik miste toen ik voor het eerst reageerde, is dat de applicatie zijn geschiedenis opslaat in de hoofdtabel. Nu begrijp ik waarom @NickCraver zich zo verontschuldigt over de code.

Het eerste wat je moet doen, is de daders van dit ontwerp opsporen en ervoor zorgen dat ze het nooit meer doen. Het opslaan van geschiedenis op deze manier schaalt niet, maakt normale (niet-historische) zoekopdrachten ingewikkelder en saboteert de relationele integriteit. Uiteraard zijn er scenario's waarin dat allemaal niet van belang is, en misschien is jouw site er een van, maar over het algemeen is dit een zeer slechte implementatie.

De beste manier om dit te doen is Oracle 11g Total Recall . Het is een elegante oplossing, met een volledig onzichtbare en effciënte implementatie, en - volgens de normen van Oracle's andere betalende extra's - redelijk geprijsd.

Maar als Total Recall niet mogelijk is en u dit echt moet doen, geen updates toestaan . Een wijziging in een bestaand CONTACT-record moet een insert zijn. Om dit te laten werken, moet u mogelijk een weergave maken met een IN PLAATS VAN een trigger. Het is nog steeds vies, maar niet zo vies als wat je nu hebt.

Vanaf Oracle 11.2.0.4 is Total Recall omgedoopt tot Flashback Archive en is opgenomen als onderdeel van de Enterprise-licentie (hoewel de gecomprimeerde journaaltabellen zijn vervallen, tenzij we de Advanced Compress-optie aanschaffen).

Deze vrijgevigheid van Oracle zou van de FDA de normale manier moeten maken om geschiedenis op te slaan:het is efficiënt, het is performatief, het is een Oracle ingebouwd met standaard syntaxis om historische vragen te ondersteunen. Helaas verwacht ik nog vele jaren halfgekookte implementaties met spatchcocked triggers, gebroken primaire sleutels en vreselijke prestaties. Omdat journaling een van die afleidingen lijkt te zijn waar ontwikkelaars dol op zijn, ondanks het feit dat het low-level sanitair is dat grotendeels irrelevant is voor 99,99% van alle bedrijfsactiviteiten.



  1. Wat drijft de natuurlijke resultaatvolgorde voor een ongeordend MySQL-verzoek?

  2. Laravel - Ongeldig parameternummer:parameter is niet gedefinieerd

  3. GROUP BY en ORDER BY

  4. MySQL JDBC-stuurprogramma's installeren in Pentaho Data Integration en BA Server-tools