Mysql
 sql >> база данни >  >> RDS >> Mysql

Ефективно управление на промените в данните

Звучи сякаш се опитвате да внедрите Временна база данни . Времевата поддръжка беше едно от основните допълнения към стандарта ANSI/ISO SQL:2011. MySQL (като повечето RDBMS) изостава от стандарта. Мислете за Temporal Database като за DBMS еквивалент на CVS/SVN/Git.

Обратно, традиционната база данни, която използваме без времеви функции, може да се нарече Текуща база данни .

В Текуща база данни , ако се опитате да приложите временна поддръжка, можете да се провалите по много начини с различни подходи:

  • Подходът на една маса. Когато трябва да направите модификации, правите UPDATEs върху вашите оригинални записи и освен ако нямате някаква собствена логика за задействане/одит, пътеката на историята отсъства. Дори ако имате одит/дневник на промените, ще трябва да направите малко грозно копаене, за да реконструирате хронологията на промените.

  • Подходът на две маси. Вместо да правите модификации на място, вие разделяте данните си на две таблици, една с базовите/оригиналните записи (напр. резервация) и друга таблица за вашите промени/модификации/делта. Тогава поне имате запазени оригиналните си данни, но отново трябва да напишете сложна логика, за да видите оригиналните данни с наслоени модификации. Става още по-лошо, ако искате само някои от приложените модификации.

  • Подходът на предварително изчислената резултантна таблица . Вие поддържате 3 или повече таблици:базовите записи, модификациите, а също и таблица, която се опитва винаги да има резултата (поддържа актуална базата + модификациите). Успех в писането на тригерите и процедурите за извършване на това изчисление винаги, когато правите INSERTs , и Небето да ви помогне, ако UPDATE или DELETE е необходимо. Настройката е крехка и може да излезе от синхронизация, като блокировки и връщане назад. Ако не направите това в DB с тригери/процедури, можете да опитате да приложите полученото изчисление в кода на приложението, но имайте късмет в това -- и може да стане грозно с многонишкови потребители. И все пак нямате лесен достъп до резултати само с някои приложени модификации.

Заключение: Ако не сте ограничени до MySQL, наистина трябва да обмислите използването на DB, която има вградена временна поддръжка. В противен случай ще внедрите отново колелото.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направите изваждане между две полета в таблица с помощта на SQL заявка

  2. mysql:премахване на редове с повтарящи се стойности с условие (повтарящи се колони)

  3. connection.query(...).след това не е функция

  4. INT сравнение без израз WHERE

  5. Изтегляне на данни и отпечатването им в HTML таблица