A harmadik normál forma

A Harmadik Normal Forma



Ez a sorozat harmadik része, Öt normál forma. Az első két rész (oktatóanyagok) címe: First Normal Form, majd a Second Normal Form. A sorozat ezen részében a Harmadik Normál Formát ismertetjük.

A magyarázat a történetet követi: Egy apa meghalt, és hagyott némi pénzt a fiára. A fiú úgy döntött, hogy befekteti a pénzt egy kisboltba. A kisbolt, más néven kisbolt, egy kiskereskedelmi vállalkozás, amely mindennapi cikkeket fogad be a beszállítóktól, és eladja azokat a környékbeli egyéni vásárlóknak.







Ezen a ponton az üzlet már fel van töltve, és néhány eladás már megtörtént. A fiúnak, aki a vállalkozás tulajdonosa, van néhány alkalmazottja, akiket ebben az oktatóanyagban hivatalnoknak neveznek. A tulajdonos és bármely alkalmazott a termékek rögzítése után árut vehet át és értékesíthet.



Az üzlet beindítása előtt azonban sem a tulajdonos, sem az alkalmazottak nem tudtak semmit a normál formákról. Tehát mindent tranzakcióként rögzítettek egy táblázatban és egy füzetben. Számítógépük nem volt.



Ön, olvasó, befejezte ennek az oktatóanyag-sorozatnak az öt részét; Ön most adatbázis-fejlesztő. A kisbolt tulajdonosa a barátod. Ön két napja ellátogatott az üzletbe, és kioktatta a tulajdonost és az eladókat egy asztal elkészítésére annak első normál formájában. Tegnap is ellátogattál a boltba, és megtanítottad őket, hogyan készítsenek táblázatot a második normál formában az első normál formából.





Ma éppen megérkezett az üzletbe, hogy megtanítsa őket arra, hogyan készítsenek egy asztalt a harmadik normál formában a második normál formából. Az összes jelenleg rendelkezésre álló táblázat a második normál formában van. A táblázatok (név és oszlopfejléc szerint) a következők:

Termékek (termékazonosító, kategóriaazonosító, termék)
Kategóriák (kategóriaazonosító, kategória)



Értékesítés (eladási azonosító, ügyfél, alkalmazott, dátum)
Eladás részletei (eladási azonosító, termékazonosító, számEladott, eladási ár)

Megrendelések (rendelésazonosító, szállító, alkalmazott, dátum)
Megrendelés részletei (rendelésazonosító, termékazonosító, megvásárolt szám, költségár)

Az egyes vagy összetett billentyűk aláhúzottak.

Miután összefoglalta az előző két nap tanításait, és mielőtt bármit is tehetett volna, a tulajdonos megkérdezi:

„Mi a helyzet az ügyfelek és az alkalmazottak telefonszámaival, címeivel stb.?

Mi a helyzet a termékek raktáron lévő mennyiségével, utánrendelési szintjével stb.?
Szükségük van-e saját külön asztalokra, vagy a jelenlegi asztalokba kell beilleszteni?

Ön, az adatbázis-fejlesztő válaszol:

„Gratulálunk, tulajdonos úr! Ön közvetetten bevezette a harmadik normál forma kérdését.'

Folytatod.

Egyéb szükséges oszlopok

A többi szükséges oszlop először hozzáadódik az előző táblákhoz, amelyek az 1NF-ben és a 2NF-ben vannak. Az előző oszlopnevek egy része módosul.

A Kategóriák táblázatnak legalább a következő oszlopokkal kell rendelkeznie:

Kategóriák (kategóriaazonosító, kategórianév, leírás)

A leírás egy rövid bekezdés, amely leírja a kategóriát. Ez a kategóriatáblázat már megtalálható az 1NF, 2NF és 3NF kategóriákban. A 3NF leírása az alábbiakban olvasható:

A Termékek táblázatban legalább a következő oszlopoknak kell szerepelniük:

Termékek (termékazonosító, kategóriaazonosító, szállítóazonosító, terméknév, egységár, raktáron lévő mennyiség, újrarendelési szint)

