sql >> Databasteknik >  >> RDS >> Mysql

Effektiv hantering av dataförändringar

Det låter som att du försöker implementera en Temporal Database a> . Temporal support var ett av de stora tilläggen till ANSI/ISO SQL:2011-standarden. MySQL (som de flesta RDBMS) släpar efter standarden. Tänk på Temporal Database som DBMS-motsvarigheten till CVS/SVN/Git.

Däremot kan den traditionella databasen vi använder utan tidsfunktioner kallas en Aktuell databas .

I en Aktuell databas , om du försöker implementera temporalt stöd kan du misslyckas på många sätt med olika tillvägagångssätt:

  • Tänket med ett bord. När du behöver göra ändringar gör du UPDATEs på dina ursprungliga poster, och om du inte har någon form av egenutvecklad trigger/revisionslogik, saknas historikspåret. Även om du har en revisions-/ändringslogg, måste du göra lite fult grävande för att rekonstruera ändringshistoriken.

  • Tvåbordsmetoden. Istället för att göra ändringar på plats delar du upp dina data i två tabeller, en med bas-/originalposterna (t.ex. bokning) och en annan tabell för dina ändringar/ändringar/deltas. Då har du åtminstone din ursprungliga data bevarad, men återigen måste du skriva komplex logik för att se originaldata med modifieringar på lager. Det blir ännu värre om du bara vill ha några av ändringarna som tillämpats.

  • Den förberäknade resultattabellmetoden . Du behåller 3 eller fler tabeller:basposterna, ändringarna och även en tabell som försöker alltid ha resultatet (håller basen + ändringarna uppdaterad). Lycka till med att skriva utlösare och procedurer för att göra denna beräkning när du gör INSERTs , och himlen hjälper dig om en UPDATE eller DELETE behövs. Inställningen är ömtålig och kan bryta ur synkronisering, som dödläge och återställning. Om du inte gör detta inom DB med triggers/procedurer, kan du försöka implementera resulterande beräkning i applikationskoden, men ha lycka till med det - och det kan bli fult med flertrådiga konsumenter. Och ändå har du inte lätt tillgång till resultat med bara en del ändringar tillämpas.

Slutsats: Om du inte är begränsad till MySQL bör du verkligen överväga att använda en DB som har inbyggt temporalt stöd. Annars kommer du att återimplementera hjulet.



  1. PHP konvertera från MySql till Excel Spreadsheet Autosize kolumner

  2. Hur man frågar sql med aktiv post för datum mellan angivna tider

  3. Introduktion till Firebase

  4. NVL2() Funktion i Oracle