Toets IAM-TDI-SQL 1011 blok1
Naam Studentnummer Klas Herkansing
[ ] ja , nee [ ] , zoja uit welk jaar?
kernbegrippen relationele database Minimaal drie van de vijf vragen goed beantwoorden. 1. * Database worden vaak gebruikt in Client-Server architectuur.
Geef van onderstaande applicatie aan of het een ‘client’ is of een ‘server’:is en motiveer je antwoord Is PHP myAdmin een databse server of een database client? [ ] Database Server [ x ] Database Client Toelichting: PHPmyAdmin is een van de mogelijke clients van de databaseserver (mySQL) . Een databaseserver een stuk centrale software dat daadwerkelijk de data in de database manipuleert. De databaseclient is een stuk decentrale software dat gekoppeld is aan de server en dat de opdrachten geeft aan de server. Er kunnen meer clients tegelijk gekoppeld worden aan één server. PHPmyAdmin is webbased software dat opdrachten (sql-queries) doorgeeft aan de mySQL database server. Tegelijkertijd kunnen andere client iets met de database doen: een publieke website of DBWrench of mySQLWorkbench of MS ACCESS. ___________________________________________________________________ 2. * Wat vind jij van de volgende stelling: “ een primairy key ( PK, primaire sleutel ) is altijd een nummer” [ ] waar [ x] onwaar Toelichting: Een PK is een kolom in een datatabel dat voor iedere rij een unieke waarden bevat. Op die manier heeft iedere rij in de tabel minimaal een waarde waarin het verschilt van alle andere rijen. Op die manier kan iedere rij uniek geïdentificeerd worden.
1/1/
Toets IAM-TDI-SQL 1011 blok1 Dat kan een nummerieke waarde zijn, al dan niet automatisch gegenereerd, maar dat is niet noodzakelijk. Voorbeelden van niet-numerieke waarden die als PK kunnen dienen: kentekennummers van auto’s, url’s van websites ___________________________________________________________________ 3. a) * Wat is een many-to-many relatie, en geef drie goede voorbeelden? Een relatie waarbij een rij uit de ene tabel gekoppeld kan worden aan meerdere rijen uit een andere tabel en andersom. - student-vak: een student kan meer vakken volgen en een vak kan door meer studenten worden gevolgd - lezer – krant : een lezer kan meer kranten lezen en een krant kan door meer lezers worden gelezen - zoekterm – artikel : een zoekterm kan naar meer artikelen leiden en een artikel kan met meer zoektermen gevonden worden _____________________________________________________________________ ____________________________________ b ) * Wat is een many-to-one relatie, en geef drie goede voorbeelden? Een relatie waarbij een rij uit de ene tabel gekoppeld kan worden aan meer rijen uit de andere tabel, maar de rijen uit de andere tabel aan slecht één rij uit de ene tabel kan worden gekoppeld - stad – straat : een stad bevat meer straten, maar een straat bevind zich in één stad - klas – student : een klas heeft meer studenten, maar een student zit in één klas - auteur – boek : een auteur kan meer boeken schrijven, maar een boek wordt door één auteur geschreven __________________________________________________________________ 4. A : * Temperatuur wordt veelal aangegeven in graden Celcius ( bijv 20°C) of in Kelvin ( 390 K ). Wat is het datatype van temperatuur? Licht je antwoordt toe. Het datatype is numeriek. Met temperaturen kan worden gerekend. Gemiddelde temperatuur, temeratuursverschillen, etc. Kelvin of Celsius zijn de eenheden waarin gerekend wordt. Net als afstanden in meters en kilometers kan worden uitgedrukt, of gewicht in grammen of in kilogrammen In het datamodel zal gekozen moeten worden welke eenheden worden gebruikt. B: * Iedere computer op het internet heeft een IP-nummer. Wat is het datatype van een IP-nummer? Licht je antwoord toe. Een IP nummer kan als stuk tekst ( chararcterstring/varchar) gemodelleerd worden of als een combinatie van meerdere numeriek waarden. Over het algemeen is een string adekwaat omdat er geen numeriek operaties zullen worden uitgevoerd op een IP nummer. IPnummers als tekst kunnen gemakkelijk vergeleken worden en dat is veelal voldoende Een IP nummer als combinatie van numerieke waarden kan zinvol zijn, als een systeembeheerder reeksen van ipnummers te beheren heeft. Deze mate van detail is vaak niet nodig. Een IP nummer kan niet als één nummer worden opgeslagen, omdat de punten in een
2/2/
Toets IAM-TDI-SQL 1011 blok1 IPnummer geen decimaalpunten zijn, maar scheiders tussen verschillende delen van het IPnummer. _____________________________________________________________________ ________________________________________________ 5. * Het is meestal onwenselijk om gegevens meer dan één keer in een database te bewaren. Waarom is dat onwenselijk? Welk woord wordt gebruikt om aan te geven dat er geen redundante ( d.i.: overbodige, dubbele ) gegevens in de database staan? Dit is onwenselijk omdat - er de mogelijkheid is dat er inconsistenties onstaan - het updaten van gegevens ingewikkelder wordt - er meer geheugenruimte nodig is Een datamodel waarin gegevens nooit meer dan één keer worden opgeslagen heet ‘genormaliseerd’ ___________________________________________________________________________ ___________________________________________________________________________ 6. *** “Transaction Processing” kan worden gebruikt als er meerdere updates, inserts en/of deletes achter elkaar worden gedaan. Bijvoorbeeld bij een bankoverschrijving: Bij Jan gaat er een bedrag vanaf, bij Piet komt dat bedrag er vervolgens bij. a) Wat is de functie van ‘transaction processing’ in zo’n geval. b) Noem nog een voorbeeld situatie waar transaction processing nuttig is. a) Transaction Processing zorgt er voor dat een serie updates in zijn geheel wel of niet wordt uitgevoerd en dat de serie geïsoleerd wordt uitgevoerd ( dwz: queries vanuit een andere client of andere transactie mengen zich niet met de transactie ). Bij een foutmelding kunnen alle voorgaande updates worden terug gedraaid en alle updates zijn pas definitief als alle updates met succes zijn uitgevoerd. Op deze manier wordt voorkomen ( de kans minimaal gemaakt) dat er door een fout wel geld bij Jan wordt afgeschreven en niet bij Piet erbij wordt geschreven. b) Het plaatsen van een bestelling op een webwinkel. De bestelgegevens en producten dienen in zijn geheel wel of niet in de database te worden opgenomen, maar nooit voor de helft.
3/3/
Toets IAM-TDI-SQL 1011 blok1
Naam Studentnummer Klas Herkansing
[ ] ja , nee [ ]
SQL queries maken Een database voor een leesclub slaat gegevens op over boeken, lezers en de recensies die lezers over de boeken schrijven. Een boek heeft een auteur en een uitgeverij. Een boek hoort in een bepaald genre. De lezers van de leesclub schrijven recensies over boeken
Bestudeer het datamodel en maak voor onderstaande vragen SQL queries. De database met data kan gedownload worden van het IAM intranet, en kan worden geimporteerd in je eigen mySQL database. Hiermee kan je de queries uitproberen. Vragen met * moeten goed beantwoordt worden, voor extra punten ook de vragen met **
4/4/
Toets IAM-TDI-SQL 1011 blok1
Selecteer de gegevens van de lezers uit Amsterdam en sorteer op leeftijd
*
SELECT * FROM lezer WHERE woonplaats ='amsterdam' ORDER BY geboortedatum Selecteer de ID’s en titels van alle boeken met ‘voetbal’ in de titel
*
SELECT ID, titel FROM boek WHERE titel LIKE '%voetbal%' Selecteer het gemiddelde aantal bladzijden in de boeken
*
SELECT AVG(aantalbladzijden) FROM boek
Selecteer de namen van alle steden waar lezers wonen en het aantal lezers dat in deze stad woont
*
SELECT woonplaats, count(ID) AS aantallezers FROM lezer GROUP BY woonplaats
Selecteer de gegevens van alle boeken en koppel daaraan de naam van de auteur van het boek.
*
SELECT boek.* , auteur.naam AS auteurNaam FROM boek LEFT JOIN auteur ON auteur.ID = boek.auteurID
5/5/
Toets IAM-TDI-SQL 1011 blok1 Selecteer de titels van de boeken die een onvoldoende hebben gekregen van een lezer ( cijfer < 6 )
*
*
*
*
*
*
*
*
SELECT DISTINCT boek.titel FROM boek JOIN recensie ON recensie.boekID = boek.ID WHERE recensie.cijfer < 6
Selecteer de gegevens van alle lezers die een boek van Harrie Bos hebben gerecenseerd.. SELECT DISTINCT lezer.* FROM lezer JOIN recensie ON lezer.ID = recensie.lezerID JOIN boek ON recensie.boekID = boek.ID JOIN auteur ON auteur.ID = boek.auteurID WHERE auteur.naam = ‘Harrie Bos’
Selecteer de gegevens van alle auteurs en bereken daarbij het gemiddelde cijfer dat deze auteur krijgt van de lezers. SELECT auteur.* , AVG(cijfer) FROM auteur LEFT JOIN boek ON boek.auteurID = auteur.ID LEFT JOIN recensie ON recensie.boekID = boek.ID GROUP BY auteur.ID
Selecteer de namen van alle lezers en alle genres en telt het aantal recensies die de betreffende lezer voor ieder genre heeft geschreven.
*
6/6/
Toets IAM-TDI-SQL 1011 blok1
SELECT lezer.ID AS lezerID, lezer.naam AS lezernaam, genre.ID AS genreID , genre.naam AS genrenaam, COUNT(recensie.ID) AS aantalrecensies FROM ( lezer, genre ) LEFT JOIN ( recensie JOIN boek ON recensie.boekID = boek.ID ) ON recensie.lezerID = lezer.ID AND boek.genreID = genre.ID GROUP BY lezerID, genreID ORDER BY lezerNaam, lezerID, genreNaam, genreID Of met een subquerie SELECT lezer.ID AS lezerID, lezer.naam AS lezernaam, genre.ID AS genreID , genre.naam AS genrenaam, ( SELECT COUNT( recensie.ID) FROM recensie JOIN boek ON boek ID = recensie.boekID WHERE recensie.lezerID = lezer.ID AND boek.genreID = genre.ID ) AS aantalrecensies FROM lezer, genre ORDER BY lezerNaam, lezerID, genreNaam, genreID Verwijder de auteur ‘Gerard Reve’ uit de database. NB: voer deze querie als allerlaatste uit of maak een backup van de databsase
*
*
DELETE FROM auteur WHERE naam =’Gerard Reve’ Dit geeft een foutmelding ( FK contraint ). Er zijn nu drie mogelijkheden: - De auteur kan niet worden verwijderd, dat moeten we ook niet willen want er staan boeken van deze auteur in de database. - Zet eerst bij alle boeken van Gerard Reve de auteurID op NULL - Verwijder eerst alle boeken van Gerard Reve uit de database.
7/7/
Toets IAM-TDI-SQL 1011 blok1
Architectuur 1. De bouw van het bioscoopreserveringssysteem wordt uit besteed aan twee programmeurs: één databaseprogrammeur en een front-endprogrammeur. Zij moeten samenwerken om het geheel goed te laten functioneren. Na een paar tests blijkt dat het systeem soms reserveringen doet voor voorstellingen die al zijn uitverkocht. a) * Welke programmeur is verantwoordelijk voor deze fout in het programma en waarom? * ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ b) ** hoe kan de fout het beste hersteld worden.? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ __________________________________________________________________________ 2. Het bioscoopreserveringssysteem wordt in het hele land gebruikt en door het intensieve gebruik ontstaan er perfomance problemen. Er wordt heel vaak een selectie gemaakt van films die vandaag draaien en daarbij wordt bekeken of er nog stoelen in de bioscoop zaal vrij zijn. ** Hoe kan dit performance probleem worden opgelost? NB: er zijn meerdere strategieën mogelijk. ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________
8/8/