Mivel minden egyes termék értékesítésre kerül, a termékek alacsony szintje (száma) eléri a terméket, amikor a terméket újra kell rendelni, így a vásárló ne jöjjön el az üzletbe, és ne legyen nála a termék. Az ilyen távollét nem tesz jót az üzletnek. mennyiségInStock egy adott termék raktáron lévő száma. Ide tartozik, hogy mi van a boltban és mi van a polcon.

A kategóriaazonosító és a szállítóazonosító idegen kulcsok. Ezért van bennük szaggatott aláhúzás az egyszeri aláhúzás helyett. Az idegen kulcs leírása alább olvasható. A sorozat előző részében (Second Normal Form) a kategóriaazonosító az elsődleges kulcs része volt, egyetlen aláhúzással, az érkezés módja miatt. Az alábbi magyarázatból azonban egyértelmű lenne, hogy a kategóriaazonosítónak idegen kulcsnak kell lennie (szaggatott aláhúzással).

Ez a terméktáblázat már az 1NF, 2NF és 3NF változatban található. Nézze meg, miért van ez a 3NF-ben alább:

A SaleDetails táblázatnak legalább a következő oszlopokkal kell rendelkeznie:

Eladás részletei (eladási azonosító, termékazonosító, egységértékesítési ár, mennyiség, kedvezmény)

A diszkont értéke várhatóan legtöbbször nulla lesz. A kedvezmény az a kedvezmény, amelyet az üzlet ad a vásárlónak.

Az OrderDetails táblázatnak legalább a következő oszlopokkal kell rendelkeznie:

Rendelés részletei (rendelésazonosító, termékazonosító, egységköltségár, mennyiség, kedvezmény)

A diszkont értéke várhatóan legtöbbször nulla lesz. A kedvezmény itt az a kedvezmény, amelyet a szállító ad az üzletnek.

Amint alább látható, a Termékek táblázat 2NF-ben vagy 3NF-ben is figyelembe vehető. Az Értékesítési és Megrendelési táblázatokban a 3NF kiadás szerepel. Csak az értékesítési táblázatot használjuk a probléma és a megoldás magyarázatára. A 3NF a rendelési táblázathoz és a terméktáblázathoz hasonló érvelést követ, és csak idézzük.

Oszlopok hozzáadásakor az Értékesítési táblázat a következő lesz:

Értékesítés (eladási azonosító, dátumEladás vevő neve, telefon, cím, város, régió, irányítószám, ország, alkalmazott)

Az eredeti táblázatban hét oszlop váltotta fel az ügyfél oszlopot. Mivel az ügyfelek a környéken élők, a város, régió(állam), irányítószám és ország oszlopok cellái üresen hagyhatók, bár ebben a cikkben nem maradnak üresen.

Ez az értékesítési táblázat még mindig 2NF-ben van, mivel az 1NF és a 2NF szabályokat sem sértették meg. Figyelembe kell azonban venni, hogy egy Értékesítési tábla sorában a vevő (név) helyére hét vevősor cella került.

Megjegyzés: egy címcellában szerepel a házszám, az utca vagy út neve és a város neve, mindezt vesszővel elválasztva. Egy várost több városból állónak tekinthetünk. Bár vessző választja el ezeket a karakterlánc-összetevőket, egy cellaértéket alkotnak, nem pedig három cellaértéket.

Az alkalmazotti oszlopot szintén hét ilyen oszlopra kell cserélni. Ez azonban nem történik meg ebben az oktatóanyagban a tanítási idő és hely megtakarítása érdekében. Tehát az adatokat tartalmazó értékesítési tábla lehet:

Értékesítési táblázat – 2NF – Ügyfélazonosító nélkül

A SaleID adattípus oszlopa egy egész szám vagy jobb esetben az automatikus növekedés. A dateSold oszlop adattípusa dátum és nem szám, mert a „/” karaktert tartalmazza, amely nem számjegy. A többi oszlop adattípusa, beleértve a telefon oszlopot is, karakterlánc (vagy szöveg). A telefonérték „-” karaktert tartalmaz, amely nem számjegy.

