Transcript 6 tema.

Duomenų bazės (DB). Reliacinės DB
•
•
•
•
Duomenų bazės samprata;
Duomenų organizavimo (DB) modeliai;
Reliacinės duomenų bazės ir jų savybės;
Duomenų normalizavimas ir normalinės
formos.
1
Duomenų bazės samprata
Sutvarkyti duomenys
Duomenys ir programinė įranga
Duomenų bazė - tai kartu saugomų ir susijusių duomenų, skirtų
apdoroti kompiuteriu, visuma.
Duomenų bazė – tai tarpusavyje susietų struktūrizuotų duomenų
visuma, skirta tam tikrai tematikai ar tikslams.
Duomenų bazė – tai duomenys + programinė įranga (DBVS),
skirta duomenų struktūroms kurti ir įvairiais būdais juos apdoroti.
2
Duomenų bazės samprata (2)
Reikia atskirti fizinį ir loginį duomenų organizavimą. Pirmasis nurodo
duomenų fizinio išdėstymo būdus kompiuterio atmintyje, o antrasis duomenų struktūros vaizdavimą - modelį, reikalingą ir suprantamą
vartotojams.
Loginėms duomenų struktūroms aprašyti naudojami šie terminai:
Duomenų elementas (laukas) – mažiausias aprašytų duomenų
vienetas;
Įrašas – įvardytas DE ar agregatų rinkinys, kurį taikomoji programa
(DBVS) traktuoja kaip nedalomą vienetą;
Duomenų agregatas (grupė) – įvardyta DE visuma, kuri įrašo
viduje traktuojama kaip nedaloma grupė;
Failas – įvardyta visų duoto tipo įrašų visuma;
Duomenų bazė – įvairių tipų įrašų ir santykių tarp įrašų, duomenų
agregatų ir elementų visuma.
3
DB duomenų savybės
Duomenims, saugomiems duomenų bazėje, būdingos
šios savybės:
• vientisumas( integralumas);
• nepertekliškumas;
• neprieštaringumas;
• saugumas;
• nepriklausomumas.
4
Duomenų organizavimo modeliai
Pagal tai, kokiu būdu duomenys jungiami į visumą, išskiriami šie
duomenų organizavimo modeliai (DB tipai):
• hierarchinis modelis;
• tinklinis modelis;
• reliacinis modelis;
• objektinis modelis.
Pastaruoju metu populiariausios duomenų bazės, kuriose duomenys
organizuojami pagal reliacinį modelį, - tai reliacinės
duomenų bazės.
5
Hierarchinis modelis (vienas-su-daugeliu ryšių)
Hierarchiniam duomenų modeliui yra būdingas žemesnio lygmens
objektų pavaldumas aukštesniojo lygmens objektams.
Aukštesnio ir žemesnio lygmens objektus sieja ryšys “vienas su
daugeliu”. Be įprastinių operatorių, tokiose DB naudojami ir perėjimo iš
vieno hierarchijos lygio į kitą operatoriai.
Pavyzdžiui,
Direktorius
Pirkimų vadovas
Vadybininkas
Vadybininkas
Pardavimų vadovas
Vadybininkas
6
Hierarchinis modelis (2)
Kiekvienas įrašas:
• sudaromas iš dviejų elementų: raktu vadinamo pagrindinio
lauko ir jam pavaldžių laukų rinkinio;
• hierarchinėje struktūroje gali turėti daug nuorodų į jam
pavaldžius įrašus ir tik vieną nuorodą į valdantį (esantį
aukštesniame hierarchijos lygyje) įrašą;
Privalumai:
• žemesnio lygio objektai „tiesiogiai pavaldūs“ aukštesnio lygio
objektams;
• pavaldumo ryšiai yra natūrali daugumos mūsų aplinkos objektų
savybė.
Trūkumai:
• labai dažnas duomenų dubliavimas, kuris užima daugiau atminties ir
pristabdo greitą reikiamos informacijos paiešką;
• galima naudoti tik mažai ir nesudėtingai duomenų bazei kurti. 7
Tinklinis modelis (daugelis-su-daugeliu ryšių)
Tinklinę duomenų struktūrą galima pateikti, pavyzdžiui, tokia schema:
Klientas nr. 1
Maisto prekių
parduotuvė
Klientas nr. 2
Drabužių
parduotuvė
Klientas nr. 3
Batų parduotuvė
Privalumai:
• aprašo ryšius tarp nepriklausomų duomenų elementų;
• plačiai naudojama prekyba užsiimančiose įmonėse;
• išvengiama duomenų dubliavimo, o tai savo ruoštu paspartina
paiešką ir sutaupoma vietos atmintyje;
• galima naudoti ir didelių bazių kūrimui.
8
Reliacinis duomenų modelis
Reliacinį duomenų modelį 1969 metais pasiūlė firmos IBM darbuotojas
E.F.Kodas (E.F.Codd).
Reliacinė duomenų bazė – tai tokia duomenų visuma kurioje
informacija saugoma dvimatėse lentelėse.
Kiekviena lentelė susideda iš eilučių (dar vadinamų įrašais arba
kortežais (record)) ir stulpelių (dar vadinamų laukais arba
atributais (field)). Naudosime įvairias šių terminų poras.
Eilutėse yra duomenys apie pateiktus lentelėje faktus (dokumentus,
žmones, vienu žodžiu, – vieno tipo objektus). Stulpelių ir eilučių
susikirtimuose yra konkrečios saugomų lentelėje duomenų reikšmės
(laukų reikšmės).
9
Dvimatė lentelė
Lauko sąvoka atitinka DE
sąvoką anksčiau nagrinėtuose
duomenų vaizdavimuose.
Į lentelės įrašus įtraukiamos
duomenų porcijos, kurias
sudaro DE reikšmės, dar
vadinamos laukų reikšmėmis
(pvz., «A2599», «98 01 26» ir
pan.).
6.1 pav.
Bet kurios eilutės ir bet kurio
stulpelio susikirtime turi būti tik
viena DE reikšmė, o ne tų
reikšmių rinkinys.
10
Reliacinės duomenų bazės savybės
Reliacinėse DB kiekviena lentelė pasižymi tokiomis savybėmis:
Visi įrašai yra vienodai organizuoti, turi tą pačią struktūrą. Visuose
įrašuose yra tiek pat laukų, o laukai yra vienarūšiai, t.y. atskiro lauko
reikšmės yra vieno tipo. Tačiau skirtinguose laukuose gali būti
skirtingų tipų duomenys;
Lentelėje negali būti tuščių įrašų, taip pat identiškų įrašų, t.y. įrašų
su pasikartojančiais duomenimis, nors atskiri duomenų elementai
gali būti tušti arba pasikartojantys;
Įrašų ir laukų išdėstymo tvarka lentelėje nėra svarbi. Atliekant
duomenų apdorojimo operacijas lentelės eilutės ir stulpeliai gali būti
peržiūrimi bei tvarkomi bet kuria tvarka, nepriklausomai nuo jų
informacinio turinio.
Kiekvienai lentelei suteikiamas vardas. Lentelės vardas turėtų atspindėti
atitinkamo realaus informacinio objekto pavadinimą, o laukų vardai – to
objekto atributų pavadinimus.
11
Lentelių raktai
Lentelėms nustatomi raktai, t. y. laukai ar laukų grupės, kurių įgyjamos
reikšmės yra nepasikartojančios, taigi šios reikšmės vienareikšmiškai
identifikuoja tų lentelių įrašus.
Lentelės gali turėti po kelis raktus, iš kurių konkrečiu momentu faktiškai
naudojamas tik vienas - pirminis raktas (primary key).
Jei pirminį raktą sudaro keli laukai, jis vadinamas sudėtiniu pirminiu
raktu (composite primary key).
12
Lentelių pateikimo formos
Sutrumpinta lentelių pateikimo forma, kai iš pradžių užrašomas
lentelės vardas, o po to tarp skliaustelių išvardijami lentelės laukų
vardai pabraukiant raktinius laukus, vadinama lentelės schema.
6.1 pav. pateiktos lentelės schema atrodo taip:
UŽSAKYMAI (UŽSAKYMO NUMERIS, PIRKĖJO KODAS, PREKĖS
KODAS, UŽSAKYMO DATA, UŽSAKYTAS KIEKIS).
Didesniam vaizdumui gauti nustatant ryšius tarp lentelių taip pat
dažnai naudojama stačiakampė lentelės schema:
Užsakymai
CUSTOMERS
UŽSAKYMO NUMERIS
CustomerID
PIRKĖJO KODAS
CompanyName
City
Country
….
PREKĖS KODAS
UŽSAKYMO DATA
UŽSAKYTAS KIEKIS
13
Ryšiai tarp lentelių
Į reliacinių DB sudėtį įeinančios lentelės tarpusavyje susiejamos.
Ryšį tarp atskirų lentelių nustato bendri, sutampantys tų lentelių
laukai, kurie dar vadinami siejančiais laukais (išoriniu raktu).
Taip susietų lentelių visuma ir apibrėžia reliacinį modelį.
Galima pastebėti reliacinio modelio tam tikro laipsnio pertekliškumą.
Pertekliniai laukai įvedami dažniausiai dėl dviejų priežasčių:
a) daliai lentelių reikalingi laukai, skirti suformuoti pirminius raktus,
t.y. vienareikšmius lentelių įrašų identifikatorius;
b) kai kurioms lentelėms reikalingi laukai, kurie nėra pirminiai raktai
(ar jų dalis), bet naudojami nustatyti ryšiams.
14
Reliacinis DB modelis
Ankstesnėje temoje suformuotą rodyklinį bilietų rezervavimo DB modelį:
Reiso Nr.
Išvykimo
punktas
Reiso Nr.
+ Data
Atvykimo
punktas
Lėktuvo
tipas
Laisvos
vietos
pervesime į reliacinį DB modelį:
REISAS(REISO_NR., IŠVYKIMO PUNKTAS, ATVYKIMO PUNKTAS, LĖKTUVO TIPAS);
LAISVOS VIETOS(REISO_NR., DATA, LAISVOS VIETOS).
Arba:
15
Reliacinis DB modelis (2)
REISAS
LAISVOS VIETOS
REISO_NR.
REISO_NR.
IŠVYKIMO PUNKTAS
DATA
ATVYKIMO PUNKTAS
LAISVOS VIETOS
LĖKTUVO TIPAS
CustomerID (PK)
CompanyName
City
Country
….
OrderID (PK)
CustomerID (FK)
OrderDate
Freight
Ship Address
….
PK – Primary Key (pirminis raktas)
FK – Foreign Key (išorinis raktas)
16
Reliacinis DB modelis (3)
Pirmoje schemoje sąryšį (relationchip) tarp lentelių sukuria raktinis
atributas „Reiso Nr.”. Čia lentelė „REISAS” vadinama pagrindine (master)
lentele lentelės „LAISVOS VIETOS” atžvilgiu, o lentelė „LAISVOS VIETOS”
- antrine (detail) lentele lentelės „REISAS” atžvilgiu.
Antroje schemoje raktiniai atributai CustomerID išskirti į pirminį (PK) ir
išorinį (FK) raktus.
Laukas, nurodantis įrašą kitoje lentelėje, kuris susijęs su duotu įrašu,
vadinamas išoriniu raktu (foreign key). Mūsų atveju lentelės Orders
išorinis raktas yra laukas CustomerID.
Kitaip tariant, išorinis raktas – tai laukas ar jų rinkinys, kurio reikšmės
sutampa su kitos lentelės pirminio rakto reikšmėmis.
Ryšys tarp lentelių nustatomas (sudaromas) priskiriant vienos lentelės
išorinio rakto reikšmes kitos lentelės pirminio rakto reikšmėms.
17
Įstaigos darbinės veiklos
informacinis modelis
6.2 pav.
18
Įstaigos darbinės veiklos reliacinės DB
modelis
SKYRIUS (SKYRIAUS_NR, PAVADINIMAS, VADOVAS, BIUDŽETAS);
DARBAS (DARBO_NR, SKYRIAUS_NR, DARBO_APRAŠYMAS);
DARBUOTOJAI (DARBUOTOJO_NR, DARBO_NR, PAVARDĖ, SKYRIAUS_NR, ALGA);
DARBINĖ_VEIKLA (PASKYRIMO_DATA, DARBUOTOJO_NR, PAREIGOS);
ALGOS_KEITIMAI (KEITIMO_DATA, DARBUOTOJO_NR, ALGA).
Čia atsižvelgiama į tai, jog požymis „DARBO_NR” nėra visuotinai priimtas
identifikatorius įstaigoje, o kiekviename skyriuje yra savi darbų numeriai. Todėl
pilnai darbų identifikacijai į lentelės „DARBAS” schemą įvedamas papildomas laukas
„SKYRIAUS_NR”, kuris kartu su lauku „DARBO_NR” sudaro pirminį raktą.
Laukas „DARBUOTOJO_NR” įvedamas į lentelių „DARBINĖ_VEIKLA” ir
„ALGOS_KEITIMAI” schemas taip pat kaip pirminio rakto dalis.
Į lentelę „DARBUOTOJAI” įvestas papildomas laukas („DARBO_NR”), neįeinantis į
pirminio rakto sudėtį, bet naudojamas ryšiui užtikrinti.
19
Reliacinė DB lentelių schema
DARBAS
DARBO_NR
SKYRIAUS_NR
DARBO_APRAŠYMAS
DARBUOTOJAI
ALGOS_KEITIMAI
DARBUOTOJO_NR
KEITIMO_DATA
DARBO_NR
DARBUOTOJO_NR
PAVARDĖ
ALGA
SKYRIAUS_NR
ALGA
SKYRIUS
SKYRIAUS_NR.
DARBINĖ_VEIKLA
PASKYRIMO_DATA
DARBUOTOJO_NR
PAREIGOS
PAVADINIMAS
VADOVAS
BIUDŽETAS
20
Duomenų normalizavimas ir normalinės formos
Normalizavimas yra dalykinės srities (DS) objektų ir jų ryšių apibrėžimas,
naudojant reliacinį modelį. Tai formalus metodas, leidžiantis identifikuoti
lenteles pagal pirminius raktus ir jų laukų funkcines priklausomybes. Jis
susideda iš aibės taisyklių, kurios leidžia normalizuoti DB iki norimo lygio.
Jei lentelė netenkina jos laukų funkcinių priklausomybių reikalavimų, ji
turi būti suskaidyta į paprastesnės struktūros lenteles.
Šis procesas vadinamas normalizavimu. Jo metu sprendžiamos tokios
problemos:
a) kaip sugrupuoti duomenų elementus, t. y. kokius laukus
surinkti į vieną lentelę (kad išvengti nepageidaujamų funkcinių
priklausomybių tarp lentelių laukų);
b)
kaip parinkti raktus;
c) kaip tarp lentelių nustatyti ryšius.
Normalizuojama keliais žingsniais (etapais), kurių metu lentelės įgyja atitinkamas
pateikimo formas, vadinamas normalinėmis formomis (NF).
21
Normalizuojamos lentelės pervedamos iš vienos NF į kitą.
Lentelės laukų funkcinės
priklausomybės
Pirmiausia apibrėšime terminą „funkcinė priklausomybė”.
Sakoma, kad lentelės laukas B funkcionaliai priklauso nuo tos
pačios lentelės lauko A, jei bet kuriuo momentu kiekvieną A
reikšmę atitinka ne daugiau kaip viena B reikšmė. Kitaip tariant, A
lauko reikšmės identifikuoja B lauko reikšmes.
Trumpai tai užrašoma naudojant rodyklę: A  B. Jei keli laukai priklauso
nuo vieno lauko A, pateikiamas jų sąrašas, pvz., A  B, C, D. Pvz.:
lentelėje
DARBUOTOJAI (DARBUOTOJO_NR, DARBO_NR, PAVARDĖ,
SKYRIAUS_NR, ALGA);
DARBUOTOJO_NR  PAVARDĖ
22
Laukų funkcinės priklausomybės
1. Jei neraktinis laukas funkcionaliai priklauso nuo sudėtinio rakto
atskiros dalies, tai suprantama kaip šio lauko
dalinė funkcinė priklausomybė nuo rakto.
2. Jei neraktinis laukas priklauso tik nuo viso sudėtinio rakto, o ne nuo
atskirų dalių, tai sakoma, kad yra
pilna funkcinė šio lauko priklausomybė nuo rakto.
3. Jei A, B ir C laukams egzistuoja priklausomybės A  B bei B  C,
bet atvirkštinių priklausomybių nėra, tai sakoma, kad
C tranzityviai priklauso nuo A.
Funkcinės priklausomybės atspindi duomenų vidinius, prasminius ryšius,
tuo tarpu laukai - duomenų struktūrą.
23
Normalinės formos (NF)
Yra trys pagrindinės NF.
1. Lentelė yra pirmosios normalinės formos (1NF), jeigu kiekvienas
neraktinis laukas yra pilnoje arba dalinėje funkcinėje priklausomybėje
nuo bet kokio galimo tos lentelės rakto. Visi laukai yra atomariniai, t.y.
mažiausios įmanomos komponentės. T.y. kiekvienos lentelės lauke yra
tik viena reikšmė, o ne jų rinkinys.
2. Lentelė yra antrosios normalinės formos (2NF), jeigu ji yra 1NF ir
kiekvienas jos neraktinis laukas yra pilnoje funkcinėje priklausomybėje
nuo bet kokio galimo tos lentelės rakto.
3. Lentelė yra trečiosios normalinės formos (3NF), jeigu ji yra 2NF ir
kiekvienas jos neraktinis laukas yra tiesioginėje pilnoje, bet
ne tranzityvioje priklausomybėje nuo bet kokio galimo tos lentelės
rakto. T.y. reikia užtikrinti, kad visi neraktiniai laukai būtų vienas
nuo kito nepriklausomi. Jei taip nėra, reikia sukurti naują lentelę
(sąryšį), kuri neturėtų neraktinių lakų tarpusavio priklausomybės.
24
1 NF
1NF lentelės pavyzdys. Informacija apie gaminių tiekimą. Lentelės
schema yra tokia:
TIEKIMAS(TIEKĖJO_NR(TN), GAMINIO_NR(GN),
TIEKĖJO_PAVARDĖ(TP), DUOMENYS_APIE_TIEKĖJĄ(TD),
TIEKIMO_KAINA(TK)).
Funkcinės priklausomybės tarp šios lentelės laukų:
TN+GN  TP, TD, TK
TN  TP, TD .
Čia pirmoje eilutėje parodytos pilnos funkcinės priklausomybės nuo
pirminio rakto, o antroje - dalinės funkcinės priklausomybės nuo sudėtinio
rakto dalies TN.
Kaip matome, laukai TP ir TD, būdami neraktiniais laukais, funkcionaliai
priklauso nuo vienintelio galimo rakto TN+GN dalies TN. Taigi ši lentelė
nėra 2NF, tai reiškia, kad ji yra 1NF.
25
1 NF anomalijos
Pirmos NF lentelių apdorojimui būdinga nemaža keblumų, vadinamų
anomalijomis:
1. Įvedimo anomalija. Negalima įvesti tam tikrų duomenų tol, kol
neįvesta pilna rakto reikšmė (pvz., pateiktoje lentelėje TIEKIMAS
negalima įvesti jokių duomenų apie tiekėją iki to laiko, kol jis
nepristatęs kokio nors gaminio).
2. Atnaujinimo (keitimo) anomalija. Reikia didelių papildomų laiko,
atminties resursų, atnaujinant lentelėje dažnai pasikartojančias
reikšmes bei įterpiant lentelėje naujus laukus (pvz., norint įvesti
papildomus duomenis apie tiekėją, reikės juos daug kartų kartoti, jei
tiekėjo pristatomų gaminių įvairovė didelė).
3. Šalinimo anomalija. Šalinant tam tikrus duomenis, gali būti prarasta
naudinga informacija, netiesiogiai susijusi su šalinamais duomenimis
(pvz., šalinant konkretų tiekėją, atsiranda pavojus prarasti informaciją
apie gaminius, jei juos tiekė tik šis tiekėjas).
26
1 NF anomalijų šalinimas
Tokio tipo anomalijas galima panaikinti išskaidžius lentelę, t. y.
išskyrus į atskiras lenteles sudėtinio rakto dalis ir nuo jų
priklausančius laukus.
Pavyzdžiui, lentelė TIEKIMAS
*TIEKĖJO_NR
*GAMINIO_NR
TIEKĖJO_PAVARDĖ
DUOMENYS_APIE_TIEKĖJĄ
TIEKIMO_KAINA
gali būti išskaidyta į tokias
dvi lenteles:
TIEKĖJAI
TIEKIMAS
*TIEKĖJO_NR,
TIEKĖJO_PAVARDĖ
DUOMENYS_APIE_TIEKĖJĄ
*TIEKĖJO_NR
*GAMINIO_NR
TIEKIMO_KAINA
27
2 NF
Tegul lentelėje yra informacija apie projektavimo įstaigos darbuotojus, o
lentelės schema atrodo taip:
DARBUOTOJAI(DARBUOTOJO_NR(DN),
DARBUOTOJO_ASM_KOD(DAK), ALGA(AL), PROJEKTO_NR(PN),
BAIGIMO_DATA(BD)).
Funkcinės priklausomybės tarp šios lentelės laukų:
DN  DAK, AL, PN
DAK  DN, AL, PN
PN  BD
Lentelė DARBUOTOJAI, būdama 1NF, yra ir 2NF, nes jos abu galimi
raktai (DN ir DAK) turi tik po vieną lauką. Tačiau ši lentelė nėra 3NF, nes
jos neraktinis laukas BD tranzityviai priklauso nuo galimų raktų (tai
aišku iš priklausomybių: DN  PN arba DAK  PN, PN  BD).
28
3 NF
2NF lentelėms irgi būdingos įvedimo, atnaujinimo ir šalinimo anomalijos. Pavyzdžiui,
negalima įvesti projekto baigimo datos tol, kol nepaskirti šio projekto vykdytojai
(įvedimo anomalija). Projekto datos keitimas reikalauja visų turinčių šią datą įrašų o jų gali būti labai daug - paieškos ir modifikavimo (atnaujinimo anomalija).
Atleidus iš darbo visus kurio nors projekto vykdytojus, t.y. pašalinus šiuos
darbuotojus atitinkančius įrašus, bus prarasta ir to projekto baigimo data (šalinimo
anomalija).
Šios anomalijos išnyksta, panaikinus lentelėje esančią tranzityvią
funkcinę priklausomybę. Tai galima padaryti išskaidžius lentelę į
atitinkamas atskiras lenteles. Pavyzdžiui, lentelę DARBUOTOJAI galima
išskaidyti į tokias lenteles:
DARBUOTOJAI (DARBUOTOJO_NR, PROJEKTO_NR,
DARBUOTOJO_ASM_KOD, ALGA);
PROJEKTAI (PROJEKTO_NR, BAIGIMO_DATA).
Gautos lentelės DARBUOTOJAI ir PROJEKTAI yra trečiosios normalinės
formos.
29
Tipinis duomenų normalizavimo pavyzdys
Tarkime, kad reikia sukurti DB, kurioje turi būti saugoma informacija apie
studentų mokymosi rezultatus. Į DB pradinės lentelės sudėtį įtraukiami
šie laukai:
STUDENTO_BILIETO_NR(SB),
STUDENTO_PAVARDĖ(SP),
AKADEMINĖ_GRUPĖ(AG),
FAKULTETAS(FA),
GIMIMO_METAI(GM),
GYVENAMOS_VIETOS_ADRESAS(GA)
DISCIPLINOS_KODAS(DK),
DISCIPLINOS_PAVADINIMAS(DP),
KREDITŲ_SKAIČIUS(KS),
EGZAMINO_ĮVERTINIMAS(EĮ),
EGZAMINO_DATA(ED),
EGZAMINATORIAUS_PAVARDĖ(EP)
Šioje didelėje lentelėje norint surasti kurio nors studento laikyto egzamino
įvertinimą, datą ir egzaminatoriaus pavardę, reiktų parinkti pirminį raktą,
sudarytą iš dviejų laukų (SB+DK)
30
Tipinis duomenų normalizavimo
pavyzdys (2)
Pradinė DB lentelė aprašoma štai tokia schema:
STUDIJOS (SB, SP, AG, FA, GM, GA, DK, DP, KS, EĮ, ED, EP).
Funkcinės priklausomybės, egzistuojančios tarp lentelės (duomenų
bazės) STUDIJOS laukų:
SB+DK  EĮ, ED, EP
SB  SP, AG, FA, GM, GA
DK  DP, KS
AG  FA
Tai reiškia, kad turime 1NF lentelę.
31
Normalizavimas iki 2NF
Lentelėje STUDIJOS yra laukų, iš dalies priklausančių nuo sudėtinio
rakto SB+DK.
SB+DK  EĮ, ED, EP. Čia ED ir EP priklauso tik nuo DK
Normalizavę, t. y. išskaidę iš dalies priklausančius laukus į atskiras
lenteles, gausime šias lenteles:
STUDENTAI (SB, SP, AG, FA, GM, GA);
STUDIJOS (SB, DK, EĮ, ED, EP);
DISCIPLINOS (DK, DP, KS).
Dabar jau turime 2NF lenteles.
32
Normalizavimas iki 3NF
Lentelėje STUDENTAI egzistuoja lauko FA tranzityvi priklausomybė
nuo rakto SB. Jos galima išvengti sudarius dar vieną lentelę
GRUPĖS(AG, FA) ir pašalinus lauką FA lentelėje STUDENTAI.
Po šių pakeitimų turime 3NF lenteles:
GRUPĖS (AG, FA);
STUDENTAI (SB, SP, AG, GM, GA);
STUDIJOS (SB, DK, EĮ, ED, EP);
DISCIPLINOS (DK, DP, KS).
33
Dar vienas normalizavimo pavyzdys [3]
a) KURSŲ_INFORMACIJA (pradinė nenormalizuota lentelė)
KURSAS
B74
B94
K_PAVADINI-MAS
LYGIS
MODULIS
M_PAVADINIMAS
STATUSAS
KREDITA
I
Informatika
Bs
B741
Programavimas 1
Bazinis
8
B742
Komp. architektūra 1
B743
Duomenų apdorojim.
B744
Programavimas 2
Specializ.
11
B745
Komp. architektūra 2
B951
Informacijos teorija
Magistr.
15
B952
Mikroprocesoriai
B741
Programavimas 1
Bazinis
8
Komp. Taikymas
Ms
34
1NF
b) KURSŲ_INFORMACIJA (pirma normalinė forma)
KURSAS
K_PAVADIN-IMAS
LYGIS
MODULIS
M_PAVADINI-MAS
STATUSAS
KREDITAI
B74
Informatika
Bs
B741
Programavimas 1
Bazinis
8
B74
Informatika
Bs
B742
Komp.
architektūra 1
Bazinis
8
B74
Informatika
Bs
B743
Duomenų
apdorojim.
Bazinis
8
B74
Informatika
Bs
B744
Programavimas 2
Specializ
11
B74
Informatika
Bs
B745
Komp.
architektūra 2
Specializ
11
B94
Komp. taikymas
Ms
B951
Informacijos
teorija
Magistr.
15
B94
Komp. taikymas
Ms
B952
Mikroprocesoriai
Magistr.
15
B94
Komp. taikymas
Ms
B741
Programavimas 1
Bazinis
8
35
a)
Žingsnis link 2NF
KURSAI_MODULIAI
KUR-SAS MODU-LIS
K_PAVADINI-MAS
LYGIS
B74
B74
B741
B742
Informatika
Informatika
Bs
Bs
B74
B743
Informatika
Bs
B74
B744
Informatika
Bs
B74
B745
Informatika
Bs
B94
B94
B94
B951
B952
B741
Komp. taikymas
Komp. taikymas
Komp. taikymas
Ms
Ms
Ms
Ankstesnėje 1NF lentelėje
pirminį raktą sudaro
atributai ‘kursas’ ir
‘moduliai’.
b) MODULIAI
MODU-LIS
M_PAVADINIMAS
B741
B742
B743
B744
B745
B951
B952
Programavimas 1
Komp. architektūra 1
Duomenų apdorojim.
Programavimas 2
Komp. architektūra 2
Informacijos teorija
Mikroprocesoriai
STATUSAS
Bazinis
Bazinis
Bazinis
Specializ
Specializ
Magistr.
Magistr.
KREDITAI
8
8
8
11
11
15
15
Atributai
‘m_pavadinimas’,
‘statusas’ ir ‘kreditai’
priklauso tik nuo rakto
dalies ‘moduliai’, taigi,
turime dalinę
priklausomybę, kurios
2NF neturi būti. Tam
skaidome lentelę į dvi.
Bet lentelė
KURSAI_MODULIAI dar
nėra 2NF, nes
‘k_pavadinims’ ir ‘lygis’
priklauso nuo rakto dalies
‘kursas’. Taigi, šią lentelę
reikia dar skaldyti.
36
2 NF
a) KURSAI_MODULIAI
c) MODULIAI
MODULIS
M_PAVADINIMAS
STATUSAS
KREDITAI
B741
Programavimas 1
Bazinis
8
B742
Komp. architektūra 1
Bazinis
8
B743
Duomenų apdorojim.
Bazinis
8
B744
Programavimas 2
Specializ
11
KURSAS
MODULIS
B74
B74
B74
B74
B74
B741
B742
B743
B744
B745
B94
B951
B745
Komp. architektūra 2
Specializ
11
B94
B952
B951
Informacijos teorija
Magistr.
15
B94
B741
B952
Mikroprocesoriai
Magistr.
15
B741
Programavimas 1
Bazinis
8
b) KURSAI
KURSAS
K_PAVADINIMAS
LYGIS
B74
Informatika
Bs
B94
Komp. taikymas
Ms
37
3 NF
c) MODULIAI
a) KURSAI_MODULIAI
MODULIS
M_PAVADINIMAS
STATU-SAS
B741
Programavimas 1
Bazinis
B742
Komp. architektūra 1
Bazinis
B743
Duomenų apdorojim.
Bazinis
B744
Programavimas 2
Specializ
KURSAS
MODULIS
B74
B74
B74
B74
B74
B741
B742
B743
B744
B745
B94
B951
B745
Komp. architektūra 2
Specializ
B94
B952
B951
Informacijos teorija
Magistr.
B94
B741
B952
Mikroprocesoriai
Magistr.
b) KURSAI
d) STATUSAS
KURSAS
K_PAVADINIMAS
LYGI
S
B74
Informatika
Bs
B94
Komp. taikymas
Ms
STATUSAS
Bazinis
KREDITAI
8
Specializ.
11
Magistr.
15
38
Parengta pagal:
1.
J.Adomaitis ir kt. Informatika I dalis Vadovėlis, L-kla “Technolgija”,
Kaunas, 1999, p.p. 161 – 173.
2.
Informacijos ir komunikacijos technologijos / Rimvydas Skyrius,
Audronė Mikalauskienė, Laima Zalieckaitė. Vilnius: VU, 2005, 32-44.
3.
V. Sekliuckis, S.Gudas, G.Garšva INFORMACIJOS SISTEMOS IR
DUOMENŲ BAZĖS, Vadovėlis. Kaunas: Technologija, 2003, 64-85.
4.
A.Saulis, O.Vasilecas INFORMACINIŲ SISTEMŲ PAGRINDAI, mokomoji
knyga, Technika, Vilnius, 1998, 82 – 98.
Dar apie tai rasite:
1.
ИНФОРМАТИКА базовый курс. Учебник для ВУЗОВ / СПб., Питер,
2001, c.c. 328-355.
2. http://distance.ktu.lt/kursai/informatika1/8/
3. http://www.citforum.ru/database/dbguide/index.shtml
4.
http://www.citforum.ru/database/dblearn/index.shtml
39