![]() |
Indexy databázových tabulek a jejich revize |
![]() |
Databázový server (SQL server, databáze) |
Mezi tabulkami, v nichž jsou uložena veškerá data s nimiž Kaskáda pracuje, existuje velké množství vztahů, které lze popsat prostřednictvím tzv. referenčních integrit (RI).
Referenční integrita je obecný pojem používaný v prostředí SQL databází k vyjádření skutečnosti, že údaj v určitém sloupci, může mít pouze hodnotu, uvedenou v nějakém seznamu (jiné tabulce). Toto vysvětlení je zjednodušené, ale pro účel této kapitoly snad dostačující.
Výše uvedený mechanismum si lze snadno představit např. u faktury a jejího
odběratele:
Údaj "odběratel", to je identifikátor kontaktu, je to jeden sloupec v tabulce faktur.
Hodnota tohoto identifikátoru nemůže být libovolná, může to být pouze hodnota vyskytující se v seznamu kontaktů.
V praxi je celkem pochopitelný požadavek, aby faktura byla vytvářena pouze na existujícího odběratele a na druhou
stranu, aby nebylo možno smazat odběratele, ke kterému existuje faktura, neboť u ní by informace o odběrateli
chyběly.
V deklaracích tabulek Kaskády nastavili vývojáři tohoto systému množství referenčních integrit, vyjadřujících požadavky aplikační logiky.
Deklarace referenčních integrit v tabulkách by sama o sobě ničemu nepomohla, kdyby se těmito pravidly neřídil SQL server.
SQL server se ale samozřejmě těmito pravidly řídí, to je jejich hlavní smysl. SQL server sám o sobě neví nic o aplikační logice, neví jaké údaje z reálného života data v tabulkách představují, ale zná deklarace referenčních integrit a bdí nad jejich dodržováním.
Pokud se tedy např. uživatel pokusí smazat kontakt, který figuruje v nějaké faktuře, vykonává tím činnost, která je v rozporu s výše uvedeným příkladem referenční integrity, SQL server tuto skutečnost zjistí, odmítne operaci provést a vrátí data do stavu před započetím operace. Uživatel Kaskády přitom dostává na monitoru informaci o problému prostřednictvím běžného chybového dialogu Kaskády.
Ideální stav je samozřejmě takový, kdy k porušení integrit nedojde nikdy. Absolutně dokonalé ale bohužel není na světě vůbec nic a ve velmi vyjímečných situacích problém nastat může. Zdrojem problémů mohou být především problémy hardwaru (např. chyby v práci operační paměti), výpadky proudu a jiná násilná ukončení práce počítače, případně chyby v samotném SQL serveru. Více v kapitole Nestandardní ukončení chodu databázového serveru.
Respektování referenčních integrit souvisí velmi těsně s korektními indexy nad tabulkami, jichž se integrity týkají. Kvůli rychlosti jsou totiž veškeré referenční integrity závislé na indexech. Každý údaj, který se kontroluje, musí být součástí indexovaného sloupce. Z toho logicky vyplývá, že pokud dojde k porušení indexu, může sekundárně dojít k nesprávné interpretaci údajů v referenčních integritách.
Režim Kontrola integrity tabulek prochází veškeré tabulky v databázi, v jejichž deklaraci jsou popsané referenční integrity a kontroluje, zda data v těchto tabulkách splňují příslušné podmínky. V závěru tohoto režimu se zobrazí seznam tabulek v nichž jsou nalezeny případné problémy, je zde uveden počet problematických záznamů a lze zobrazit tyto problematické záznamy.
Kontaktovat pracoviště technické podpory Kaskády a řešit tuto situaci se servisními pracovníky.
Kontrolu integrity tabulek by měl technický správce Kaskády provést vždy po nestandardním ukončení chodu SQL serveru, ať již k tomu došlo z jakéhokoliv důvodu. Před tím by však měl vždycky provést kontrolu a případnou opravu indexů.
V dialogu Výběr datové větve prostřednictvím funkce Kontrola integrity tabulek, která je součástí rozbalovacího tlačítka Servis.
Tato volba je dostupná pouze v případě, že nedošlo k porušení indexů po nestandardnímm ukončení chodu databázového serveru. Pokud ano, je nutné nejdříve spustit revizi indexů a teprve pak kontrolu integrity.
POZNÁMKA:
Po ukončení revize indexů program automaticky nabídne i spuštění kontroly integrity tabulek. V případě, že tuto
kontrolu spustíte v rámci revize indexů, není nutné kontrolu integrity spouštět samostatně ještě jednou.
Kontrolu integrity tabulek nezaměňujte s funkcí "Kontrola integrity objektu", kterou lze provést v menu
. Jedná se o naprosto odlišné funkce, které jsou pouze podobné svým názvem.
![]() |
Indexy databázových tabulek a jejich revize |
![]() |
Databázový server (SQL server, databáze) |