database normalization tutorial
Ovaj će vodič objasniti što je normalizacija baze podataka i razni normalni obrasci poput 1NF 2NF 3NF i BCNF sa primjerima SQL koda:
Normalizacija baze podataka dobro je poznata tehnika koja se koristi za dizajniranje sheme baze podataka.
Glavna svrha primjene tehnike normalizacije je smanjiti suvišnost i ovisnost podataka. Normalizacija nam pomaže rastaviti velike tablice na više malih tablica definiranjem logičkog odnosa između tih tablica.
Što ćete naučiti:
- Što je normalizacija baze podataka?
- Zaključak
Što je normalizacija baze podataka?
Normalizacija baze podataka ili normalizacija SQL-a pomaže nam da grupiramo povezane podatke u jednu tablicu. Svi atributni podaci ili neizravno povezani podaci stavljaju se u različite tablice i te su tablice povezane logičkim odnosom između nadređenih i podređenih tablica.
Edgar F. Codd 1970. iznio je koncept normalizacije. Podijelio je rad pod nazivom 'Relacijski model podataka za velike zajedničke banke' u kojem je predložio 'Prvi normalni obrazac (1NF)'.
Prednosti normalizacije DBMS-a
Normalizacija baze podataka pruža sljedeće osnovne prednosti:
- Normalizacija povećava dosljednost podataka jer izbjegava dvostrukost podataka spremanjem podataka samo na jedno mjesto.
- Normalizacija pomaže u grupiranju sličnih ili srodnih podataka u istoj shemi, što rezultira boljim grupiranjem podataka.
- Normalizacija poboljšava pretraživanje brže jer se indeksi mogu brže stvarati. Stoga se normalizirana baza podataka ili tablica koristi za OLTP (mrežna obrada transakcija).
Mane normalizacije baze podataka
Normalizacija DBMS-a ima sljedeće nedostatke:
- Ne možemo pronaći povezane podatke, recimo za proizvod ili zaposlenika, na jednom mjestu i moramo se pridružiti u više tablica. To uzrokuje kašnjenje u dohvaćanju podataka.
- Dakle, normalizacija nije dobra opcija u OLAP transakcijama (mrežna analitička obrada).
Prije nego što nastavimo dalje, shvatimo sljedeće pojmove:
- Entitet: Entitet je stvarni objekt, gdje se podaci povezani s takvim objektom pohranjuju u tablici. Primjer takvih predmeta su zaposlenici, odjeli, studenti itd.
- Atributi: Atributi su obilježja entiteta koja daju neke informacije o entitetu. Na primjer, ako su tablice entiteti, tada su stupci njihovi atributi.
Vrste normalnih oblika
# 1) 1NF (prvi normalni obrazac)
Po definiciji, entitet koji nema nijedan ponavljajući stupac ili skupinu podataka može se nazvati prvim normalnim obrascem. U prvom normalnom obrascu svaki je stupac jedinstven.
Slijedi kako bi izgledala tablica naših zaposlenika i odjela da je u prvom normalnom obliku (1NF):
empNum | prezime | ime | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Utičnica | Računi | New York | Ujedinjene države |
1002 | Schwatz | Mikrofon | Tehnologija | New York | Ujedinjene države |
1009 | Kupa | Harry | HR | Berlin | Njemačka |
1007 | Harvey | Parker | Admin | London | Ujedinjeno Kraljevstvo |
1007 | Harvey | Parker | HR | London | Ujedinjeno Kraljevstvo |
Ovdje su svi stupci tablica Zaposlenika i Odjela udruženi u jedan i nema potrebe za povezivanjem stupaca, poput deptNum, jer su svi podaci dostupni na jednom mjestu.
Ali ovakva tablica sa svim potrebnim stupcima ne samo da će biti teško za upravljanje, već i za izvođenje operacija, a također i neučinkovita s gledišta pohrane.
# 2) 2NF (drugi normalni obrazac)
Po definiciji, entitet koji je 1NF i jedan od njegovih atributa definiran je kao primarni ključ, a preostali atributi ovise o primarnom ključu.
Slijedi primjer kako bi izgledala tablica zaposlenika i odjela:
Tablica zaposlenih:
empNum | prezime | ime |
---|---|---|
1001 | Andrews | Utičnica |
1002 | Schwatz | Mikrofon |
1009 | Kupa | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Tablica odjela:
deptNum | deptName | deptCity | deptCountry |
---|---|---|---|
jedan | Računi | New York | Ujedinjene države |
dva | Tehnologija | New York | Ujedinjene države |
3 | HR | Berlin | Njemačka |
4 | Admin | London | Ujedinjeno Kraljevstvo |
Tablica EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
jedan | 1001 | jedan |
dva | 1002 | dva |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Ovdje možemo primijetiti da smo tablicu podijelili u 1NF obliku na tri različite tablice. tablica Zaposlenici je cjelina o svim zaposlenicima tvrtke i njezini atributi opisuju svojstva svakog zaposlenika. Primarni ključ za ovu tablicu je empNum.
Slično tome, tablica Odjeljenja entitet je o svim odjelima u tvrtki i njezini atributi opisuju svojstva svakog odjela. Primarni ključ za ovu tablicu je deptNum.
U trećoj tablici kombinirali smo primarne ključeve obje tablice. Primarni ključevi tablica zaposlenika i odjela u ovoj trećoj tablici nazivaju se stranim ključevima.
Ako korisnik želi izlaz sličan onome koji smo imali u 1NF-u, tada se mora pridružiti sve tri tablice, koristeći primarne ključeve.
Uzorak upita izgledao bi kao što je prikazano u nastavku:
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 (treći uobičajeni obrazac)
Prema definiciji, tablica se smatra trećim normalnim ako je tablica / entitet već u drugom normalnom obliku, a stupci tablice / entiteta nisu tranzitivno ovisni o primarnom ključu.
Razumijemo neprelaznu ovisnost, uz pomoć sljedećeg primjera.
Recimo tablica pod nazivom, Kupac ima donje stupce:
CustomerID - Primarni ključ koji identificira jedinstvenog kupca
KupacZIP - poštanski broj mjesta u kojem kupac boravi
CustomerCity - Grad u kojem kupac boravi
U gornjem slučaju, stupac CustomerCity ovisi o stupcu CustomerZIP, a stupac CustomerZIP ovisi o CustomerID.
Gornji scenarij naziva se tranzitivna ovisnost stupca CustomerCity o CustomerID, tj. Primarnom ključu. Nakon razumijevanja prijelazne ovisnosti, razgovarajmo sada o problemu s tom ovisnošću.
Mogao bi postojati mogući scenarij u kojem se vrši neželjeno ažuriranje tablice za ažuriranje CustomerZIP-a na poštanski broj drugog grada bez ažuriranja CustomerCity-a, čime se baza podataka ostavlja u nedosljednom stanju.
Da bismo riješili ovaj problem, moramo ukloniti prijelaznu ovisnost koja bi se mogla napraviti stvaranjem druge tablice, recimo, tablice CustZIP koja sadrži dva stupca, tj. CustomerZIP (kao primarni ključ) i CustomerCity.
Stupac CustomerZIP u tablici Customer inozemni je ključ CustomerZIP-a u tablici CustZIP. Ovaj odnos osigurava da nema anomalija u ažuriranjima u kojima se CustomerZIP ažurira bez unošenja promjena u CustomerCity.
# 4) Boyce-Coddov normalan obrazac (3,5 normalni obrazac)
Prema definiciji, tablica se smatra Boyce-Coddovim normalnim oblikom, ako je već u Trećem normalnom obliku i za svaku funkcionalnu ovisnost između A i B, A bi trebao biti super ključ.
Ova definicija zvuči pomalo komplicirano. Pokušajmo ga slomiti da bismo ga bolje razumjeli.
- Funkcionalna ovisnost: Kaže se da su atributi ili stupci tablice funkcionalno ovisni kada atribut ili stupac tablice jedinstveno identificiraju druge atribute ili stupce iste tablice.
Na primjer, stupac empNum ili Broj zaposlenika jedinstveno identificira ostale stupce poput Imena zaposlenika, Plaće zaposlenika itd. u tablici Zaposlenika. - Super ključ: Pojedinačni ključ ili grupa više ključeva koji mogu jedinstveno identificirati jedan redak u tablici mogu se nazvati Super ključem. Općenito, takve tipke poznajemo kao kompozitne tipke.
Razmotrimo sljedeći scenarij kako bismo shvatili kada postoji problem s trećim normalnim obrascem i kako Boyce-Coddov uobičajeni obrazac dolazi u pomoć.
empNum | ime | praznost | deptName | deptHead |
---|---|---|---|---|
1001 | Utičnica | New York | Računi | Raymonde |
1001 | Utičnica | New York | Tehnologija | Donald |
1002 | Harry | Berlin | Računi | Krilati plod |
1007 | Parker | London | HR | Elizabeth |
1007 | Parker | London | Infrastruktura | Tom |
U gornjem primjeru zaposlenici s empNum 1001 i 1007 rade u dva različita odjela. Svaki odjel ima voditelja odjela. Za svaki odjel može biti više pročelnika. Kao i za odjel za račune, Raymond i Samara dva su šefa odjela.
U ovom su slučaju empNum i deptName super ključevi, što implicira da je deptName glavni atribut. Na temelju ova dva stupca možemo svaki redak identificirati jedinstveno.
Također, deptName ovisi o deptHead, što implicira da je deptHead neprimjeran atribut. Ovaj kriterij diskvalificira tablicu da je dio BCNF-a.
Da bismo to riješili, tablicu ćemo razbiti na tri različite tablice kako je spomenuto u nastavku:
Tablica zaposlenih:
empNum | ime | praznost | deptNum |
---|---|---|---|
1001 | Utičnica | New York | D1 |
1001 | Utičnica | New York | D2 |
1002 | Harry | Berlin | D1 |
1007 | Parker | London | D3 |
1007 | Parker | London | D4 |
Tablica odjela:
deptNum | deptName | deptHead |
---|---|---|
D1 | Računi | Raymonde |
D2 | Tehnologija | Donald |
D1 | Računi | Krilati plod |
D3 | HR | Elizabeth |
D4 | Infrastruktura | Tom |
# 5) Četvrti normalni obrazac (4 normalni obrazac)
Prema definiciji, tablica je u četvrtom normalnom obliku, ako nema dva ili više neovisnih podataka koji opisuju relevantni entitet.
# 6) Peti normalni obrazac (5 normalni obrazac)
Tablica se u Petom normalnom obrascu može smatrati samo ako zadovoljava uvjete za Četvrti uobičajeni obrazac i može se rastaviti u više tablica bez gubitka podataka.
Često postavljana pitanja i odgovori
P # 1) Što je normalizacija u bazi podataka?
proglasi niz nizova u javi
Odgovor: Normalizacija baze podataka je tehnika dizajniranja. Korištenjem ovoga možemo dizajnirati ili redizajnirati sheme u bazi podataka kako bismo smanjili suvišne podatke i ovisnost podataka razbijanjem podataka u manje i relevantnije tablice.
P # 2) Koje su različite vrste normalizacije?
Odgovor: Slijede različite vrste normalizacijskih tehnika koje se mogu koristiti za dizajniranje shema baze podataka:
- Prvi uobičajeni obrazac (1NF)
- Drugi normalni obrazac (2NF)
- Treći uobičajeni obrazac (3NF)
- Boyce-Coddov uobičajeni oblik (3,5NF)
- Četvrti normalni oblik (4NF)
- Peti normalni obrazac (5NF)
P # 3) Koja je svrha normalizacije?
Odgovor: Primarna svrha normalizacije je smanjenje suvišnosti podataka, tj. Podaci se trebaju pohraniti samo jednom. Na taj se način izbjegavaju bilo kakve anomalije podataka koje bi mogle nastati kada pokušavamo iste podatke pohraniti u dvije različite tablice, ali promjene se primjenjuju samo na jednu, a ne na drugu.
P # 4) Što je denormalizacija?
Odgovor: Denormalizacija je tehnika za povećanje performansi baze podataka. Ova tehnika dodaje suvišne podatke u bazu podataka, za razliku od normalizirane baze podataka koja uklanja suvišnost podataka.
To se radi u ogromnim bazama podataka, gdje je izvršavanje JOIN-a radi dobivanja podataka iz više tablica skupa stvar. Dakle, suvišni podaci pohranjeni su u više tablica kako bi se izbjegle JOIN operacije.
Zaključak
Do sada smo svi prošli tri oblika normalizacije baze podataka.
Teoretski, postoje viši oblici normalizacija baze podataka poput Boyce-Codd-ovog normalnog oblika, 4NF, 5NF. Međutim, 3NF je uobičajeni oblik normalizacije u proizvodnim bazama podataka.
Sretno čitanje !!
Preporučena literatura
- Ispitivanje baze podataka pomoću JMetera
- MongoDB Stvori sigurnosnu kopiju baze podataka
- MongoDB Vodič za izradu baze podataka
- 10 najboljih alata za dizajn baze podataka za izgradnju složenih modela podataka
- Izvedba MongoDB-a: izvedba zaključavanja, greške stranice i profiliranje baze podataka
- Pregled relacijske baze podataka Altibase otvorenog koda
- MongoDB Profiler baze podataka za praćenje upita i izvedbe
- Kako testirati Oracle bazu podataka