Het klinkt alsof u een Temporal Database
probeert te implementeren een> . Tijdelijke ondersteuning was een van de belangrijkste toevoegingen aan de ANSI/ISO SQL:2011-standaard. MySQL blijft (zoals de meeste RDBMS) achter bij de standaard. Zie Temporal Database als het DBMS-equivalent van CVS/SVN/Git.De traditionele database die we gebruiken zonder tijdelijke functies kan daarentegen een Huidige database worden genoemd .
In een huidige database , als u tijdelijke ondersteuning probeert te implementeren, kunt u op veel manieren falen met verschillende benaderingen:
-
De benadering van één tafel. Wanneer u wijzigingen moet aanbrengen, doet u
UPDATEs
op uw originele gegevens, en tenzij u een soort van inlandse trigger/audit-logica heeft, is het geschiedenisspoor afwezig. Zelfs als je een controle-/wijzigingslogboek hebt, moet je lelijk graven om de wijzigingsgeschiedenis te reconstrueren. -
De twee-tafelbenadering. In plaats van ter plekke wijzigingen aan te brengen, splitst u uw gegevens op in twee tabellen, één met de basis/originele records (bijv. boeking), en een andere tabel voor uw wijzigingen/aanpassingen/delta's. Dan heb je tenminste je originele gegevens bewaard, maar opnieuw moet je complexe logica schrijven om de originele gegevens te bekijken met gelaagde wijzigingen. Het wordt nog erger als je slechts sommige . wilt van de aangebrachte wijzigingen.
-
De vooraf berekende resulterende tabelbenadering . U houdt 3 of meer tabellen bij:de basisrecords, de wijzigingen, en ook een tabel die probeert altijd de resultante te hebben (houdt de basis + wijzigingen up-to-date). Veel succes met het schrijven van de triggers en procedures om deze berekening uit te voeren wanneer u
INSERTs
doet , en de hemel helpt je als eenUPDATE
ofDELETE
is nodig. De installatie is kwetsbaar en kan uit de pas lopen, zoals impasses en terugdraaien. Als je dit niet binnen de DB doet met triggers/procedures, zou je kunnen proberen om de resulterende berekening in de applicatiecode te implementeren, maar heb daar veel geluk mee - en het kan lelijk worden bij consumenten met meerdere threads. En toch heb je geen gemakkelijke toegang tot resultanten met slechts sommige wijzigingen toegepast.
Conclusie: Als je niet beperkt bent tot MySQL, zou je echt moeten overwegen om een DB te gebruiken die ingebouwde tijdelijke ondersteuning heeft. Anders ga je het wiel opnieuw implementeren.