Jak na databáze 6.NF : Jak předcházet insert a delete anomáliím

29. 9. 2016 16:20 Michal Šalko

Anomalita (odvozeno od slova – anomálie – tz. odchylka od normálu, výjnimečnost.) Určitě Jste se dostali při práci do stavu, když bylo potřeba někde vložit nebo smazat data a databáze se zachovala velice podivně. Pojednou Vám pracně sestavené selecty začali vracet úplně jiná data než Jste předpokládali. Prostě vznikla anomálie. Jedne z důvodů může být ten, že při sestavování datového modelu Jste nedodrželi 6. normální formu.

Abstrakce : 6. normální forma

6.NF je spojena se dvěma pojmy :

Doménová závislost (DD – Domain dependencies)

Je vazba mezi sloupcem a hodnotou, kterou může sloupec nabývat. Definice hodnoty je v definovaná doménou.

Závislost klíčů (KD – Key dependencies)

Je vazba mezi dvěma a více sloupci, které jsou klíče (např. cizí klíče).

6.NF říká, že nesmí být intrepretována (zobrazována, použita v dotazech) výhradně přímá vazba mezi klíčem a doménou v případě, že hodnota domény je definována více klíči.

Například : Ať cena výrobku je vázaná na zákazníka.  Zákazník – výrobek – cena. Jestli někde zobrazíme, nebo použijeme pouze relaci výrobek-cena, nebo zákazník-cena (Samozřejmě pokud se nejedná o agregace, nebo statistiky jako je průměr, minimum, maximum.), může to vést ke falešným údajům.

Prakticky

Vzorová situace je, když z externího zdroje dostanete data a tyto data máte napasovat do vašeho datového modelu. Například dostanete tyto data :

Externí data
id zakaznik_id vyrobek_id cena
1 1001 300 4000
2 1007 350 12000
3 1010 400 8000
4 1024 350 12000
5 1035 400 5400

Problém je když máte seznam výrobků spolu s cenou. Kolik stojí výrobek 400, který má jednou 8000 a jednou 5400 ?

Je tady tranzitivní (přenesena – nepřímá) vazba. Cena výrobku se neurčuje dle výrobku, ale dle zákazníka.  Takže změníte datový model do 3.NF asi takto.

Kouzlo 6.nf je v tom, ze v rámci tvorby datového modelu musíme uvažovat i tom, jak sestavit datový model tak, abychom předešli tvorbě relací, které neexistují. Což při tvorbě datových skladů se často stává. Když těch záznamů máte miliony a nepohlídate si to, tak dostanete falešná data (anomálii).

A jak je to s tou delete anomálií ?

Ať importovaná data jsou bez 5. řádku, teda bez insert anomálií.

Zkusme s ní vymazat záznam 1. , protože zákazník výrobek vrátil.  Když na touto strukturou uděláme select,  zjistíme že už v ní nemáme cenu výrobku 300 a v krajném případě, nám může vypadnout i celý výrobek 300.

Tyto anomálie se mohou vyskytnout v datových skladech DWH a hlavně když s nich odvozujeme pohledy. Tak pozór na to !

Závěrem

6. NF byla objevena jako nadstavba nad 1. až 5. NF a já jsem se s ní buďto přímo nebo nepřímo potkal v datových skladech. Ještě zůstavá jedna anomálie, o které chci napsat. Update anomálie, se kterou jsem se v praxi taky potkal. A netýká se tentokrát přímo datových skladů, ale o tom příště.

Sdílet