Dobra, to jest przepisanie. To, czego przegapiłem, kiedy po raz pierwszy odpowiedziałem, to to, że aplikacja przechowuje swoją historię w głównej tabeli. Teraz rozumiem, dlaczego @NickCraver tak przeprasza za kod.
Cóż, pierwszą rzeczą do zrobienia jest wytropienie sprawców tego projektu i upewnienie się, że nigdy więcej tego nie zrobią. Przechowywanie historii w ten sposób nie skaluje się, sprawia, że zwykłe (niehistoryczne) zapytania są bardziej skomplikowane i sabotuje integralność relacyjną. Oczywiście są scenariusze, w których nic z tego nie ma znaczenia, a być może Twoja witryna jest jedną z nich, ale ogólnie jest to bardzo zła implementacja.
Najlepszym sposobem na to jest Oracle 11g Total Recall . Jest to eleganckie rozwiązanie, z całkowicie niewidoczną i wydajną implementacją oraz – jak na standardy innych płatnych dodatków Oracle – w dość przystępnej cenie.
Ale jeśli Total Recall nie wchodzi w rachubę i naprawdę musisz to zrobić, nie zezwalaj na aktualizacje . Zmiana w istniejącym rekordzie CONTACT powinna być wstawką. Aby to zadziałało, może być konieczne zbudowanie widoku z wyzwalaczem INSTEAD OF. Wciąż jest okropne, ale nie aż tak, jak to, co masz teraz.
Od Oracle 11.2.0.4 Total Recall zostało przemianowane na Flashback Archive i jest częścią licencji Enterprise License (chociaż bez skompresowanych tabel dzienników, chyba że wykupimy opcję Advanced Compress).
Ta hojność od Oracle powinna sprawić, że FDA stanie się normalnym sposobem przechowywania historii:jest wydajny, wydajny, jest wbudowanym Oracle ze standardową składnią do obsługi zapytań historycznych. Niestety, spodziewam się zobaczyć na wpół ugotowane implementacje ze spatchcocked triggerami, zepsutymi kluczami głównymi i straszną wydajnością jeszcze przez wiele lat. Ponieważ dziennikarstwo wydaje się być jednym z tych rozrywek, które zachwycają programistów, mimo że jest to niskopoziomowa kanalizacja, która jest w dużej mierze nieistotna dla 99,99% wszystkich operacji biznesowych.