Co jsou to transakce a jak je používat?

Automaticky přeloženo z Deepl

Představte si, že převádíte 200 000 eur z jednoho bankovního účtu na druhý. Částku vyberete ze zdrojového účtu a poté ji vložíte na cílový účet. Zatím je vše v pořádku a v dokonalém světě se operace podaří. Bohužel zde, v reálném světě, se mohou věci pokazit. Něco se stane a peníze se ztratí. To je velmi špatné.

No a transakce jsou tu od toho, aby se to u vašich žádostí nestalo! V tomto příspěvku na blogu podrobně prozkoumejte použití a význam transakcí a také několik scénářů, které ukazují, jak mohou zachránit váš podnik.

Co jsou to transakce?

Podle dokumentace:

Transakce jsou série souvisejících úprav dat provedených v databázi v rámci procesu. Transakce se do databáze trvale ukládá až po jejím ověření. Pokud transakce není dokončena, ať už proto, že je zrušena, nebo z důvodu nějaké vnější události, modifikace se neuloží.

Je důležité si uvědomit:

Při použití vnořených transakcí závisí výsledek každé dílčí transakce na potvrzení nebo zrušení transakce vyšší úrovně. Pokud je transakce vyšší úrovně potvrzena, jsou výsledky dílčích transakcí potvrzeny (potvrzení nebo zrušení). Pokud je naopak transakce vyšší úrovně zrušena, jsou zrušeny všechny dílčí transakce bez ohledu na jejich příslušné výsledky.

Nezapomeňte se podívat do dokumentace, kde najdete podrobnější informace o transakcích.

používání transakcí

Je těžké si představit obchodní aplikace, které nepoužívají transakce, přesto jsem se s nimi čas od času setkal! Při diskusi o této absenci transakcí s vývojáři aplikací jsem slyšel věty typu „aha, zatím to fungovalo“, nebo dokonce „vždycky jsme měli štěstí“. Podle mého názoru by štěstí nemělo být koncepcí návrhu podnikových aplikací.

Klasickým příkladem použití transakcí je účetnictví. Účetní výkazy poskytují záznam dvou kategorií: aktiv a pasiv. Obě je třeba vypočítat a uložit (úplně, nikdy ne částečně), nebo se jich vůbec nedotýkat.

Dalším příkladem je systém přepravy, kde vytvoření objednávky snižuje stav zásob ve skladu. Spíše než spoléhat na štěstí musíme zajistit, aby se záznamy o objednávce i zásobách vytvářely nebo upravovaly společně. Ať se stane cokoli, buď se obě operace dokončí, nebo zruší.

O transakci můžete uvažovat jako o jakési velké závorce:

  • Otevřete ji (START TRANSACTION příkaz),
  • provádět operace v databázi (vytvářet/změňovat/mazat záznamy – z jedné nebo několika tabulek),
  • pak ji uzavřete buď validací (VALIDATE TRANSACTION příkazem) nebo zrušením (CANCEL TRANSACTION příkaz) VŠECHNY operace.

Kromě nízkoúrovňových databázových operací je dalším vhodným případem pro využití transakcí uživatelské rozhraní. Představte si formulář pro zadávání faktur, který používá pole se seznamem (nebo dílčí formulář) s položkami produktů (uloženými v jiné tabulce) … nebo zákazníky a kontakty … nebo kontakty a telefonní čísla. Seznam může pokračovat dál a dál ….

Váš uživatel chce upravit fakturu. Může změnit jednu nebo několik položek, pak se nakonec rozhodne kliknout na tlačítko zrušit a předpokládat, že všechny úpravy položek faktury jsou zrušeny (nejsou uloženy). To můžete řešit pomocí složitých polí nebo jednoduše pomocí transakce.

Doufejme, že transakce již používáte.

Použití vnořených transakcí

První scénář: aplikace Kontakt

Řekněme, že máte jednoduchou strukturu se dvěma tabulkami: zákazníci a kontakty. Máte vstupní formulář pro zákazníky včetně pole se seznamem záznamů kontaktů. Poklepáním na záznam se otevře vstupní formulář kontaktu s dalšími podrobnostmi o kontaktu.

Může se stát následující:

  • Koncový uživatel otevře záznam zákazníka a upraví název ulice.
  • Poté otevře kontakt „A“, upraví datum narození a zavře formulář kontaktu kliknutím na tlačítko OK.
  • Následně otevře kontakt „B“, něco upraví a pak se rozhodne své změny zrušit.
  • Nyní se vrátí k formuláři zákazníka, koncový uživatel klikne na tlačítko OK a dokončí své činnosti.

Uživatel očekává, že jeho úprava kontaktu „A“ bude uložena, zatímco úprava kontaktu „B“ nikoli. Změny samotného záznamu zákazníka by se samozřejmě měly také uložit.

Pomocí vnořených transakcí je to snadno řešitelné. Stačí použít jednu transakci ve formuláři zákazníka a druhou transakci ve formuláři kontaktu. Žádný problém!

Druhý scénář: automatické dávkové zpracování

Zcela odlišným scénářem – ale se stejnou koncepcí – je automatické dávkové zpracování (výpočty, import atd.):

  • Uprostřed složité dávkové úlohy potřebujete z nějakého důvodu proces zastavit (např. narazíte na špatná data nebo na požadavek uživatele na zrušení/ukončení).

U jednoúrovňové transakce můžete zrušit pouze všechny operace – nebo zastavit uprostřed, což vede k nepřehledné situaci. Možná si říkáte „přece bych se nezastavil uprostřed, dokončil bych operaci před zastavením“. To je skvělé, ale jak byste řešili výpadky napájení, pády, selhání hardwaru a další neočekávané chyby?

Protože nemůžete… a spoléhat na štěstí není spolehlivé… systém by měl být navržen tak, aby zajistil spolehlivá data.

mějte na paměti…

Transakce vám dávají kontrolu nad těmito druhy situací. Pro každou operaci (import dat, provádění výpočtů atd.) používejte jednotlivé transakce vnořené do transakce nejvyšší úrovně (aby bylo možné všechny operace zrušit nebo ověřit).

Pokud se transakce z jakéhokoli důvodu nedokončí (havárie, výpadek proudu atd.), nemusíte se bát! Každá již provedená operace se zruší, protože transakce nejvyšší úrovně ještě nic neověřila.

Thomas Maul
• VP pro strategii, produktové řady 4D • Když byla v roce 1988 vytvořena německá pobočka 4D, Thomas nastoupil do společnosti jako technický ředitel a pomohl vybudovat komunitu 4D vývojářů v Německu i Rakousku. Po mnoha letech podpory zákazníků s technickými problémy a stále větší angažovanosti v otázkách prodeje a managementu byl v roce 1999 povýšen na výkonného ředitele pro 4D Germany. Od roku 2005 se jako člen výkonné rady stal součástí celosvětové strategie společnosti, což vedlo k jeho současné pozici viceprezidenta pro strategii, produktové řady 4D, zodpovědného za definování a realizaci celkové strategie pro produktovou řadu 4D ve vztahu k týmům programování, výzkumu a vývoje, prodeje a marketingu.