aboutsummaryrefslogtreecommitdiff

databases huiswerk

ik geef hier de opdrachten vrij omdat het er naar mijn mening te veel zijn. gelieve dit als naslagwerk te gebruiken.

hier is nog wat documentatie omdat deze repo iets vlug is gegroeid de afgelopen 2 weken.

gebruikte tools en bestandsstructuur

(de open vragen van de huiswerkopdrachten had ik gemaakt voor dat ik dit zooitje had ingesteld, dus deze bevatten gekopiëerde fragmenten uit de mysql interactieve cli)

q*.sql zijn query's, t*.sql zijn tests (hiervan wordt de output opgeslagen in t*.md). b*.sql wordt zelden gebruikt maar betekent dat de query nog aangevuld wordt om naar een q*.sql te gaan (b staat voor base).

in de sfeer van geoptimaliseerde luiheid is bijna alle documentformatting geautomatiseerd. de practica's en eindopdracht gebruiken m4 om de sql query's en hun resultaten in markdown bestanden te zetten. een makefile zorgt er voor dat alle sql query's uitgevoerd worden in volgorde, dit zijn de bestanden die er uit zien als q*.sql.

hier is een lijstje macro's die gedefinieerd worden uit common.m4 (n staat voor een willekeurig getal):

aanroep beschrijving
q_norm(n) maakt een opdracht hoofdstuk met code block die de inhoud van q*.sql bevat.
q_with_output(n) doet het zelfde als q_norm, maar met de inhoud van t*.sql, met daaronder de output van de query als HTML tabel.
q_with_test(n) doet het zelfde als q_norm met daaronder q_with_output, maar zonder gedupliceerde opdracht header
include_sql(file) maakt een code block met de inhoud van file

een map kan ook een bestand genaamd reset.sql bevatten, deze wordt vóór alle q*.sql query's uitgevoerd, dus hier staan meestal drop table statements in om de database te *resetten*. de makefile gebruikt de standaard mysql command-line client, en eventuele opties zoals een alternatieve gebruikersnaam en/of wachtwoord kunnen in common.mk aangepast worden. de standaardconfiguratie gaat uit van een database die met dezelfde gebruikersnaam als de gebruiker waarmee je make draait toeganklijk is, en zonder wachtwoord.

de eindopdracht

de eindopdracht heb ik in een middag geschreven, in python, met scripts in nodejs omdat ik deze af aan het raffelen was. deze code is niet gemaakt om onderhoudbaar te zijn, maar als het werkt voor de assessment is het goed genoeg. u zijt gewaarschuwd.

voor de rest is dit een standaard python project met een virtual environment, dus setup ziet er zo uit:

# (in eindopdracht submap)
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt

de afbeeldingen van de merken zitten niet in deze repository omdat ik geen auteursrechtelijke rechten voor ze heb. in de eindopdracht submap zit een losse makefile die een imgs.sql query maakt, deze voegt links naar de (verwachte) bestanden in de eindopdracht/img/ map. deze query moet handmatig uitgevoerd worden. een lijst met bestandsnamen van deze afbeeldingen staat wel in de makefile.

over de makefiles

common.mk bevat instructies om een m4 template document te renderen en sql query's uit te voeren. als je markdown output voldoende vindt is dit genoeg. deze makefile verwacht dat de TARGET variabele ingesteld is op de basename van je m4 template.

pdf.mk bevat instructies om de markdown output te renderen als pdf met behulp van latexmk. ook wordt inkscape op de achtergrond gebruikt om svg diagrammen om te zetten naar pdf's, zodat latex deze kan lezen. om deze makefile te gebruiken moet je uiteraard ook een werkende latex distributie geïnstalleerd hebben. ook wordt pandoc gebruikt om de markdown om te zetten naar een .tex bestand. deze makefile verwacht dat de MD2LATEX variabele is ingesteld op het pad naar het md2latex script in de rootmap van deze repo.

een stukje feedback voor de opleiding

en een waslijst huiswerkopdrachten, en 2 practica's, en een eindopdracht, en een tentamen is te veel werk voor 2 studiepunten. hier is een lijstje suggesties:

  • schrap het tentamen net als hoe de practica's werkte bij microcontrollers 2
  • minder huiswerkopdrachten geven
  • de practica's aanpassen zodat het niet vermomde huiswerkopdrachten zijn
  • de eindopdracht laten vervallen