Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - Déclencheurs pour créer une ligne d'historique lors de la mise à jour

Bon, c'est une réécriture. Ce que j'ai manqué lorsque j'ai répondu pour la première fois, c'est que l'application stocke son historique dans la table principale. Maintenant, je comprends pourquoi @NickCraver est si désolé pour le code.

Eh bien, la première chose à faire est de traquer les auteurs de cette conception et de s'assurer qu'ils ne recommencent plus jamais. Stocker l'historique comme celui-ci n'évolue pas, complique les requêtes normales (non historiques) et sabote l'intégrité relationnelle. Évidemment, il existe des scénarios où rien de tout cela n'a d'importance, et peut-être que votre site en fait partie, mais en général, il s'agit d'une très mauvaise implémentation.

La meilleure façon de procéder est Oracle 11g Total Recall . C'est une solution élégante, avec une mise en œuvre complètement invisible et efficace, et - selon les normes des autres extras payants d'Oracle - à un prix tout à fait raisonnable.

Mais si Total Recall est hors de question et que vous devez vraiment le faire, n'autorisez pas les mises à jour . Une modification apportée à un enregistrement de CONTACT existant doit être une insertion. Pour que cela fonctionne, vous devrez peut-être créer une vue avec un déclencheur INSTEAD OF. C'est toujours dégoûtant mais pas aussi dégoûtant que ce que vous avez maintenant.

À partir d'Oracle 11.2.0.4, Total Recall a été renommé Flashback Archive et est inclus dans la licence Enterprise (bien que dépouillé des tables de journal compressées, sauf si nous achetons l'option Advanced Compress).

Cette largesse d'Oracle devrait faire de la FDA le moyen normal de stocker l'historique :c'est efficace, c'est performatif, c'est un Oracle intégré avec une syntaxe standard pour prendre en charge les requêtes historiques. Hélas, je m'attends à voir des implémentations à moitié cuites avec des déclencheurs ponctuels, des clés primaires cassées et des performances horribles pendant de nombreuses années encore. Parce que la journalisation semble être l'une de ces distractions qui ravissent les développeurs, malgré le fait qu'il s'agit d'une plomberie de bas niveau qui n'est en grande partie pas pertinente pour 99,99 % de toutes les opérations commerciales.