Звучи сякаш се опитвате да внедрите Временна база данни . Времевата поддръжка беше едно от основните допълнения към стандарта ANSI/ISO SQL:2011. MySQL (като повечето RDBMS) изостава от стандарта. Мислете за Temporal Database като за DBMS еквивалент на CVS/SVN/Git.
Обратно, традиционната база данни, която използваме без времеви функции, може да се нарече Текуща база данни .
В Текуща база данни , ако се опитате да приложите временна поддръжка, можете да се провалите по много начини с различни подходи:
-
Подходът на една маса. Когато трябва да направите модификации, правите
UPDATEs
върху вашите оригинални записи и освен ако нямате някаква собствена логика за задействане/одит, пътеката на историята отсъства. Дори ако имате одит/дневник на промените, ще трябва да направите малко грозно копаене, за да реконструирате хронологията на промените. -
Подходът на две маси. Вместо да правите модификации на място, вие разделяте данните си на две таблици, една с базовите/оригиналните записи (напр. резервация) и друга таблица за вашите промени/модификации/делта. Тогава поне имате запазени оригиналните си данни, но отново трябва да напишете сложна логика, за да видите оригиналните данни с наслоени модификации. Става още по-лошо, ако искате само някои от приложените модификации.
-
Подходът на предварително изчислената резултантна таблица . Вие поддържате 3 или повече таблици:базовите записи, модификациите, а също и таблица, която се опитва винаги да има резултата (поддържа актуална базата + модификациите). Успех в писането на тригерите и процедурите за извършване на това изчисление винаги, когато правите
INSERTs
, и Небето да ви помогне, акоUPDATE
илиDELETE
е необходимо. Настройката е крехка и може да излезе от синхронизация, като блокировки и връщане назад. Ако не направите това в DB с тригери/процедури, можете да опитате да приложите полученото изчисление в кода на приложението, но имайте късмет в това -- и може да стане грозно с многонишкови потребители. И все пак нямате лесен достъп до резултати само с някои приложени модификации.
Заключение: Ако не сте ограничени до MySQL, наистина трябва да обмислите използването на DB, която има вградена временна поддръжка. В противен случай ще внедрите отново колелото.