Vyhněte se přechodným závislostem, abyste pomohli zajistit normalizaci
Přechodná závislost v databázi je nepřímý vztah mezi hodnotami ve stejné tabulce, která způsobuje funkční závislost . Chcete-li dosáhnout standardní normalizace třetího normálního formátu (3NF), musíte odstranit jakoukoli přechodnou závislost.
Svou povahou vyžaduje přechodná závislost tři nebo více atributů (nebo databázových sloupců), které mají mezi sebou funkční závislost, což znamená, že sloupec A v tabulce se spoléhá na sloupec B přes prostřední sloupec C.
Uvidíme, jak to může fungovat.
Příklad přechodné závislosti
AUTORY
ID autora | Autor | Rezervovat | Národní autorita |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderova hra | Spojené státy |
Auth_001 | Orson Scott Card | Enderova hra | Spojené státy |
Auth_002 | Margaret Atwoodová | Příběh dívky | Kanada |
Ve výše uvedeném příkladu AUTHORS:
- Book → Author : Zde atribut Book určuje atribut Author . Pokud znáte název knihy, můžete se dozvědět jméno autora. Autor však neurčuje knihu , protože autor může psát více knih. Například jen proto, že známe autorské jméno Orson Scott Card, jméno knihy ještě neznáme.
- Autor → Národní autorita : Stejně tak atribut Autor určuje Národní autoritu , ale ne jiným způsobem; jen proto, že známe národnost neznamená, že můžeme určit autora.
Tato tabulka však představuje přechodnou závislost:
- Kniha → Národní autorita: Pokud známe název knihy, můžeme určit státní příslušnost ve sloupci Autor.
Vyhýbání se přechodným závislostem
Abychom zajistili třetí normální formu, odstraníme přechodnou závislost.
Můžeme začít tím, že odstraníme sloupec Kniha z tabulky Autoři a vytvoříme samostatnou tabulku Knihy:
KNIHY
ID knihy | Rezervovat | ID autora |
---|---|---|
Book_001 | Enderova hra | Auth_001 |
Book_001 | Děti mysli | Auth_001 |
Book_002 | Příběh dívky | Auth_002 |
AUTORY
ID autora | Autor | Národní autorita |
---|---|---|
Auth_001 | Orson Scott Card | Spojené státy |
Auth_002 | Margaret Atwoodová | Kanada |
To opravilo to? Podívejme se nyní na naše závislosti:
KNIHY tabulka :
- Book_ID → Book: Kniha závisí na ID knihy .
- V tabulce neexistují žádné další závislosti, takže jsme v pořádku. Všimněte si, že cizí klíč Author_ID propojuje tuto tabulku s tabulkou AUTHORS prostřednictvím primárního klíče Author_ID . Vytvořili jsme vztah, aby se zabránilo přechodové závislosti, což je klíčový návrh relačních databází.
Tabulka AUTORŮ :
- Autor_ID → Autor: Autor závisí na ID autorů .
- Autor → Národní autorita: Národnost může být určena autorem.
- Author_ID → National_Naturalita: Národní charakter může být určen z ID autorů prostřednictvím atributu Author . Stále máme přechodnou závislost.
Musíme přidat třetí tabulku k normalizaci těchto údajů:
ZEMĚ
ID země | Země |
---|---|
Coun_001 | Spojené státy |
Coun_002 | Kanada |
AUTORY
ID autora | Autor | ID země |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwoodová | Coun_002 |
Nyní máme tři tabulky, které používají cizí klíče k propojení mezi tabulkami:
- Zahraniční klíč tabulky BOOK Author_ID propojuje knihu s autorem v tabulce AUTHORS .
- Zahraniční klíč tabulky AUTORŮ Country_ID propojí autor do země v tabulce COUNTRIES.
- Tabulka COUNTRIES nemá žádný cizí klíč, protože v tomto návrhu není třeba odkazovat na jinou tabulku.
Proč jsou přechodné závislostí špatné
Jaká je hodnota vyloučení přechodových závislostí, které pomohou zajistit 3NF? Zvažme znovu náš první stůl a uvidíme problémy, které vytváří:
AUTORY
ID autora | Autor | Rezervovat | Národní autorita |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderova hra | Spojené státy |
Auth_001 | Orson Scott Card | Děti mysli | Spojené státy |
Auth_002 | Margaret Atwoodová | Příběh dívky | Kanada |
Tento typ konstrukce může přispět k datovým anomáliím a nesrovnalostem, například:
- Pokud jste odstranili dvě knihy "Děti z mysli" a "Enderova hra", vymazali byste autora "Orson Scott Card" a jeho národnost úplně z databáze.
- Do databáze nelze přidat nového autora, pouze pokud přidáte knihu; co když je autor dosud nepublikován nebo neznáte název knihy, kterou napsala?
- Pokud "Orson Scott Card" změnil své občanství, museli byste to změnit ve všech dokumentech, ve kterých se objeví. Mít více záznamů se stejným autorem může mít za následek nepřesné údaje: co když osoba, která zadá data, si neuvědomuje, že pro ni existuje více záznamů a změní data pouze v jednom záznamu?
- Nemůžete smazat knihu jako "Příběh dívky", aniž by se autor zcela odstranil.
To jsou jen některé důvody, proč normalizace a vyloučení přechodných závislostí chrání data a zajišťují konzistenci.