Tretja normalna oblika

Tretja Normalna Oblika



To je tretji del serije Pet normalnih oblik. Naslova prvih dveh delov (vadnic) sta Prva normalna oblika, sledi Druga normalna oblika. V tem delu serije je razložena tretja normalna oblika.

Razlaga sledi zgodbi: oče je umrl in pustil nekaj denarja za svojega sina. Sin se je odločil denar vložiti v trgovino. Priročna trgovina, znana tudi kot samopostrežna trgovina, je majhno maloprodajno podjetje, ki prejema vsakdanje predmete od dobaviteljev in jih prodaja posameznim strankam v soseščini.







V tem trenutku je trgovina že založena in nekaj razprodaj je že bilo. Sin, ki je lastnik podjetja, ima nekaj zaposlenih, ki se v tej vadnici imenujejo uradniki. Lastnik in kateri koli zaposleni lahko prejmejo zaloge in prodajajo po evidentiranju izdelkov.



Vendar pa pred začetkom trgovine niti lastnik niti zaposleni niso vedeli ničesar o običajnih oblikah. Tako so vse beležili kot transakcije v eno tabelo in eno vadnico. Niso imeli računalnika.



Vi, bralec, ste dokončali pet delov te serije vadnic; zdaj ste razvijalec baze podatkov. Lastnik trgovine je vaš prijatelj. Pred dvema dnevoma ste obiskali trgovino in usposobili lastnika in prodajalce za izdelavo mize v prvi normalni obliki. Včeraj ste obiskali tudi trgovino in jih učili, kako iz prve normalne oblike ustvariti tabelo v drugi normalni obliki.





Danes ste pravkar prišli v trgovino na obisk, da bi jih naučili, kako iz druge normalne oblike izdelati mizo v tretji normalni obliki. Vse tabele, ki jih imajo trenutno, so v drugi normalni obliki. Tabele (po imenu in naslovih stolpcev) so:

Izdelki (ID izdelka, ID kategorije, izdelek)
Kategorije (ID kategorije, kategorija)



Prodaja (ID prodaje, stranka, zaposleni, datum)
SaleDetails(saleID, productID, numberSold, sellingPrice)

Naročila (ID naročila, dobavitelj, zaposleni, datum)
OrderDetails(orderID, productID, numberBought, costPrice)

Enotni ali sestavljeni ključi so podčrtani.

Ko povzamete, kaj ste se učili v prejšnjih dveh dneh in preden ste lahko kar koli naredili, lastnik vpraša:

»Kaj pa telefonske številke, naslovi itd. za stranke in zaposlene?

Kaj pa količina na zalogi, stopnja ponovnega naročila itd. za izdelke?
Ali potrebujejo svoje ločene mize ali jih je treba namestiti v sedanje mize?«

Vi, razvijalec baze podatkov, odgovorite:

»Čestitam, lastnik! Posredno ste predstavili vprašanje tretje normalne oblike.

Ti nadaljuj.

Drugi potrebni stolpci

Drugi potrebni stolpci se najprej dodajo prejšnjim tabelam, ki so v 1NF in 2NF. Nekatera prejšnja imena stolpcev so spremenjena.

Tabela kategorij mora imeti vsaj naslednje stolpce:

Kategorije (ID kategorije, ime kategorije, opis)

Opis je kratek odstavek, ki opisuje kategorijo. Ta tabela kategorij je že v 1NF, 2NF in 3NF. 3NF je razložen spodaj:

Tabela izdelkov mora imeti vsaj naslednje stolpce:

Izdelki (ID izdelka, ID kategorije, ID dobavitelja, ime izdelka, cena enote, količina na zalogi, stopnja ponovnega naročila)

Ker se vsak izdelek prodaja, bo dosežena nizka raven (število) izdelkov, ko je treba izdelek ponovno naročiti, zato kupci ne bi smeli priti v trgovino in ne imeti izdelka. Takšna odsotnost ni dobra za posel. quantityInStock je število določenega izdelka na zalogi. To vključuje tisto, kar je v trgovini in tisto, kar je na polici.

categoryID in SupplierID sta tuja ključa. Zato imajo namesto enojnega podčrtaja pomišljaj. Tuji ključ je razložen spodaj. V prejšnjem delu niza (druga običajna oblika) je bil categoryID del primarnega ključa z enim samim podčrtajem zaradi tega, kako je bil dosežen. Vendar bi bilo iz spodnje razlage jasno, da mora biti ID kategorije tuji ključ (s podčrtanim pomišljajem).

Ta tabela izdelkov je že v 1NF, 2NF in 3NF. Poglejte, zakaj je v 3NF spodaj:

