Hoe zet ik het beste mijn Database op ?

Status
Niet open voor verdere reacties.

ArieBoom

Gebruiker
Lid geworden
26 mei 2011
Berichten
6
Hallo allemaal

Ik heb nog geen database maar zit in de "ontwerpfase"
ik weet inmiddels dat een goed ontwerp goud waard is,
ik ben alleen geen access expert :o

De bedoeling is dat ik een database maak voor een bedrijf.
Het bedrijf is actief in het onderwijs en zit in de research bizz.

Het bedrijf heeft een KLANT, die klant heeft een TEST.
De TEST wordt gedaan bij verschillende SCHOOL DISTRICTEN die weer bestaan uit diversen SCHOLEN en de scholen hebben natuurlijk verschillende LERAREN.

om het nog gecompliceerder te maken, de TEST vind plaats in verschillende klassen.

Wat ik zelf bedacht heb is dit ( en ik zal de onnodige info weglaten zoals adres gegevens etc.:

Tabel : KLANT-STUDY

( KLANT, TEST_ID, KLAS_1, TARGET_KLAS_1, KLAS_2, TARGET_KLAS_2 etc. KLAS is geen constante het kan zijn groep 5 lagere school maar ook klas 3 vmbo of hmbo 4 net wat de klant wil en we kunnen meerdere testen hebben van een klant )

Tabel : LERAAR ( TEST_ID als dropdown, dit bepaalt welke klassen er geselecteerd worden, AANTAL_LEERLINGEN )

Tabel : School District ( voornamelijk contact info en shipping adres )
Tabel : School ( voornamelijk contact info en shipping adres )

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

De KLANT bepaalt welke KLASSEN nodig zijn met een target, bijvoorbeeld 80 leerlingen uit groep 4 uit 3 verschillende scholen.

Als "wij" de database gaan invullen is het LERAAR gedeelte het belangrijkste.
Hierin wordt ( mijns inziens ) bepaald hoe de gegevens verwerkt worden.

De LERAAR krijgt een dropdown menu met alle TESTS die "we" hebben,
de keuze hiervan moet bepalen welke keuze mogelijkheid we hebben in KLAS.

Dan vullen wij het aantal leerlingen in die de leraar heeft in die KLAS
Het komt zelfs voor dat een leraar meerdere klassen heeft dus zijn er meerdere keuze menu's nodig.

Probleem is dat er meerdere tests tegelijk bezig zijn met ieder hun eigen klas voorwaarden

Ook bij het samenvatten van de gegevens is dit van belang.
Een query is ( zover ik het begrijp ) een vrij "dom" iets.

Ik kan een query maken uit de tabel LERAAR die alle TEST, KLASSEN en LEERLING AANTALLEN laat zien, maar dit is niet de bedoeling, ik krijg dan alle leraren te zien
bijvoorbeeld :

leraarA - TestA - Groep 4 - 25 leerlingen
leraarB - TestA - Groep 3 - 15 leerlingen - Groep 4 - 20 leerlingen
leraarC - TestB - VMBO 3 - 30 leerlingen - VMBO 4 - 20 leerlingen
leraarD - TestC - HBO 2 - 15 leerlingen

Ik wil kunnen zien hoeveel leerlingen we hebben uit groep 3 voor test A.
Met een selectie voorwaarde is dit ( mijns inziens ) onmogelijk omdat er geen constante waarde is

Dus mijn vraag is : Hoe zet ik dit goed op ?
 
Dat is een uitgebreide vraag.... Kijk eerst eens naar de cursus Access, die we in de handleidingsectie hebben staan; De eerste maanden heb ik het opzetten en ontwerpen van een database behandeld. Eén van de dingen die je daar uit zou kunnen leren, is dat je al een denkfout hebt gemaakt in je opzet van de tabel [Klant-Study]. Daar heb je het volgende bedacht:
KLANT, TEST_ID, KLAS_1, TARGET_KLAS_1, KLAS_2, TARGET_KLAS_2 etc.
In het kader van het normaliseren van je gegevensbronnen (als die term je niks zegt, dan moet je zeker de cursus lezen) zou je de klassen en targets in een aparte tabel moeten onderbrengen. In grote lijnen moet je het zo zien: alle gegevens die in een tabel herhaald worden, moet je uit die tabel verwijderen en in een aparte tabel zetten. Als je de tabellenstructuur goed hebt opgezet, kun je alle overzichten maken die je wilt, en ook in laten vullen.
Maar begin eerst bij het begin, en stel jezelf de juiste vragen.... Kom je er niet uit, post dan een voorbeeldje met de db die je dan hebt gemaakt, dan kunnen we op basis daarvan verder helpen.
 
Dank je Octafish

krijg een fout melding : De volgende fouten zijn opgetreden: Test_Database_ArieBoom.accdb: Uploaden van bestand mislukt.

Dus heb maar even een omweg gezocht :)

http://www.mijnbestand.nl/Bestand-DUPQAJKI84RK.accdb

