Gagnagrunnar: Töflur og AND/OR

Hér á eftir koma tvær ábendingar til þeirra sem eru farnir að fikta við gagnagrunna, Prentið þetta út og lesið nokkru sinnum yfir því þetta gæti hugsanlega hjálpað ykkur að skilja nokkur mikilvæg atriði.

1)Uppbygging taflna, hvernig notfærum við okkur kosti venslaðra grunna?
Hugið vel að uppbyggingu taflna, þá verður eftirleikurinn auðveldur.

Munið, látið það hringja viðvörunarbjöllu ef þið þurfið að endurtaka innslátt eða ef dálkar(svið) endurtaka sig. Þá er alveg víst að þið getið skipt töflunni upp. Sjá dæmi að neðan.

Dæmi;
Ég ætla að halda utanum nafn og heimili nemenda sem og fögin sem þeir hafa tekið og einkunnir. Fyrsta sem mér gæti dottið í hug er að hanna eina töflu þar sem fram koma eftirfarandi svið:

Kennitala
Nafn
Heimilisfang
Heimsími
Fag
Einkunn

En við nánari athugun sé ég að það þarf alltaf að færa kennitölu, nafn, heimilisfang og síma fyrir hvert fag sem nemandinn velur sér. Fyrir utan hvað það er tímafrekt býður það upp á innsláttarvillur og ef nemandinn flytur þarf að breyta heimilisfangi og símanúmeri á mörgum stöðum. Þá gæti mér dottið í hug dettur í hug önnur gerð með aðeins einni færslu fyrir hvern nemanda og mörg svið fyrir námskeið og einkunnir:

Kennitala
Nafn
Heimilisfang
Heimasími
Fag1
Einkunn Fag1
Fag2
Einkunn Fag2
Fag3
osfr…

En hvað á ég að gera ráð fyrir mörgum sviðum fyrir fög? Hversu stór á taflan að vera og hversu mikið pláss á hún að taka? (Tóm svið taka pláss) Hvað ef nemandi tekur fleiri námskeið en gert er ráð fyrir í töflunni? Hvernig get ég reiknað meðaltal einkunna ef þær eru ekki í sama sviði? ATH! Ef um er að ræða endurtekningu sviða eins og í þessu tilfelli eru það skýr skilaboð um að ég verði að brjóta töfluna upp í tvær töflur.

Ef ég set þetta upp í tvær töflur gæti það litið t.d. svona út;
Nemenda taflan:
NemendurKenni
Nafn
Heimilisfang
Sími

Fag taflan verður svona:
FagKenni
NemendurKenni
Fag
Einkunn

Enn er ég í vandræðum. Því ég þarf að skrá nafnið á faginu aftur og aftur. Það merkir að ég get gert enn betur og skipt aftur upp (í þriðju töfluna). Þ.e. eina fyrir nemendur, eina fyrir fög, og eina fyrir einkunnir.
Nemendataflan verður því svona:
NemendurKenni
Nafn
Heimilisfang
Sími

Fag taflan verður svona:
FagKenni
Fag
Athugasemdir

Taflan Einkunnir hefur aðeins þrjú svið:
NemendurKenni
FagKenni
Einkunn

Núna er þetta orðin mjög góður grunnur. Og við skulum huga að einkvæmum lyklunum.
Nemendataflan - lykil á NemendurKenni
Fagtaflan - lykil á FagKenni
Einkunnartaflan - lykill á NemendurKenni og hugsanlega líka á FagKenni.

Þessi grunnur er nú stækkanlegur á alla kanta. Gögnin taka bara það pláss sem nauðsynleg er. Það er auðvelt að viðhalda honum og skriffinnska er í lágmarki.

________________________________________________

2) AND / OR

AND - Öll skilyrðin verða að vera uppfyllt

Skilyrði 1 Skilyrði 2 Útkoma
Rangt Rangt Rangt
Rangt Rétt Rangt
Rétt Rangt Rangt
Rétt Rétt Rétt


OR - Nægir að eitt skilyrð sé uppfyllt

Skilyrði 1 Skilyrði 2 Útkoma
Rangt Rangt Rangt
Rangt Rétt Rétt
Rétt Rangt Rétt
Rétt Rétt Rétt


Dæmi 1; gætið ykkur á að ekki er alltaf hægt að spyrja tölvuna eins og við myndum spyrja annað fólk.

Nafnatafla
Nafn Pnr
Jón 101
Gunnar 200
Karl 600
Eyrún 220
Sigrún 200
Geir 101

Ef ég vill fá lista yfir alla þá sem hafa pnr 200 og 220
eðlilegast væri kannski að segja SELECT * FROM tblNafn WHERE strPnr=“200” and strPnr=“220”, en það skilar engu.
Það er enginn bæði með póstnúmerið 200 og 220. Hér verð ég að nota or í stað and.
Munið,and merkir að bæði gildin verða að vera til staðar til að það sé satt!
Margrét má ekki taka spurninguna á mannamáli bókstaflega heldur spyrja eins og tölvan hugsar. Í þessu tilfelli er tiltölulega augljóst að útkoman sé röng en stundum getur niðurstaðan orðið trúleg þótt hún sé röng.