Plná funkční závislost je stav normalizace databáze, který se rovná normalizační normě druhého normálního formátu (2NF) . Stručně řečeno, to znamená, že splňuje požadavky prvního normálního formuláře (1NF) a všechny atributy bez klíče jsou plně funkční závislé na primárním klíči.
To není tak složité, jak to může znít. Podívejme se na to podrobněji.
Shrnutí prvního normálního formuláře
Předtím, než může být databáze plně funkční závislá, musí nejprve vyhovět normálnímu prvnímu formuláři .
To všechno znamená, že každý atribut musí mít jednu atomovou hodnotu.
Například následující tabulka není v souladu s 1NF, protože zaměstnanec Tina je spojen se dvěma místy, oba v jedné buňce:
Zaměstnanec | Umístění |
---|---|
John | Los Angeles |
Tina | Los Angeles, Chicago |
Povolení tohoto návrhu by mohlo negativně ovlivnit aktualizace nebo záznamy dat. Aby byla zajištěna shoda s 1NF, uspořádejte tabulku tak, aby všechny atributy (nebo sloupcové buňky) obsahovaly jednu hodnotu:
Zaměstnanec | Umístění |
---|---|
John | Los Angeles |
Tina | Los Angeles |
Tina | Chicago |
Ale 1NF stále není dost, aby se předešlo problémům s daty.
Jak 2NF pracuje na zajištění plné závislosti
Chcete-li být zcela závislí, musí být všechny atributy klíčových kandidátů závislé na primárním klíči. (Pamatujte si, že klíčovým atributem klíče je libovolný klíč (například primární nebo cizí klíč) používaný k jednoznačné identifikaci záznamu databáze.
Návrháři databází používají notaci k popisu závislých vztahů mezi atributy:
Jestliže atribut A určuje hodnotu B, zapíšeme to A -> B - což znamená, že B je funkčně závislé na A. V tomto vztahu A určuje hodnotu B, zatímco B závisí na A.
Například v následující tabulce oddělení zaměstnanců jsou EmployeeID a DeptID kandidátní klíče: EmployeeID je primární klíč tabulky, zatímco DeptID je cizí klíč.
Jakýkoli jiný atribut - v tomto případě název_emulti a DeptName - musí záviset na primárním klíči, aby získal jeho hodnotu.
EmployeeID | Jméno zaměstnance | DeptID | DeptName |
---|---|---|---|
Emp1 | John | Dept001 | Finance |
Emp2 | Tina | Dept003 | Odbyt |
Emp3 | Carlos | Dept001 | Finance |
V takovém případě tabulka není plně závislá, protože zatímco EmployeeName závisí na primárním klíči EmployeeID, DeptName závisí místo toho na DeptID. To se nazývá částečná závislost .
Aby byla tato tabulka v souladu s 2NF, musíme data oddělit do dvou tabulek:
EmployeeID | Jméno zaměstnance | DeptID |
---|---|---|
Emp1 | John | Dept001 |
Emp2 | Tina | Dept003 |
Emp3 | Carlos | Dept001 |
Atribut DeptName odebereme z tabulky Zaměstnanci a vytvoříme novou tabulku Oddělení :
DeptID | DeptName |
---|---|
Dept001 | Finance |
Dept002 | Lidské zdroje |
Dept003 | Odbyt |
Nyní jsou vztahy mezi tabulkami plně závislé, nebo v 2NF.
Proč je důležitá plná závislost
Plná závislost mezi atributy databáze pomáhá zajistit integritu dat a zabraňuje vzniku anomálií dat.
Zvažte například tabulku ve výše uvedené části, která drží pouze 1NF. Zde je opět:
Zaměstnanec | Umístění |
---|---|
John | Los Angeles |
Tina | Los Angeles |
Tina | Chicago |
Tina má dva záznamy. Pokud aktualizujeme jednu, aniž bychom si uvědomili, že existují dva, výsledek by byl nekonzistentní.
Nebo co když chceme do tohoto stolu přidat zaměstnance, ale dosud neznáme polohu? Mohli bychom být zamítnuty dokonce přidat nového zaměstnance, pokud atribut Umístění nepovoluje hodnoty NULL.
Plná závislost však není celá situace, pokud jde o normalizaci. Musíte se ujistit, že vaše databáze je ve třetím normálním formuláři (3NF).