Tabela SaleDetails mora imeti vsaj naslednje stolpce:

SaleDetails(saleID, productID, enotaSellingPrice, količina, popust)

Pričakuje se, da bo vrednost popusta večino časa enaka nič. Popust je popust, ki ga trgovina da kupcu.

Tabela OrderDetails mora imeti vsaj naslednje stolpce:

Podrobnosti naročila (ID naročila, ID izdelka, cena enote, količina, popust)

Pričakuje se, da bo vrednost popusta večino časa enaka nič. Popust tukaj je popust, ki ga dobavitelj da trgovini.

Kot je prikazano spodaj, se lahko tabela izdelkov obravnava v 2NF ali 3NF. Tabele prodaje in naročila imajo težavo 3NF. Za razlago težave in rešitve bo uporabljena samo tabela prodaje. 3NF za tabelo naročil in tabelo izdelkov sledita podobnemu sklepanju in bi bila le navedena.

Med dodajanjem stolpcev bi bila tabela Prodaja:

Prodaja (ID prodaje, ime prodane stranke, telefon, naslov, mesto, regija, poštna številka, država, zaposleni)

Sedem stolpcev je zamenjalo stolpec stranke v izvirni tabeli. Ker so stranke ljudje v soseski, lahko celice za stolpce za mesto, regijo (državo), poštno številko in državo pustite prazne, čeprav v tem članku niso prazne.

Ta tabela prodaje je še vedno v 2NF, saj pravila 1NF in 2NF niso bila kršena. Vendar se je treba zavedati, da je v vrstici tabele Prodaja stranka (ime) nadomeščena s sedmimi celicami vrstice stranke.

Opomba: celica z naslovom vsebuje hišno številko, ime ulice ali ceste in ime mesta, vse ločeno z vejicami. Mesto lahko štejemo za sestavljeno iz več mest. Čeprav vejice ločujejo te določene komponente niza, tvorijo eno vrednost celice in ne treh vrednosti celice.

Tudi stolpec zaposleni je treba nadomestiti s sedmimi takimi stolpci. Vendar tega v tej vadnici ni storjeno, da bi prihranili čas in prostor pri poučevanju. Torej je tabela prodaje s podatki lahko:

Prodajna tabela – 2NF – Brez ID-ja stranke

Podatkovni tip stolpca SaleID je celo število ali, bolje rečeno, samodejno povečevanje. Podatkovni tip stolpca dateSold je datum in ne številka, ker ima znak »/«, ki ni številka. Vrsta podatkov za preostale stolpce, vključno s stolpcem telefona, je niz (ali besedilo). Telefonska vrednost ima znak '-', ki ni številka.

Upoštevajte, da je bila za vsako vrstico stranka (ime), kot je bilo v prejšnjem delu niza, nadomeščena s sedmimi celicami, od katerih je ena še vedno ime stranke. To pomeni, da so podatki o strankah entiteta. Trenutno ime stranke identificira njenih šest drugih podatkov v vrsti. Če je ta tabela programirana, bo priročno identificirati strankino entiteto v vsaki vrstici s celim številom (ne samodejnim prirastkom). V tem primeru mora biti stolpec customerID pred customerName. Prejšnja tabela postane:

Prodajna tabela – 2NF – z ID-jem stranke

Obstajajo trije ID-ji strank: 1, 2 in 3, pri čemer se 1 pojavi petkrat za Johna Smitha, 2 se pojavi dvakrat za Jamesa Taylorja in 3 se pojavi enkrat za Susan Wright.

Upoštevajte, da se nekateri ID-ji strank in njihovi odvisniki ponavljajo.

Pravila za tretjo normalno obliko

Tabela je v tretji normalni obliki, če upošteva naslednja pravila:

  1. Moral bi biti že v drugi normalni obliki.
  2. In ne bi smel imeti prehodne odvisnosti.

Nato eden od uradnikov (zaposlenih) vpraša: 'Kaj je prehodna odvisnost?'. In vi, razvijalec baze podatkov, odgovorite: 'To je dobro vprašanje!'

Prehodna odvisnost

Res je, da v vrstici SaleID identificira vse vrednosti v vrstici; vendar customerID identificira svojih sedem podatkovnih vrednosti, ne identificira pa preostalih vrednosti, ki jih identificira SaleID v tej vrstici. Povedano drugače, SaleID je odvisen od desetih vrednosti celic v vsaki vrstici. Vendar je customerID odvisen od sedmih vrednosti celic v isti vrstici, vendar customerID ni odvisen od SaleID-a in drugih vrednosti, od katerih je odvisen SaleID.