Ik heb maar een eerste opzet gemaakt zodat het idd wat duidelijker is.
Wat de database moet gaan doen is het volgende :

1) Gegevens Beheer.

Het bedrijf maakt nu gebruik van spreadsheets, het probleem is dat deze door verschillende personen gebruikt worden en dat het een wirwar is van spreadsheets die niet meer met elkaar kloppen en constant ge-update moeten worden.

De database komt op een bedrijfsnetwerk om dit probleem in de toekomst te voorkomen.

2) Analise gegevens.

Het proces gaat als volgt

Eerst versturen we een spreadsheet voor de gegevens van de leerlingen
( Spreadsheet Previous in de tabel TEACHER )
dit zijn algemene gegevens die voor de database onbelangrijk zijn maar noodzakelijk voor de study.

Daarna weten we hoeveel leerlingen een leraar heeft ( GRADE_01_AMOUNT )

wij versturen een aantal (test) booklets naar een leraar,
dit kunnen er meer of minder zijn dan het aantal leerlingen.
Soms wil of kan een leraar een test in 2 keer doen, of zijn er simpelweg niet genoeg booklets.

op een gegeven moment komen die terug met de answer sheets, dit kunnen verschillende aantallen zijn. Het komt voor dat een leraar meerdere leerlingen test zodat we 35 booklets versturen en 42 answersheets terug krijgen. Ook komt het voor dat we minder answer sheets terug krijgen omdat leerlingen ziek zijn of iets dergelijks.

Daarna moeten we kunnen zien of we het juiste aantal answersheets hebben per study en per grade. ( de target nummers )

Natuurlijk willen we meer weten maar dit is wel het belangrijkste :-)
 
Ik zal er eens rustig naar kijken; ben nu even op vakantie, dus ik doe het eventjes wat rustiger aan ;)
 
Ik ben intussen wat verder gegaan en er lustig op los geexperimenteerd :D

Nu wil ik een query maken ( als dit kan natuurlijk ) die het volgende doet.

Uit de tabel Teacher heb ik het volgende gefilterd :
Study_ID , Teacher_ID en School_ID

als criteria in Study_ID geef ik een naam van een study op, zodat alleen de leraren geselecteerd worden die aan deze study mee doen.

Een andere query filtert uit de tabel Schools : Study_ID , School_ID en de adressen.

Ook hier geef ik als criteria de naam van de study op.

Nu heb ik dus 2 query's die de contact gegevens laten zien van een bepaalde study.
Het is nu de bedoeling om een rapport te krijgen die dit netjes laat zien.

Teacher_ID , School_ID , adres

als ik een rapport maak lukt het me niet om gegevens uit een andere query toe te voegen, ik kan alleen selecteren uit tabellen.

Dus mijn vraag is : Hoe kan ik dit doen, en is dit wel de juiste manier ?
 
Kun je de nieuwste versie die je nu hebt uploaden? Want de vorige is niet echt bruikbaar....
 
Ik zie nog steeds een database die totaal niet genormaliseerd is. Doe dat eerst, want je bent een hele diepe kuil voor jezelf aan het graven....
 
Kennelijk heb je de cursus niet gevonden waar OctaFish het over had. Zie onderstaande link en dan de 1e 4 titels. Het 1e deel gaat over het opzetten van een database.

Tip: Zorg eerst voor een goede tabelstructuur en staat die als een huis, begin dan pas met queries en de rest.

http://handleiding.helpmij.nl/
 
ik heb de cursus nu gevonden en gelezen.
ik zie nu dat ik helemaal niet gekeken heb naar normalisatie,

Nu heb ik dus een nieuwe opzet gemaakt en wat screenshots gemaakt van de tabellen.

attachment.php


attachment.php


De tabel Study
De study groups vormen het grootste probleem,
zoals ik al eerder aangaf, de namen kunnen verschillen per study
Het enige wat ik zeker weet is dat er niet meer dan maximaal 6 groepen studenten mee doen.

Study A kan Grade 4 en Grade 5 hebben
Study B kan English 5B en English 6A hebben

Ik wil graag hebben dat de definitie word opgegeven in dit gedeelte en als keuze menu tevoorschijnt komt als de desbetreffende study geselecteerd word in de Teachers tabel

attachment.php


SchoolDistrict
Niet elke study maakt gebruik van een district maar wil het direct met de school afhandelen

attachment.php


School
Niet elke study maakt gebruik van een school maar handelt het af met een district

attachment.php


2 onderdelen van de Leraar tabel zijn Pretest en Posttest

normaal gaat een study als volgt :

1) Spreadsheet word verstuurd om achtergrond info te verzamelen bij de leraar
2) Leraar wordt gevraagd om deel te nemen aan een survey
3) Boeken en antwoord bladen worden opgestuurt
4) boeken en antwoord bladen komen terug

Het aantal boeken en antwoordbladen kan verschillen.

