Trešā parastā forma

Tresa Parasta Forma



Šī ir sērijas Piecas parastās formas trešā daļa. Pirmo divu daļu (pamācību) nosaukumi ir Pirmā parastā forma, kam seko otrā parastā forma. Šajā sērijas daļā ir izskaidrota trešā parastā forma.

Paskaidrojums seko sižetam: Tēvs ir miris un ir atstājis naudu savam dēlam. Dēls nolēma naudu ieguldīt veikalā. Ēdienu veikals, kas pazīstams arī kā veikals, ir neliels mazumtirdzniecības uzņēmums, kas saņem ikdienas preces no piegādātājiem un pārdod tās atsevišķiem klientiem apkārtnē.







Šobrīd veikalā jau ir krājumi, un daži izpārdošanas jau ir notikuši. Dēlam, kurš ir uzņēmuma īpašnieks, ir daži darbinieki, kurus šajā apmācībā sauc par ierēdņiem. Īpašnieks un jebkurš darbinieks var saņemt preces un veikt pārdošanu pēc produktu reģistrēšanas.



Taču pirms veikala sākuma ne īpašnieks, ne darbinieki neko nezināja par parastajām formām. Tātad viņi visu ierakstīja kā darījumus vienā tabulā un vienā burtnīcā. Viņiem nebija datora.



Jūs, lasītāj, esat pabeidzis piecas šīs apmācības sērijas daļas; tagad jūs esat datu bāzes izstrādātājs. Veikala īpašnieks ir jūsu draugs. Jūs apmeklējāt veikalu pirms divām dienām un apmācījāt īpašnieku un ierēdņus par galda izgatavošanu tā pirmajā parastajā formā. Jūs arī vakar apmeklējāt veikalu un apmācāt viņus, kā izveidot tabulu otrajā normālā formā no pirmās parastās formas.





Šodien jūs tikko ieradāties veikalā, lai apmācītu viņus, kā izgatavot galdu trešajā normālā formā no otrās parastās formas. Visas tabulas, kas viņiem šobrīd ir, ir otrajā parastajā formā. Tabulas (pēc nosaukuma un kolonnu virsrakstiem) ir šādas:

Produkti (produkta ID, kategorijas ID, produkts)
Kategorijas (kategorijas ID, kategorija)



Pārdošana (pārdošanas ID, klients, darbinieks, datums)
Izpārdošanas informācija (pārdošanas ID, produkta ID, numursPārdots, pārdošanas cena)

Pasūtījumi (pasūtījuma ID, piegādātājs, darbinieks, datums)
Pasūtījuma informācija (pasūtījuma ID, produkta ID, pirkuma numurs, pašizmaksas cena)

Atsevišķi vai saliktie taustiņi ir pasvītroti.

Apkopojot iepriekšējās divās dienās mācīto un pirms jūs varētu kaut ko darīt, īpašnieks jautā:

“Kā ir ar tālruņu numuriem, adresēm utt. klientiem un darbiniekiem?

Kā ir ar produktu daudzumu noliktavā, atkārtotas pasūtīšanas līmeni utt.?
Vai viņiem ir nepieciešami atsevišķi galdi, vai arī tie ir jāievieto esošajos galdos?

Jūs, datu bāzes izstrādātājs, atbildiet:

“Apsveicam, saimniek! Jūs netieši esat ieviesis jautājumu par trešo parasto formu.

Tu turpini.

Citas nepieciešamās kolonnas

Citas nepieciešamās kolonnas vispirms tiek pievienotas iepriekšējām tabulām, kas atrodas 1NF un 2NF. Daži no iepriekšējiem kolonnu nosaukumiem ir mainīti.

Tabulā Kategorijas jābūt vismaz šādām kolonnām:

Kategorijas (kategorijas ID, kategorijas nosaukums, apraksts)

Apraksts ir īsa rindkopa, kas apraksta kategoriju. Šī kategoriju tabula jau ir 1NF, 2NF un 3NF. 3NF ir izskaidrots tālāk:

Tabulā Produkti ir jābūt vismaz šādām kolonnām:

Produkti (produkta ID, kategorijas ID, piegādātāja ID, produkta nosaukums, vienības cena, krājumā esošais daudzums, atkārtotas pasūtījuma līmenis)