Takšna odvisnost za ID stranke je prehodna odvisnost. CustomerID pa se imenuje tuji ključ in je v tej seriji vadnic, Pet običajnih obrazcev, podčrtan s pomišljajem.

Recimo, da je neprimarni atribut (neprimarna vrednost celice) odvisen od drugih neprimarnih atributov in zadevni neprimarni atribut (npr. customerID in njegovi odvisniki) ni odvisen od primarnega ključa in preostale celice vrednosti v vrstici. Potem je to prehodna odvisnost.

Prejšnja tabela prodaje s tujim ključem in njegovimi odvisniki bi povzročila računovodske težave (anomalije).

Tabela prodaje od 2NF do 3NF

Če želite rešiti problem, ki ga predstavljajo tuji ključ in njegovi odvisniki, odstranite tuji ključ in njegove odvisnike, da oblikujete novo tabelo brez ponovitev. Toda tudi če tuji ključ ni odvisen od primarnega ključa, je primarni ključ odvisen od tujega ključa. Torej mora kopija tujega ključa ostati v nadrejeni tabeli. Nova prodajna tabela je na tej točki skladna z 1NF, 2NF in 3NF; to je nadrejena tabela. Nova podrejena tabela iz prejšnje tabele Prodaja je prav tako združljiva z 1NF, 2NF in 3NF. Ime podrejene tabele s tujim ključem in njegovimi odvisniki je Stranke. Če primernega imena ni mogoče najti, je šlo nekaj narobe z analizo. Nova tabela prodaje v 3NF je:

Končna prodajna tabela v 3NF

Ta tabela v 3NF ima enako število vrstic kot tista v 2NF, vendar z manj stolpci.

Zapis tabele za to končno tabelo prodaje v 3NF je:

Prodaja (ID prodaje, datum prodaje, ID stranke, ID zaposlenega)

SaleID je primarni ključ z enim podčrtajem. customerID je tuji ključ s podčrtanim pomišljajem. EmploeID je tudi tuji ključ s podčrtanim pomišljajem. Upoštevajte, da je situacija zaposlenih v tabeli Prodaja v 2NF enaka situaciji stranke. EmploeeID in njegove lastne odvisnike je treba odstraniti, da se oblikuje druga tabela; ostane kopija ID zaposlenega.

Opomba: saleID, customerID in EmploeeID ne tvorijo sestavljenega ključa. saleID je odvisen od customerID in EmploeeID.

Razmerje med saleID in customerID je mnogo proti ena.

Tabela strank v 3NF

Ta tabela ima tri vrstice namesto 9 vrstic v tabeli 2NF Sales. V tej tabeli je CustomerID primarni ključ. Je enak kot tuji ključ v tabeli Sales, vendar brez ponovitev. Tuji ključ v tabeli Prodaja in primarni ključ v tabeli Stranka povezujeta obe tabeli.

Ponavljajoče se vrstice v tabeli strank so bile odstranjene, da ne bi kršili 1NF.

Kot lahko bralec vidi, bi postavitev tabele v 3NF rešila tudi problem ponavljajočih se vrstic (redundanca).

Zapis tabele za tabelo strank je:

Stranke (ID stranke, Ime stranke, telefon, naslov, mesto, regija, poštna številka, država)

Pregled tabele izdelkov

Zgornja tabela izdelkov v notni obliki je:

Izdelki (ID izdelka, ID kategorije, ID dobavitelja, ime izdelka, cena enote, količina na zalogi, stopnja ponovnega naročila)

Primarni ključ tukaj je productID. categoryID in SupplierID sta tuja ključa. Podobno kot tabela Stranka obstaja tabela Kategorije, kjer je ID kategorije primarni ključ, in tabela Dobavitelj, kjer je ID dobavitelja primarni ključ.

Če bodo vrednosti za celice za unitPrice, quantityInStock in reorderLevel ostale fiksne, potem je tabela Products, kakršna je, resnično v 3NF. Če se bodo te vrednosti spreminjale, je tabela izdelkov, kot je, v 2NF. V tem delu serije vadnic se predpostavlja, da te vrednosti skozi čas ostanejo nespremenjene.

Vse mize

Vse tabele so zdaj v 3NF. Prikazane so kot:

Zaposleni (ID zaposlenega, ime, telefon, naslov, mesto, regija, poštna številka, država, rojstni datum, datum zaposlitve, datum sprostitve)

Dobavitelji (ID dobavitelja, ime, telefon, naslov, mesto, regija, poštna številka, država)

Izdelki (ID izdelka, ID kategorije, ID dobavitelja, ime izdelka, cena enote, količina na zalogi, stopnja ponovnega naročila)
Kategorije (ID kategorije, ime kategorije, opis)

Prodaja (ID prodaje, datum prodaje, ID stranke, ID zaposlenega)
SaleDetails(saleID, productID, numberSold, sellingPrice)
Stranke (ID stranke, Ime stranke, telefon, naslov, mesto, regija, poštna številka, država)

Naročila (ID naročila, datum prodaje, ID dobavitelja, ID zaposlenega)
OrderDetails(orderID, productID, numberBought, costPrice)

Iz samo ene tabele, ki so jo izdelali novinci, je bilo izdelanih do devet profesionalnih tabel, da se preprečijo težave z redundanco in računovodstvom (anomalije pri vstavljanju, brisanju in posodabljanju). Samo miza za začetnike bi povzročila finančne izgube.

Testiranje osebja

Na tej točki bi morali vsi zaposleni, vključno z lastnikom, razumeti 1NF, 2NF in 3NF. Vendar jih je treba preizkusiti. Vsi, vključno z lastnikom, bodo sedeli na različnih mestih in opravili test. Test, sestavljen iz enega vprašanja, bo trajal eno uro in je naslednji:

Vprašanje: S pomočjo pravil za 1NF, 2NF in 3NF dokažite, da je vseh zgornjih devet tabel že v prvi normalni obliki, drugi normalni obliki in tretji normalni obliki. Ni nujno, da so stranke in dobavitelji resnične osebe. Podatki za tabele morajo podpirati zapise tabele.

Medtem ko oni opravljajo test, greste vi kot razvijalec podatkovne baze na prigrizek in pivo, ki se vrnete čez eno uro.

Bližnja in daljna prihodnost

Medtem ko ste vi, razvijalec baze podatkov, odsotni, razmislite tudi o tem, kaj bi jim svetovali, če vsi opravijo test.

Medtem ko ste jih usposabljali in zdaj, ko opravljajo izpit, so stranke prihajale in odhajale, ne da bi bile postrežene. To ni dobro za posel in vi, razvijalec baze podatkov, to veste. Nekatere stranke lahko odidejo v konkurenčne trgovine in se nikoli ne vrnejo.

Vi, razvijalec baze podatkov, ste stari 30 let. Lastnik je kot vaš prijatelj tudi star 30 let. Uradniki (uslužbenci) so stari od 18 do 24 let. Vse lastnosti, ki so jih potrebovali za delo pri lastniku so bile: da so zdravi, da znajo brati in pisati, da znajo seštevati, odštevati, množiti in deliti. , ter znati uporabljati računalnik in internet.

Ko je tabela v 3NF, je večina ranljivosti odstranjena iz baze podatkov. Številne komercialne zbirke podatkov ne presegajo 3NF in podjetja ali podjetja so udobna.

Torej, če vsi opravijo test, boste prosili uradnike, da gredo delat naprej. Prav tako jim boste svetovali, naj prihranijo dele svojih plač, da bodo lahko imeli svoje trgovine z mešanim blagom. Jutri boste nadaljevali z usposabljanjem samo lastnika v 4NF in 5NF. S poznavanjem 4NF in 5NF so vse znane ranljivosti odstranjene.

Evalvacija

Po eni uri se vi, razvijalec baze podatkov, vrnete. Označite njihove scenarije. Odlična novica! Vsi, vključno z lastnikom, imajo vsak po 100%. Hura! To je odlično!

Čestitke torej vsem vam: učiteljici in učencem.

V tej vadnici vam ne preostane drugega kot zaključiti.

Zaključek

Tabela je v prvi normalni obliki, če ne krši nobenega od naslednjih pravil:

  1. Vsi stolpci v tabeli morajo imeti edinstvena imena glav.
  2. Vsaka celica mora imeti samo eno vrednost.
  3. Vrednosti, shranjene v stolpcu, morajo biti iste vrste.
  4. Vrstice naj bodo ločene.
  5. Vrstni red stolpcev ali vrstic ni pomemben.

Tabela je v drugi normalni obliki, če ne krši nobenega od naslednjih pravil:

  1. Tabela mora biti že v prvi normalni obliki.
  2. Ne sme biti delne odvisnosti.

Tabela je v tretji normalni obliki, če ne krši nobenega od naslednjih pravil:

  1. Mora biti že v drugi normalni obliki.
  2. In ne sme imeti tranzitivne odvisnosti.

Ti, razvijalec baze podatkov, povej uradnikom, da so se dovolj naučili. Dajete nasvete in jih prosite, naj se vrnejo na delo in privzeto ostanejo na svojih postajah.

Samo z lastnikom se dogovorite za sestanek, ki bo jutri v njegovi pisarni za usposabljanje na 4NF in 5NF.