Vegye figyelembe, hogy minden sorban az ügyfél (név), mint a sorozat előző részében, hét cellára cserélték, amelyek közül az egyik továbbra is ügyfélnév. Ez azt jelenti, hogy az ügyféladatok egy entitást képeznek. Jelenleg az ügyfélnév a másik hat adatot azonosítja egymás után. Ha ez a táblázat be van programozva, kényelmes lesz az ügyfél entitást minden sorban egész számmal azonosítani (nem automatikus növekedés). Ebben az esetben a customerID oszlopnak a customerName előtt kell lennie. Az előző táblázat a következőképpen alakul:

Értékesítési táblázat – 2NF – Ügyfélazonosítóval

Három ügyfélazonosító létezik: 1, 2 és 3, ahol az 1 John Smith esetében ötször, a 2 James Taylor esetében kétszer, a 3 pedig Susan Wright esetében egyszer fordul elő.

Vegye figyelembe, hogy egyes ügyfélazonosítók és függőik ismétlődnek.

A harmadik normál forma szabályai

A táblázat Harmadik Normál Formájú, ha megfelel a következő szabályoknak:

  1. Már a második normál formában kell lennie.
  2. És nem lehet tranzitív függősége.

Ekkor az egyik ügyintéző (alkalmazott) megkérdezi: „Mi az a tranzitív függőség?”. Ön pedig, az adatbázis-fejlesztő, azt válaszolja: „Ez egy jó kérdés!”

Tranzitív függőség

Igaz, hogy egy sorban a SaleID azonosítja a sorban lévő összes értéket; azonban az ügyfélazonosító azonosítja a hét adatértékét, de nem azonosítja az Eladási azonosító által azonosított többi értéket ebben a sorban. Másképpen fogalmazva, a SaleID minden sorban tíz cellaértéktől függ. Az ügyfélazonosító azonban hét cellaértéktől függ ugyanabban a sorban, de az ügyfélazonosító nem függ az értékesítési azonosítótól és a többi értéktől, amelytől az értékesítési azonosító függ.

Az ügyfélazonosító ilyen függősége tranzitív függőség. Az ügyfélazonosítót pedig idegen kulcsnak hívják, és ebben az oktatóanyag-sorozatban, az Öt normál űrlapban kötőjellel aláhúzva van.

Tegyük fel, hogy egy nem elsődleges attribútum (nem elsődleges cellaérték) más nem elsődleges attribútumoktól függ, és a kérdéses nem elsődleges attribútum (pl. ügyfélazonosító és függői) nem függ az elsődleges kulcstól és a cella többi részétől értékek a sorban. Akkor ez a tranzitív függőség.

Az előző Sales tábla az idegen kulccsal és annak függőivel számviteli problémákat (anomáliákat) okozna.

Eladási táblázat 2NF-től 3NF-ig

Az idegen kulcs és függői által felvetett probléma megoldásához távolítsa el az idegen kulcsot és függőit, hogy ismétlések nélkül hozzon létre egy új táblázatot. Azonban még ha az idegen kulcs nem is függ az elsődleges kulcstól, az elsődleges kulcs az idegen kulcstól függ. Tehát az idegen kulcs másolatának a szülőtáblában kell maradnia. Az új értékesítési táblázat jelenleg 1NF, 2NF és 3NF kompatibilis; ez egy szülőtábla. Az előző értékesítési tábla új gyermektáblája is 1NF, 2NF és 3NF kompatibilis. Az idegen kulccsal rendelkező gyermektábla neve és a hozzátartozói Ügyfelek. Ha nem található megfelelő név, akkor valami elromlott az elemzésben. Az új értékesítési táblázat a 3NF-ben a következő:

Végső értékesítési táblázat a 3NF-ben

Ebben a 3NF-ben lévő táblázatban ugyanannyi sor van, mint a 2NF-ben, de kevesebb oszlopot tartalmaz.

A 3NF végső értékesítési táblázatának táblázata a következő:

Értékesítés (eladási azonosító, eladás dátuma, ügyfélazonosító, alkalmazott azonosítója)