Tā kā katra prece tiek pārdota, tad, kad prece būs jāpārsūta, tiks sasniegts zems preču līmenis (skaits), tāpēc pircējiem nevajadzētu nākt uz veikalu un nepieņemt preci. Šāda prombūtne nenāk par labu biznesam. mennyiségInStock ir konkrētas preces numurs noliktavā. Tas ietver to, kas ir veikalā un kas atrodas plauktā.

kategorijas ID un piegādātāja ID ir ārējās atslēgas. Tāpēc tiem ir domuzīmes pasvītrojums, nevis viens pasvītrojums. Ārējā atslēga ir izskaidrota tālāk. Iepriekšējā sērijas daļā (otrā parastā forma) kategorijas ID bija daļa no primārās atslēgas ar vienu pasvītrojumu, jo tas tika sasniegts. Tomēr no tālāk sniegtā skaidrojuma būtu skaidrs, ka kategorijas ID ir jābūt ārējai atslēgai (ar domuzīmi pasvītrot).

Šī produktu tabula jau ir 1NF, 2NF un 3NF. Skatiet, kāpēc tas ir 3NF:

Tabulā SaleDetails jābūt vismaz šādām kolonnām:

Izpārdošanas informācija (pārdošanas ID, produkta ID, vienības pārdošanas cena, daudzums, atlaide)

Paredzams, ka atlaides vērtība lielākoties būs nulle. Atlaide ir atlaide, ko veikals sniedz klientam.

Tabulā OrderDetails jābūt vismaz šādām kolonnām:

Pasūtījuma informācija (pasūtījuma ID, produkta ID, vienībasMaksa, daudzums, atlaide)

Paredzams, ka atlaides vērtība lielākoties būs nulle. Atlaide šeit ir atlaide, ko piegādātājs piešķir veikalam.

Kā redzams tālāk, produktu tabulu var ņemt vērā 2NF vai 3NF. Pārdošanas un pasūtījumu tabulās ir 3NF problēma. Lai izskaidrotu problēmu un risinājumu, tiks izmantota tikai pārdošanas tabula. 3NF pasūtījumu tabulai un produktu tabulai ir līdzīga argumentācija, un tā būtu tikai citēta.

Pievienojot kolonnas, pārdošanas tabula būtu šāda:

Pārdošana (pārdošanas ID, datumsPārdotā klienta vārds, tālrunis, adrese, pilsēta, reģions, pasta indekss, valsts, darbinieks)

Sākotnējā tabulā klientu kolonna ir aizstāta ar septiņām kolonnām. Tā kā klienti ir apkārtnē esošie cilvēki, pilsētas, reģiona (štata), pasta indeksa un valsts kolonnas šūnas var atstāt tukšas, lai gan šajā rakstā tās nav atstātas tukšas.

Šī pārdošanas tabula joprojām atrodas 2NF, jo nav pārkāpti gan 1NF, gan 2NF noteikumi. Tomēr jāsaprot, ka pārdošanas tabulas rindā klients (vārds) ir aizstāts ar septiņām klientu rindas šūnām.

Piezīme: adreses šūnā ir mājas numurs, ielas vai ceļa nosaukums un pilsētas nosaukums, kas visi ir atdalīti ar komatiem. Pilsētu var uzskatīt par tādu, kas sastāv no vairākām pilsētām. Lai gan šīs konkrētās virknes sastāvdaļas atdala ar komatiem, tie veido vienu šūnas vērtību, nevis trīs šūnas vērtības.

Arī darbinieku kolonna ir jāaizstāj ar septiņām šādām kolonnām. Tomēr tas nav darīts šajā apmācībā, lai ietaupītu mācību laiku un vietu. Tātad pārdošanas tabula ar datiem var būt:

Pārdošanas tabula – 2NF – Bez klienta ID

Datu tipa SaleID kolonna ir vesels skaitlis vai, labāk, automātisks pieaugums. Kolonnas dateSold datu veids ir datums, nevis cipars, jo tajā ir rakstzīme “/”, kas nav cipars. Pārējo kolonnu, tostarp tālruņa kolonnas, datu tips ir virkne (vai teksts). Tālruņa vērtībai ir rakstzīme “-”, kas nav cipars.

Ņemiet vērā, ka katrā rindā klients (nosaukums), kā tas bija sērijas iepriekšējā daļā, ir aizstāts ar septiņām šūnām, no kurām viena joprojām ir klienta nosaukums. Tas nozīmē, ka klienta dati ir vienība. Pašlaik klienta vārds identificē citus sešus datus pēc kārtas. Ja šī tabula ir ieprogrammēta, būs ērti identificēt klienta entītiju katrā rindā ar veselu skaitli (nevis automātiska palielināšana). Tādā gadījumā slejai customerID ir jābūt pirms customerName. Iepriekšējā tabula kļūst par:

Pārdošanas tabula – 2NF – Ar klienta ID

Ir trīs klientu ID: 1, 2 un 3, kur 1 — Džonam Smitam — divas reizes, 2 — divreiz Džeimsam Teiloram un 3 reizi Sūzenai Raitai.

Ņemiet vērā, ka daži klientu ID un viņu apgādājamie atkārtojas.

Trešās parastās formas noteikumi

Tabula ir trešajā parastajā formā, ja tā atbilst šādiem noteikumiem:

  1. Tam jau vajadzētu būt Otrajā parastajā formā.
  2. Un tai nevajadzētu būt pārejošai atkarībai.

Tad viens no ierēdņiem (darbiniekiem) jautā: 'Kas ir pārejoša atkarība?'. Un jūs, datu bāzes izstrādātājs, atbildat: 'Tas ir labs jautājums!'

Transitīvā atkarība

Tā ir taisnība, ka pēc kārtas SaleID identificē visas rindā esošās vērtības; tomēr customerID identificē savas septiņas datu vērtības, bet neidentificē pārējās vērtības, kuras šajā rindā identificē ar SaleID. Citiem vārdiem sakot, SaleID ir atkarīgs no desmit šūnu vērtībām katrā rindā. Tomēr klienta ID ir atkarīgs no septiņām šūnu vērtībām tajā pašā rindā, bet klienta ID nav atkarīgs no SaleID un citām vērtībām, no kurām ir atkarīgs SaleID.

Šāda klienta ID atkarība ir pārejoša atkarība. Klienta ID tiek saukts par ārējās atslēgas atslēgu, un šajā apmācību sērijā Piecas parastās formas tas ir ar svītru pasvītrots.

Pieņemsim, ka atribūts, kas nav primārais atribūts (neprimārās šūnas vērtība) ir atkarīgs no citiem atribūtiem, kas nav primārie, un attiecīgais atribūts, kas nav galvenais atribūts (piemēram, klienta ID un tā atkarīgie) nav atkarīgs no primārās atslēgas un pārējās šūnas vērtības rindā. Tad tā ir pārejoša atkarība.

Iepriekšējā Pārdošanas tabula ar ārējo atslēgu un tās atkarīgajiem radītu grāmatvedības problēmas (anomālijas).

Pārdošanas tabula No 2NF līdz 3NF

Lai atrisinātu problēmu, ko rada ārējā atslēga un tās atkarīgie, noņemiet ārējo atslēgu un tās atkarīgos, lai izveidotu jaunu tabulu bez atkārtojumiem. Tomēr, pat ja ārējā atslēga nav atkarīga no primārās atslēgas, primārā atslēga ir atkarīga no ārējās atslēgas. Tātad ārējās atslēgas kopijai jāpaliek vecāktabulā. Jaunā pārdošanas tabula šobrīd ir saderīga ar 1NF, 2NF un 3NF; tā ir vecāku tabula. Jaunā pakārtotā tabula no iepriekšējās pārdošanas tabulas arī ir saderīga ar 1NF, 2NF un 3NF. Pakārtotās tabulas ar ārējo atslēgu un tās atkarīgo nosaukumu nosaukums ir Klienti. Ja nevar atrast piemērotu nosaukumu, tad analīzē kaut kas ir nogājis greizi. Jaunā pārdošanas tabula 3NF ir:

Galīgā pārdošanas tabula 3NF

Šajā 3NF tabulā ir tāds pats rindu skaits kā 2NF tabulā, taču tajā ir mazāk kolonnu.

Tabulas apzīmējums šai galīgajai pārdošanas tabulai 3NF ir:

Pārdošana (pārdošanas ID, pārdošanas datums, klienta ID, darbinieka ID)

