database normalization tutorial
V tomto výučbe sa dozviete, čo je Normalizácia databázy a rôzne normálne formuláre ako 1NF 2NF 3NF a BCNF s príkladmi kódu SQL:
Normalizácia databázy je známa technika používaná na návrh schémy databázy.
Hlavným účelom použitia normalizačnej techniky je znížiť nadbytočnosť a závislosť údajov. Normalizácia nám pomáha rozdeliť veľké tabuľky na viac malých tabuliek definovaním logického vzťahu medzi týmito tabuľkami.
Čo sa dozviete:
- Čo je normalizácia databázy?
- Záver
Čo je normalizácia databázy?
Normalizácia databázy alebo normalizácia SQL nám pomáha zoskupiť súvisiace údaje do jednej tabuľky. Akékoľvek prívlastkové údaje alebo nepriamo súvisiace údaje sa vkladajú do rôznych tabuliek a tieto tabuľky súvisia s logickým vzťahom medzi nadradenými a podradenými tabuľkami.
V roku 1970 prišiel Edgar F. Codd s konceptom normalizácie. Zdieľal príspevok s názvom „Relačný model údajov pre veľké zdieľané banky“, v ktorom navrhol „First Normal Form (1NF)“.
Výhody normalizácie DBMS
Normalizácia databázy poskytuje nasledujúce základné výhody:
- Normalizácia zvyšuje konzistenciu údajov, pretože zabraňuje duplicite údajov tým, že ich ukladá iba na jednom mieste.
- Normalizácia pomáha pri zoskupovaní podobných alebo súvisiacich údajov v rámci rovnakej schémy, čo vedie k lepšiemu zoskupovaniu údajov.
- Normalizácia zlepšuje vyhľadávanie rýchlejšie, pretože indexy je možné vytvárať rýchlejšie. Normalizovaná databáza alebo tabuľka sa preto používa na OLTP (online spracovanie transakcií).
Nevýhody normalizácie databázy
Normalizácia DBMS má nasledujúce nevýhody:
- Nemôžeme nájsť súvisiace údaje, napríklad produktu alebo zamestnanca, na jednom mieste a musíme sa pripojiť k viac ako jednej tabuľke. To spôsobí oneskorenie pri načítaní údajov.
- Normalizácia teda nie je dobrou voľbou v transakciách OLAP (online analytické spracovanie).
Než budeme pokračovať, pochopme nasledujúce podmienky:
- Subjekt: Entita je objekt v reálnom živote, kde sú údaje spojené s takýmto objektom uložené v tabuľke. Príkladom takýchto objektov sú zamestnanci, oddelenia, študenti atď.
- Atribúty: Atribúty sú charakteristiky entity, ktoré poskytujú určité informácie o entite. Napríklad, ak sú tabuľky entitami, potom sú stĺpce ich atribútmi.
Typy bežných formulárov
# 1) 1NF (prvý normálny formulár)
Podľa definície možno entitu, ktorá nemá žiadne opakujúce sa stĺpce alebo skupiny údajov, označiť ako prvý normálny formulár. V prvom normálnom formulári je každý stĺpec jedinečný.
Takto by vyzerala naša tabuľka Zamestnanci a oddelenia, keby boli v prvej normálnej forme (1NF):
empNum | priezvisko | krstné meno | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jack | Účty | New York | Spojené štáty |
1002 | Schwatz | Mike | Technológie | New York | Spojené štáty |
1009 | pohár | Harry | HR | Berlín | Nemecko |
1007 | Harvey | Parker | Admin | Londýn | Spojene kralovstvo |
1007 | Harvey | Parker | HR | Londýn | Spojene kralovstvo |
Tu boli všetky stĺpce tabuliek Zamestnanci aj Oddelenie zhromaždené do jedného a nie je potrebné spájať stĺpce, napríklad deptNum, pretože všetky údaje sú k dispozícii na jednom mieste.
Ale takáto tabuľka so všetkými požadovanými stĺpcami by bola nielen ťažko spravovateľná, ale aj ťažko vykonateľná a tiež neefektívna z hľadiska ukladania.
# 2) 2NF (druhá normálna forma)
Podľa definície je entita, ktorá je 1NF a jeden z jej atribútov, definovaná ako primárny kľúč a zvyšné atribúty závisia od primárneho kľúča.
Nasleduje príklad toho, ako by vyzerala tabuľka zamestnancov a oddelení:
Tabuľka zamestnancov:
empNum | priezvisko | krstné meno |
---|---|---|
1001 | Andrews | Jack |
1002 | Schwatz | Mike |
1009 | pohár | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Tabuľka oddelení:
odd | deptName | deptCity | deptCountry |
---|---|---|---|
1 | Účty | New York | Spojené štáty |
dva | Technológie | New York | Spojené štáty |
3 | HR | Berlín | Nemecko |
4 | Admin | Londýn | Spojene kralovstvo |
Tabuľka EmpDept:
empDeptID | empNum | odd |
---|---|---|
1 | 1001 | 1 |
dva | 1002 | dva |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Tu môžeme pozorovať, že sme tabuľku vo forme 1NF rozdelili na tri rôzne tabuľky. tabuľka Zamestnanci je entita o všetkých zamestnancoch spoločnosti a jej atribúty popisujú vlastnosti každého zamestnanca. Primárny kľúč pre túto tabuľku je empNum.
Podobne je tabuľka Oddelenia entitou všetkých oddelení v spoločnosti a jej atribúty popisujú vlastnosti každého oddelenia. Primárny kľúč pre túto tabuľku je deptNum.
V tretej tabuľke sme skombinovali primárne kľúče oboch tabuliek. Primárne kľúče tabuliek Zamestnanci a Oddelenia sa v tejto tretej tabuľke označujú ako Cudzie kľúče.
Ak chce užívateľ výstup podobný tomu, ktorý sme mali v 1NF, musí sa pripojiť ku všetkým trom tabuľkám pomocou primárnych kľúčov.
Vzorový dopyt bude vyzerať takto:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (tretí normálny tvar)
Podľa definície sa tabuľka považuje za tretiu normálnu, ak je tabuľka / entita už v druhej normálnej podobe a stĺpce tabuľky / entity nie sú prechodne závislé od primárneho kľúča.
Pochopme netranzitívnu závislosť pomocou nasledujúceho príkladu.
Povedzme tabuľku s názvom Zákazník má nasledujúce stĺpce:
CustomerID - Primárny kľúč identifikujúci jedinečného zákazníka
CustomerZIP - PSČ lokality, v ktorej sa zákazník nachádza
CustomerCity - Mesto, v ktorom má zákazník bydlisko
V uvedenom prípade je stĺpec CustomerCity závislý od stĺpca CustomerZIP a stĺpec CustomerZIP závisí od ID zákazníka.
Vyššie uvedený scenár sa nazýva tranzitívna závislosť stĺpca CustomerCity od ID zákazníka, t. J. Primárny kľúč. Po porozumení tranzitívnej závislosti si teraz poďme predstaviť problém s touto závislosťou.
Môže sa vyskytnúť situácia, že dôjde k nechcenej aktualizácii tabuľky na aktualizáciu CustomerZIP na PSČ iného mesta bez aktualizácie CustomerCity, čím dôjde k nekonzistentnému stavu databázy.
Aby sme tento problém vyriešili, musíme odstrániť prechodnú závislosť, ktorú je možné vytvoriť vytvorením ďalšej tabuľky, napríklad tabuľky CustZIP, ktorá obsahuje dva stĺpce, tj. CustomerZIP (ako primárny kľúč) a CustomerCity.
Stĺpec CustomerZIP v tabuľke Customer je cudzím kľúčom k CustomerZIP v tabuľke CustZIP. Tento vzťah zaisťuje, že v aktualizáciách, v ktorých sa aktualizuje CustomerZIP, nie sú žiadne anomálie bez vykonania zmien v CustomerCity.
# 4) Boyce-Codd normálna forma (3,5 normálnej formy)
Podľa definície sa tabuľka považuje za normálnu formu Boyce-Codd, ak je už v tretej normálnej forme a pre každú funkčnú závislosť medzi A a B by mala byť A superkľúčom.
Táto definícia znie trochu komplikovane. Pokúsme sa to prelomiť, aby sme tomu lepšie porozumeli.
- Funkčná závislosť: O atribútoch alebo stĺpcoch tabuľky sa hovorí, že sú funkčne závislé, keď atribút alebo stĺpec tabuľky jednoznačne identifikuje iný atribút (atribúty) alebo stĺpce (stĺpce) tej istej tabuľky.
Napríklad, stĺpec empNum alebo číslo zamestnanca jedinečne identifikuje ďalšie stĺpce ako meno zamestnanca, plat zamestnanca atď. v tabuľke Zamestnanec. - Super kľúč: Jeden kľúč alebo skupina viacerých kľúčov, ktoré by mohli jednoznačne identifikovať jeden riadok v tabuľke, možno označiť ako Super kľúč. Všeobecne poznáme také klávesy ako Composite Keys.
Zoberme si do úvahy nasledujúci scenár, ktorý objasní, kedy nastáva problém s treťou normálnou formou a ako prichádza na pomoc normálna forma Boyce-Codd.
empNum | krstné meno | empCity | deptName | deptHead |
---|---|---|---|---|
1001 | Jack | New York | Účty | Raymond |
1001 | Jack | New York | Technológie | Donald |
1002 | Harry | Berlín | Účty | Samara |
1007 | Parker | Londýn | HR | Alžbety |
1007 | Parker | Londýn | Infraštruktúra | Tom |
V uvedenom príklade pracujú zamestnanci s empNum 1001 a 1007 v dvoch rôznych oddeleniach. Každé oddelenie má vedúceho oddelenia. Pre každé oddelenie môže byť viac vedúcich oddelení. Rovnako ako v prípade oddelenia účtov, Raymond a Samara sú dvaja vedúci oddelení.
V tomto prípade sú empNum a deptName super kľúčmi, čo znamená, že deptName je hlavným atribútom. Na základe týchto dvoch stĺpcov môžeme jedinečne identifikovať každý jeden riadok.
Názov deptName tiež závisí od deptHead, čo znamená, že deptHead je atribút non-prime. Toto kritérium vylučuje, aby bola tabuľka súčasťou BCNF.
Aby sme to vyriešili, rozdelíme tabuľku na tri rôzne tabuľky, ako je uvedené nižšie:
Tabuľka zamestnancov:
empNum | krstné meno | empCity | odd |
---|---|---|---|
1001 | Jack | New York | D1 |
1001 | Jack | New York | D2 |
1002 | Harry | Berlín | D1 |
1007 | Parker | Londýn | D3 |
1007 | Parker | Londýn | D4 |
Tabuľka oddelení:
odd | deptName | deptHead |
---|---|---|
D1 | Účty | Raymond |
D2 | Technológie | Donald |
D1 | Účty | Samara |
D3 | HR | Alžbety |
D4 | Infraštruktúra | Tom |
# 5) Štvrtá normálna forma (4 normálna forma)
Podľa definície je tabuľka vo štvrtej normálnej forme, ak nemá dva alebo viac nezávislých údajov popisujúcich príslušnú entitu.
# 6) Piaty normálny tvar (5 normálny tvar)
Tabuľku možno považovať za piatu normálnu formu, iba ak spĺňa podmienky pre štvrtú normálnu formu, a je možné ju rozdeliť na viac tabuliek bez straty akýchkoľvek údajov.
Často kladené otázky a odpovede
Otázka 1) Čo je normalizácia v databáze?
Odpoveď: Normalizácia databázy je návrhová technika. Pomocou toho môžeme navrhnúť alebo prepracovať schémy v databáze, aby sa znížili nadbytočné údaje a závislosť údajov rozdelením údajov na menšie a relevantnejšie tabuľky.
Otázka 2) Aké sú rôzne typy normalizácie?
Odpoveď: Nasledujú rôzne typy normalizačných techník, ktoré možno použiť na návrh schém databáz:
- Prvá normálna forma (1NF)
- Druhá normálna forma (2NF)
- Tretia normálna forma (3 NF)
- Boyce-Codd normálna forma (3,5 NF)
- Štvrtý normálny tvar (4 NF)
- Piaty normálny tvar (5 NF)
Otázka č. 3) Aký je účel normalizácie?
Odpoveď: Primárnym účelom normalizácie je znížiť nadbytočnosť údajov, t. J. Údaje by sa mali ukladať iba raz. Tým sa zabráni akýmkoľvek anomáliám údajov, ktoré by mohli vzniknúť, keď sa pokúsime uložiť rovnaké údaje do dvoch rôznych tabuliek, zmeny sa však použijú iba v jednej a nie v druhej.
Otázka č. 4) Čo je denormalizácia?
Odpoveď: Denormalizácia je technika na zvýšenie výkonu databázy. Táto technika pridáva do databázy nadbytočné údaje, na rozdiel od normalizovanej databázy, ktorá odstraňuje nadbytočnosť údajov.
To sa deje v obrovských databázach, kde je vykonanie JOINu na získanie údajov z viacerých tabuliek nákladnou záležitosťou. Preto sú nadbytočné údaje uložené vo viacerých tabuľkách, aby sa zabránilo operáciám JOIN.
Záver
Doteraz sme všetci prešli tromi normalizačnými formami databázy.
Teoreticky existujú vyššie formy normalizácie databázy, ako napríklad Boyce-Codd Normal Form, 4NF, 5NF. 3NF je však najbežnejšie používanou normalizačnou formou v produkčných databázach.
čo je to testovanie bielej skrinky s príkladom
Príjemné čítanie !!
Odporúčané čítanie
- Testovanie databázy pomocou JMeter
- MongoDB Vytvorenie zálohy databázy
- Výukový program na vytvorenie databázy MongoDB
- Top 10 nástrojov na návrh databázy na zostavenie komplexných dátových modelov
- Výkon MongoDB: výkon blokovania, chyby stránok a profilovanie databázy
- Recenzia relačnej databázy Altibase Open Source
- MongoDB Database Profiler na sledovanie dotazov a výkonu
- Ako testovať databázu Oracle