DATAMODEL SQL Middelbare School
Versie Datum Auteur Groep
1.0 30 oktober 2010 Mark Nuyens, studentnummer: 500625333 TDI 1
INHOUDSOPGAVE
1. Informatiedomein 1.1 Informatiedomein 1.2 Toepassingen
3 3 3
2. Entiteiten Relatie Diagram (ERD)
4
3. Tabeldefinities
5
4. Data 4.1 Screendump
6 6
5. Views 5.1 Basisopdrachten 5.2 Relationele opdrachten
7 7 7
2
1. INFORMATIEDOMEIN
1.1 Informatiedomein Het ontwikkelde datamodel is bedoeld voor het onderwijs, met name middelbare scholen. Het model zou eventueel ook gebruikt kunnen worden voor lager of hoger onderwijs, maar dit wordt niet aangeraden. Het model betreft een relationeel model. De uitkomst is een relationele database die gekoppeld kan worden aan een Relationeel Database Management System (RDBMS). Vervolgens kunnen hier opdrachten op worden uitgevoerd met behulp van een Database Client (DB Client) zoals PHP MyAdmin.
1.2 Toepassingen De database kan voor de volgende toepassingen worden gebruikt: • H et opslaan en opvragen van persoonsgegevens van o.a. leerlingen, docenten en andere medewerkers. • Het opslaan en opvragen van schoolvakken met de bijbehorende leerlingen en/of docenten. • Het opslaan en opvragen van klaslokalen met de bijbehorende vakken en/of schoonmakers. • Het koppelen van specifieke leerlingen en/of docenten aan bepaalde schoolvakken. • Het koppelen van specifieke vakken aan bepaalde kaslokalen. • Het koppelen van specifieke schoonmakers aan bepaalde klaslokalen. Het natuurlijk mogelijk dat men gaandeweg nieuwe oplossingen bedenkt of ontdekt. Dit is geheel toegestaan, zolang de integriteit van de database maar intact blijft.
We wensen de gebruiker(s) van de database alvast succes.
3
2. ENTITEIT-RELATIE DIAGRAM (ERD)
Het diagram hieronder betreft een zogenaamd entiteit-relatie diagram, een grafische representatie van het datamodel. Het is een weergave van entiteiten, relaties en beperkingen.
4
3. TABELDEFINITIES
Hoewel de tabeldefinites eerder al te zien waren in het entiteit-relatie diagram (ERD), worden deze hier nogmaals getoond. Elke tabel geeft een overzicht van de bijbehorende kolommen. Naam
Datatype
Primary Key
Foreign Key
NULL
ID
INTEGER
Ja
voornaam
VARCHAR(45)
NOT NULL
achternaam
VARCHAR(45)
NOT NULL
tussenvoegsel
VARCHAR(45)
geboortedatum
DATE
NOT NULL
straat
VARCHAR(50)
NOT NULL
postcode
VARCHAR(7)
NOT NULL
woonplaats
VARCHAR(30)
NOT NULL
telefoonnummer
VARCHAR(14)
NOT NULL
emailadres
VARCHAR(70)
persoon NOT NULL
student persoonID
INTEGER
Ja
NOT NULL
vakID
INTEGER
Ja
NOT NULL
persoonID
INTEGER
Ja
NOT NULL
vakID
INTEGER
Ja
NOT NULL
INTEGER
Ja
NOT NULL
docent
schoonmaker persoonID vak ID
INTEGER
naam
VARCHAR(45)
lokaalID
INTEGER
Ja
NOT NULL NOT NULL Ja
NOT NULL
lokaal ID
INTEGER
naam
VARCHAR(45)
schoonmakerID
INTEGER
Ja
NOT NULL NOT NULL Ja
NOT NULL
Defintie
Tabel
5
4. DATA (SCREENDUMP)
De figuren hieronder zijn zogenaamde ‘screendumps’ (screenshots) van voorbeeld-data en zijn bedoeld ter illustratie van de werking van de database. De naam onder elk figuur is de naam van de tabel.
persoon
docent
schoonmaker
vak
lokaal
student
6
4. VIEWS
Onderstaande SQL-opdrachten zijn bedoeld ter illustratie van de mogelijke functies.
4.1 Basisopdrachten
SELECT * FROM persoon WHERE woonplaats = ‘Haarlem’ SELECT - Toon alle personen die in Haarlem wonen (dus zowel studenten, docenten, etc.)
INSERT INTO ‘middelbareschool’.’lokaal’ ( ‘ID’ , ‘naam’ , ‘schoonmakerID’ ) VALUES ( NULL , ‘0-A04’, ‘3’ ); INSERT - Voeg een nieuw lokaal toe, inclusief schoonmaker
UPDATE persoon SET telefoonnummer = ‘0645033283’ WHERE voornaam = ‘Mark’ AND achternaam = ‘Nuyens’ UPDATE - Wijzig het telefoonnummer van Mark Nuyens
DELETE FROM persoon WHERE ID = ‘4’; DELETE FROM docent WHERE persoonID = ‘4’; DELETE - Verwijder een docent uit de database (dit wordt gedaan voor meerdere tabellen)
7
4.2 Uitgebreide opdrachten (relationeel)
SELECT vak.naam AS naam_vak FROM vak LEFT JOIN student ON student.vakID = vak.ID LEFT JOIN persoon ON persoon.ID = student.persoonID WHERE persoon.voornaam = ‘Mark’ AND persoon.achternaam = ‘Nuyens’ SELECT - Toon alle vakken die een specfieke student volgt (Mark Nuyens)
SELECT CONCAT(persoon.voornaam, ‘ ‘, persoon.achternaam) AS naam_student FROM persoon LEFT JOIN student ON student.persoonID = persoon.ID LEFT JOIN vak ON vak.ID = student.vakID WHERE vak.naam = ‘Wiskunde’ SELECT - Toon alle studenten die een specifiek vak volgen (Wiskunde)
SELECT lokaal.naam AS lokaal, persoon.* FROM lokaal LEFT JOIN schoonmaker ON schoonmaker.persoonID = lokaal.schoonmakerID LEFT JOIN persoon ON persoon.ID = schoonmaker.persoonID SELECT - Toon alle klaslokalen met de bijbehorende schoonmaker en zijn persoonsgegevens
8