SaleID ir primārā atslēga ar vienu pasvītrojumu. customerID ir ārējā atslēga ar domuzīmi pasvītrot. darbinieka ID ir arī ārējā atslēga ar domuzīmes pasvītrojumu. Ņemiet vērā, ka darbinieku situācija pārdošanas tabulā 2NF ir tāda pati kā klienta situācija. Darbinieka ID un tā apgādājamie ir jāizvelk, lai izveidotu citu tabulu; paliek darbinieka ID kopija.

Piezīme: pārdošanas ID, klienta ID un darbinieka ID neveido saliktu atslēgu. saleID ir atkarīgs no klienta ID un darbinieka ID.

Saistība starp saleID un customerID ir daudzpusēja.

Klientu tabula 3NF

Šajā tabulā ir trīs rindas 9 rindu vietā 2NF pārdošanas tabulā. Šajā tabulā klienta ID ir primārā atslēga. Tā ir tāda pati kā ārējā atslēga pārdošanas tabulā, bet bez atkārtojumiem. Ārējā atslēga tabulā Pārdošana un primārā atslēga tabulā Klienti saista abas tabulas.

Klientu tabulas atkārtotās rindas ir noņemtas, lai nepārkāptu 1NF.

Kā lasītājs redz, tabulu ievietošana 3NF atrisinātu arī atkārtotu rindu problēmu (redundance).

Klientu tabulas tabulas apzīmējums ir:

Klienti (klienta ID, klienta vārds, tālrunis, adrese, pilsēta, reģions, pasta indekss, valsts)

Produktu tabula ir pārskatīta

Produktu tabula, kas norādīta iepriekš apzīmējuma formā, ir:

Produkti (produkta ID, kategorijas ID, piegādātāja ID, produkta nosaukums, vienības cena, krājumā esošais daudzums, atkārtotas pasūtījuma līmenis)

Primārā atslēga šeit ir productID. kategorijas ID un piegādātāja ID ir ārējās atslēgas. Līdzīgi kā klientu tabulā, ir tabula Kategorijas, kur kategorijas ID ir primārā atslēga, un ir tabula Piegādātājs, kur piegādātāja ID ir primārā atslēga.

Ja vienību cena, daudzumsInStock un reorderLevel šūnu vērtības paliks nemainīgas, tad tabula Products, kāda tā ir, patiešām ir 3NF. Ja šīs vērtības mainīsies, tad tabula Products, kāda tā ir, atrodas 2NF. Šajā apmācību sērijas daļā tiek pieņemts, ka šīs vērtības laika gaitā paliek nemainīgas.

Visas tabulas

Visi galdi tagad ir 3NF formātā. Tie tiek parādīti kā:

Darbinieki (darbinieka ID, vārds, tālrunis, adrese, pilsēta, reģions, pasta indekss, valsts, dzimšanas datums, nolīguma datums, atbrīvošanas datums)

Piegādātāji (piegādātāja ID, nosaukums, tālrunis, adrese, pilsēta, reģions, pasta indekss, valsts)

Produkti (produkta ID, kategorijas ID, piegādātāja ID, produkta nosaukums, vienības cena, krājumā esošais daudzums, atkārtotas pasūtījuma līmenis)
Kategorijas (kategorijas ID, kategorijas nosaukums, apraksts)

Pārdošana (pārdošanas ID, pārdošanas datums, klienta ID, darbinieka ID)
Izpārdošanas informācija (pārdošanas ID, produkta ID, numursPārdots, pārdošanas cena)
Klienti (klienta ID, klienta vārds, tālrunis, adrese, pilsēta, reģions, pasta indekss, valsts)

Pasūtījumi (pasūtījuma ID, pārdošanas datums, piegādātāja ID, darbinieka ID)
Pasūtījuma informācija (pasūtījuma ID, produkta ID, pirkuma numurs, pašizmaksas cena)

Lai novērstu dublēšanas un uzskaites problēmas (ievietošanas, dzēšanas un atjaunināšanas anomālijas), ir izveidotas līdz pat deviņām profesionālajām tabulām no tikai vienas iesācēju sagatavotas tabulas. Iesācēju galds vien radītu finansiālus zaudējumus.

Personāla pārbaude

Šajā brīdī visiem darbiniekiem, tostarp īpašniekam, bija jāsaprot 1NF, 2NF un 3NF. Tomēr tie ir jāpārbauda. Viņi visi, ieskaitot īpašnieku, sēdēs dažādās vietās un pabeigs testu. Tests, kas sastāv no viena jautājuma, ilgs vienu stundu, un tas ir šāds:

Jautājums: Izmantojot 1NF, 2NF un 3NF noteikumus, pierādiet, ka visas iepriekš minētās deviņas tabulas jau ir pirmajā parastajā formā, otrajā parastajā formā un trešajā parastajā formā. Klientiem un piegādātājiem nav jābūt reāliem subjektiem. Tabulu datiem ir jādublē tabulu apzīmējumi.

Kamēr viņi aizpilda testu, jūs kā datu bāzes izstrādātājs izejat uzkost un iedzert alu, lai atgrieztos pēc stundas.

Tuva un Tāla nākotne

Kamēr jūs, datu bāzes izstrādātājs, esat ārpus mājas, jūs arī apsverat, kādu padomu viņiem dot, ja viņi visi izturēs pārbaudi.

Turklāt, kamēr jūs viņus apmācījāt un tagad, kad viņi kārto testu, klienti nāca un aizgāja bez apkalpošanas. Tas nenāk par labu uzņēmējdarbībai, un jūs, datu bāzes izstrādātājs, to zināt. Daži klienti var doties uz konkurentu veikaliem un nekad neatgriezties.

Jums, datu bāzes izstrādātājam, ir 30 gadi. Īpašniekam kā jūsu draugam arī ir 30 gadi. Ierēdņi (darbinieki) ir vecumā no 18 līdz 24 gadiem. Visas īpašības, kas viņiem bija nepieciešamas, lai strādātu pie īpašnieka, bija: būt veselam, prast lasīt un rakstīt, prast saskaitīt, atņemt, reizināt un dalīt , kā arī lai varētu lietot datoru un internetu.

Kad tabula atrodas 3NF, lielākā daļa ievainojamību ir noņemtas no datu bāzes. Daudzas komerciālas datu bāzes nepārsniedz 3NF, un uzņēmumi vai uzņēmumi ir ērti.

Tātad, ja viņi visi nokārtos pārbaudi, jūs lūgsiet ierēdņus doties un turpināt darbu. Jūs arī ieteiksiet viņiem ietaupīt daļu no algas, lai viņiem varētu piederēt savi veikali. Rīt jūs turpināsiet apmācīt tikai īpašnieku 4NF un 5NF. Zinot 4NF un 5NF, visas zināmās ievainojamības tiek noņemtas.

Novērtēšana

Pēc stundas jūs, datu bāzes izstrādātājs, atgriezieties. Jūs atzīmējat viņu skriptus. Lieliska ziņa! Viņiem visiem, ieskaitot īpašnieku, katram ir 100%. Urā! Tas ir lieliski!

Tāpēc apsveicu jūs visus: skolotāju un skolēnus.

Šajā apmācībā nekas cits neatliek, kā vien noslēgt.

Secinājums

Tabula ir pirmajā parastajā formā, ja tā nepārkāpj nevienu no šiem noteikumiem:

  1. Visām tabulas kolonnām ir jābūt unikāliem galvenes nosaukumiem.
  2. Katrai šūnai jābūt tikai vienai vērtībai.
  3. Kolonnā saglabātajām vērtībām ir jābūt tāda paša veida.
  4. Rindām jābūt atšķirīgām.
  5. Kolonnu vai rindu secībai nav nozīmes.

Tabula ir otrajā parastajā formā, ja tā nepārkāpj nevienu no šiem noteikumiem:

  1. Tabulai jau ir jābūt pirmajā parastajā formā.
  2. Nedrīkst būt daļēja atkarība.

Tabula ir trešajā parastajā formā, ja tā nepārkāpj nevienu no šiem noteikumiem:

  1. Tam jau jābūt Otrajā parastajā formā.
  2. Un tai nedrīkst būt pārejoša atkarība.

Jūs, datu bāzes izstrādātājs, sakiet ierēdņiem, ka viņi ir pietiekami iemācījušies. Jūs sniedzat padomu un lūdzat viņus atgriezties darbā un pēc noklusējuma palikt savās stacijās.

Jūs norunājat tikšanos tikai ar īpašnieku, kas rīt notiks viņa birojā, lai apmācītu par 4NF un 5NF.