Dit is de Pre-test, een test om het begin niveau te bepalen.
Daarna krijgen de leerlingen het nieuwe les materiaal
en aan het eind van het schooljaar volgt de Post test om het eind niveau te bepalen
zodat wij kunnen beoordelen of een lesmethode beter is of niet.

1) Spreadsheet word verstuurd om achtergrond info te verzamelen bij de leraar
dit kan veranderen gedurende het schooljaar
2) Leraar wordt gevraagd om deel te nemen aan een survey
3) Boeken en antwoord bladen worden opgestuurt
4) boeken en antwoord bladen komen terug

attachment.php


Als ikzelf de tabellen bekijk, en de definitie lees van de normalisatie normen,
dan zie ik nu niets fout ( kan aan mij liggen natuurlijk )

1NV = Elk record is uniek - Elk veld is niet deelbaar - Geen herhaling van atributen
zover ik kan beoordelen voldoet deze opzet hieraan

2NV = Afhankelijkheid van de sleutel ( in mijn tabellen de _ID velden )
ook hieraan voldoet mijn database

3NV = afhankelijk van primaire sleutel - gegevens niet af te leiden uit andere gegevens
zover ik het kan beoordelen voldoe ik hieraan.

Of niet ?????
 

Bijlagen

  • Client.jpg
    Client.jpg
    24 KB · Weergaven: 163
  • study.jpg
    study.jpg
    67,7 KB · Weergaven: 186
  • school district.jpg
    school district.jpg
    43,6 KB · Weergaven: 164
  • schools.jpg
    schools.jpg
    37,9 KB · Weergaven: 155
  • leraar01.jpg
    leraar01.jpg
    65,6 KB · Weergaven: 167
  • leraar02.jpg
    leraar02.jpg
    55,5 KB · Weergaven: 157
Je hebt, vrees ik, nog steeds herhalende gegevens. En die kun je zelf hopelijk ook zelf herkennen: de Study-groups, en de Teacher-groups. Hoe ik dat zie? Aan het feit dat je elke groep 6 keer terug laat komen.... Ook deze groepen (eigenlijk moet ik zeggen: juist deze groepen) moet je in een aparte tabel zetten, met daarbij een veld waarin je het groepsnummer opslaat, en uiteraard het Study_ID om de tabel te kunnen koppelen aan de tabel tblStudy. Hetzelfde verhaal voor je Teachers tabel. In de tabel tblTeacher heb je een textveld School; dat zou ook een verwijzing moeten zijn naar de tabel tblSchool d.m.v. het veld SchoolID.

Kijk nog eens goed naar je gegevensbronnen; die bepalen wat je brontabellen zijn, en wat de cumulatieve tabellen. Een brontabel vind ik een tabel die de vaste gegevens bevat (je werkt met een vast aantal klanten, districten en scholen). Cumulatieve tabellen zijn de tabellen waarin je de data opslaat, zoals tblStudy (breidt steeds uit) en de tabellen met de testgegevens.
Maar je bent op de goede weg :thumb:
 
Dank je voor je eindeloze gedult :-)
Ik hoop dat ik niet te lastig ben.


Ik heb de veranderingen doorgevoerd, alhowel ik niet de namen van de sleutels heb veranderd.
Misschien is dit totaal verkeerd, maar voor mij geeft het nu wat meer overzicht.
Het veld Study_ID komt daarom voor in meerdere tabellen.

attachment.php


StudyGroups Tabel :

Helaas kon ik maar een screenshot maken van een gedeelte van deze tabel.
Ik weet alleen niet goed wat ik aan moet met de primaire sleutel.
Nu is het nog Study_Group_01 maar dit is natuurlijk verkeerd.
Study_ID is al primair in de Study tabel en ik weet niet of dit veld dan ook gebruikt mag worden
als sleutel in deze tabel

Ook heb ik Teacher_ID toegevoegd, ik moet natuurlijk terug kunnen vinden
welke leraar welke groepen heeft en dit leek mij de juiste manier



Client.jpgleraar.jpgschool district.jpgschools.jpgstudy.jpgstudygroups.jpg
 
Ik heb nog steeds problemen met de indeling van de tabel tblStudyGroups. Deze bevat namelijk gegevens die niet aan elkaar gerelateerd zijn. En dat is de 2e normaalvorm:
2NV = Afhankelijkheid van de sleutel ( in mijn tabellen de _ID velden) Je sleutel in deze tabel is het veld [Studygroup_01]. De 2NV vereist dan, dat alle gegevens in die tabel afhankelijk zijn van het veld [Studygroup_01]. En de velden [Studygroup_02]. [Studygroup_03] etc zijn overduidelijk niet afhankelijk van [Studygroup_01]. Die tabel moet je dus versimpelen, en voor elke groep één record maken. Je krijgt dan de volgende velden:
[StudygroupID], [Studygroup_Year], [Studygroup_Target], [TeacherID], [Studygroup_Students]. O.id.
In ieder geval een stuk minder veldjes... en een genormaliseerde tabel ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan