sql >> Database >  >> RDS >> Mysql

Effectief beheer van gegevenswijzigingen

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 een UPDATE of DELETE 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.



  1. Hoe kan ik meerdere kolommen SELECTEREN binnen een CASE WHEN op SQL Server?

  2. Waarom gebruiken we altijd liever parameters in SQL-statements?

  3. C# Decrypt bytes van SQL Server EncryptByPassPhrase?

  4. Hulp nodig bij berekening met behulp van twee datasets met Expression SSRS