A salesID az elsődleges kulcs egyetlen aláhúzással. az ügyfélazonosító egy idegen kulcs, kötőjellel aláhúzva. A munkavállalói azonosító is egy idegen kulcs, kötőjellel aláhúzva. Vegye figyelembe, hogy az alkalmazottak helyzete a 2NF Értékesítési táblázatában megegyezik az ügyfél helyzetével. Az alkalmazotti azonosítót és a hozzá tartozó függőket le kell húzni egy másik tábla létrehozásához; megmarad a munkavállalói azonosító másolata.

Megjegyzés: a salesID, az ügyfélazonosító és az alkalmazotti azonosító nem alkotnak összetett kulcsot. A saleID az ügyfélazonosítótól és a munkavállalói azonosítótól függ.

A salesID és az ügyfélazonosító közötti kapcsolat több az egyhez.

Az ügyféltábla a 3NF-ben

Ennek a táblázatnak három sora van a 2NF értékesítési táblázat 9 sora helyett. Ebben a táblázatban az ügyfélazonosító egy elsődleges kulcs. Ez ugyanaz, mint az értékesítési tábla idegen kulcsa, de ismétlések nélkül. Az Értékesítés táblában lévő idegen kulcs és az Ügyfél táblában lévő elsődleges kulcs mindkét táblát összekapcsolja.

Az Ügyfél táblázat ismétlődő sorait eltávolítottuk, hogy ne sértsék az 1NF-et.

Amint az olvasó látja, egy táblázat 3NF-be helyezése megoldaná az ismétlődő sorok (redundancia) problémáját is.

Az Ügyféltáblázat táblázat jelölése a következő:

Ügyfelek (ügyfélazonosító, ügyfélnév, telefon, cím, város, régió, irányítószám, ország)

A terméktáblázat felülvizsgálva

A fenti terméktáblázat jelölési formában a következő:

Termékek (termékazonosító, kategóriaazonosító, szállítóazonosító, terméknév, egységár, raktáron lévő mennyiség, újrarendelési szint)

Az elsődleges kulcs itt a productID. A kategóriaazonosító és a szállítóazonosító idegen kulcsok. A Vevő táblához hasonlóan van egy Kategóriák tábla, ahol a kategóriaazonosító az elsődleges kulcs, és egy Szállító tábla, ahol a szállítóazonosító az elsődleges kulcs.

Ha a unitPrice, a MennyiségInStock és a ReorderLevel cellák értékei rögzítettek maradnak, akkor a Termékek tábla, ahogy van, valóban 3NF-ben van. Ha ezek az értékek változni fognak, akkor a Termékek tábla, ahogy van, 2NF-ben van. Az oktatóanyag-sorozat ezen részében feltételezzük, hogy ezek az értékek idővel rögzítettek maradnak.

Az összes asztal

Az összes asztal 3NF-ben van. A következőképpen jelennek meg:

Alkalmazottak (alkalmazotti azonosító, név, telefon, cím, város, régió, irányítószám, ország, születési dátum, bérbeadás dátuma, kiadás dátuma)

Szállítók (beszállító azonosítója, név, telefon, cím, város, régió, irányítószám, ország)

Termékek (termékazonosító, kategóriaazonosító, szállítóazonosító, terméknév, egységár, raktáron lévő mennyiség, újrarendelési szint)
Kategóriák (kategóriaazonosító, kategórianév, leírás)

Értékesítés (eladási azonosító, eladás dátuma, ügyfélazonosító, alkalmazott azonosítója)
Eladás részletei (eladási azonosító, termékazonosító, számEladott, eladási ár)
Ügyfelek (ügyfélazonosító, ügyfélnév, telefon, cím, város, régió, irányítószám, ország)

Rendelések (rendelésazonosító, eladás dátuma, szállítóazonosító, alkalmazotti azonosító)
Megrendelés részletei (rendelésazonosító, termékazonosító, megvásárolt szám, költségár)

Legfeljebb kilenc professzionális táblázat készült egy újoncok által készített táblázatból a redundancia és a könyvelési problémák (a beszúrás, törlés és frissítés anomáliák) elkerülése érdekében. A kezdő asztal önmagában anyagi veszteségekhez vezetne.

A személyzet tesztelése

