Добре, това е пренаписване. Това, което пропуснах, когато отговорих за първи път, е, че приложението съхранява своята история в главната таблица. Сега разбирам защо @NickCraver е толкова извинителен за кода.
Е, първото нещо, което трябва да направите, е да издирите извършителите на този дизайн и да се уверите, че никога повече не го правят. Съхраняването на история като това не се мащабира, прави нормалните (неисторически) заявки по-сложни и саботира релационната цялост. Очевидно има сценарии, при които нищо от това няма значение и може би вашият сайт е един от тях, но като цяло това е много лошо изпълнение.
Най-добрият начин да направите това е Oracle 11g Total Recall . Това е елегантно решение, с напълно невидимо и ефективно внедряване и - по стандартите на другите платени екстри на Oracle - на доста разумна цена.
Но ако Total Recall не може да става и вие наистина трябва да го направите това, не позволявайте актуализации . Промяна в съществуващ запис CONTACT трябва да бъде вмъкване. За да направите това да работи, може да се наложи да изградите изглед с тригер ВМЕСТО. Все още е гадно, но не толкова гадно, колкото това, което имате сега.
От Oracle 11.2.0.4 Total Recall е преименуван на Flashback Archive и е включен като част от корпоративния лиценз (въпреки че е лишен от компресираните журнални таблици, освен ако не закупим опцията Advanced Compress).
Тази щедрост от Oracle трябва да превърне FDA в нормалния начин за съхранение на история:той е ефективен, той е производителен, това е вграден Oracle със стандартен синтаксис за поддръжка на исторически заявки. Уви, очаквам да видя полусготвени реализации със задействани тригери, повредени първични ключове и ужасна производителност още много години. Тъй като воденето на дневник изглежда е едно от онези разсейвания, на които разработчиците се радват, въпреки факта, че това е водопроводна инсталация на ниско ниво, която до голяма степен е без значение за 99,99% от всички бизнес операции.