Ezen a ponton minden alkalmazottnak, beleértve a tulajdonost is, értenie kellett volna az 1NF, 2NF és 3NF kifejezéseket. Ezeket azonban tesztelni kell. Mindannyian, beleértve a tulajdonost is, különböző helyeken ülnek, és kitöltik a tesztet. Az egy kérdésből álló teszt egy órát vesz igénybe, és a következő:

Kérdés: Az 1NF, 2NF és 3NF szabályok használatával bizonyítsa be, hogy a fenti kilenc tábla már az első normál formában, a második normál formában és a harmadik normál formában van. A vevőknek és a beszállítóknak nem kell valódi entitásoknak lenniük. A táblázatok adatainak biztonsági másolatot kell készíteniük a táblázat jelöléseiről.

Amíg ők töltik ki a tesztet, Ön, mint az adatbázis fejlesztője, kimész falatozni és sörözni, hogy egy óra múlva visszatérjen.

A közeli és távoli jövő

Amíg Ön, az adatbázis-fejlesztő, nincs kint, azt is fontolja meg, milyen tanácsot adjon nekik, ha mindannyian átmennek a teszten.

Továbbá, miközben Ön képezte őket, és most, hogy letették a tesztet, az ügyfelek kiszolgálás nélkül jöttek és távoztak. Ez nem tesz jót az üzletnek, és ezt Ön, az adatbázis-fejlesztő, tudja. Előfordulhat, hogy egyes vásárlók elmennek a versenytárs üzleteibe, és soha többé nem jönnek vissza.

Ön, az adatbázis-fejlesztő, 30 éves. A tulajdonos, mint a barátod, szintén 30 éves. Az ügyintézők (alkalmazottak) 18 és 24 év közöttiek. Minden olyan tulajdonságra volt szükségük, hogy a tulajdonosnál dolgozhassanak: egészséges legyen, tudjon írni és olvasni, tudjon összeadni, kivonni, szorozni és osztani. , valamint hogy tudja használni a számítógépet és az internetet.

Ha egy tábla 3NF-ben van, a legtöbb sebezhetőséget eltávolították az adatbázisból. Sok kereskedelmi adatbázis nem haladja meg a 3NF-t, és a cégek vagy cégek kényelmesek.

Tehát, ha mindannyian átmennek a vizsgán, megkéri az ügyintézőket, hogy menjenek és folytassák a munkát. Azt is tanácsolja nekik, hogy mentsék meg fizetésük egy részét, hogy saját kisboltjuk legyen. Holnap folytatja, hogy csak a tulajdonost képezze 4NF-ben és 5NF-ben. A 4NF és 5NF ismeretében az összes ismert sebezhetőséget eltávolítják.

Értékelés

Egy óra elteltével Ön, az adatbázis-fejlesztő jöjjön vissza. Megjelölöd a forgatókönyveiket. Egy remek hír! Mindegyikük 100%-kal rendelkezik, beleértve a tulajdonost is. Hurrá! Ez kiváló!

Szóval gratulálok mindenkinek: a tanárnak és a diákoknak.

Ebben az oktatóanyagban nincs más hátra, mint a következtetés.

Következtetés

A táblázat első normál formátumú, ha nem sérti a következő szabályok egyikét sem:

  1. A táblázat minden oszlopának egyedi fejlécnévvel kell rendelkeznie.
  2. Minden cellának csak egyetlen értéke lehet.
  3. Az oszlopban tárolt értékeknek azonos típusúaknak kell lenniük.
  4. A soroknak külön kell lenniük.
  5. Az oszlopok vagy sorok sorrendje nem számít.

A táblázat második normál formában van, ha nem sérti a következő szabályok egyikét:

  1. A táblázatnak már első normál formában kell lennie.
  2. Nem lehet részleges függőség.

A táblázat Harmadik normál formában van, ha nem sérti a következő szabályok egyikét:

  1. Már a Második Normál Formában kell lennie.
  2. És nem lehet tranzitív függősége.

Ön, az adatbázis-fejlesztő, mondja az ügyintézőknek, hogy eleget tanultak. Tanácsot ad, és megkéri őket, hogy térjenek vissza dolgozni, és alapértelmezés szerint maradjanak az állomásukon.

Csak a tulajdonossal egyeztetett időpontot, holnap az irodájában tartanak 4NF és 5NF képzést.