Een krant als voorbeeld
Een krant is een mooi voorbeeld om uit te leggen hoe een databankgestuurde website nu precies werkt. We gebruiken HLN.be als een voorbeeld.
Elk artikel in deze online krant, bevat een aantal terugkerende elementen. De belangrijkste structuuronderdelen heb ik naast de foto opgesomd.
Bron: https://www.hln.be/de-krant/aannemer-licht-gezinnen-op-voor-honderdduizenden-euro-s~a74fc6fc/
Een spreadsheet als "instap" naar een databank
Je zou in een rekenbladprogramma als LibreOffice Calc of MS Excel een lijst kunnen maken met deze gegevens van een "aantal" artikels die je op HLN.be vindt.
Het zou er zo kunnen uitzien:
Een databank is echter veel meer dan enkel maar een rekenblad. In een databank bewaar je gegevens evenzeer in rijen en kolommen. Een databank kan echter hele reeksen tabellen bevatten die je eveneens met elkaar kan koppelen. Het wordt duidelijk in de volgende stap.
Artikels bewaren in een databank
Een relationele databank heeft niets te maken met een datingsite. Alhoewel ze voor een datingsite vermoedelijk ook wel een relationele databank zullen gebruiken om de profielen van de gebruikers met elkaar in verbinding te brengen. Ik gebruik nog steeds het voorbeeld van de krant om duidelijk te maken wat een databank nu precies is.
Net zoals in het rekenblad bewaren we de gegevens in een "tabel". Data die "meerdere" keren kunnen voorkomen, zoals de naam van de auteur, nemen we echter niet op. Dit doen we op een "andere manier".
Ik geef Engelstalige veldnamen aan de kolommen. Niet omdat dit moet, maar omdat het wat de gewoonte is. Waarom ik niet gewoon "date" en "time" gebruik, leg ik later nog wel uit. Je merkt dat ik geen "veldnaam" geef aan de eerste en de laatste kolom en dat het veld "author" ontbreekt.
De tabel "articles"
... | title | articledate | articletime | cover | content | ... |
... | Sinterklaas komt om het leven | 05/12/2018 | 06/12/2018 10:22:10 | images/sint.jpg | Op 5 december viel Sinterklaas van een dak. Hij kwam hierbij om het leven... | ... |
... | Trump laat haar kleuren | 03/01/2019 | 04/01/2079 11:10:20 | images/kuif.jpg | Trump gaat voortaan door het leven met bruin haar... | ... |
... | ... | ... | ... | ... | ... |
De tabel "authors"
Omdat een auteur meerdere artikels kan schrijven, en we van elke auteur eveneens wat informatie willen bewaren (zoals zijn/haar naam, e-mailadres enz.), maken we voor de auteurs een afzonderlijke tabel aan.
Achteraf gaan we de tabel "articles" linken aan de tabel "authors".
id | name | |
1 | Joske Janssens | joske.janssens@leukekrant.be |
2 | Louisa Peeters | louisa.peeters@leukekrant.be |
3 | Achmed Birandouni | achmed.birandouni@leukekrant.be |
Je merkt dat elke rij in de tabel "authors" een kolom met de naam "id" heeft gekregen. Dit "id" is een uniek nummer. Elke keer je aan de tabel een rij toevoegt, wordt dit id met één verhoogt. Als je een rij verwijdert, behouden de andere rijen hun nummer. Als je rij met id 2 zou verwijderen, zal rij 3 gewoon het id "3" blijven houden.
Relaties leggen tussen beide tabellen
We noemen de eerste kolom van de tabel "articles" eveneens id. Ook deze kolom heeft de hierboven beschreven kenmerken. Je merkt dat de laatste kolom de benaming "authorid" heeft gekregen.
id | title | articledate | articletime | cover | content | authorid |
1 | Sinterklaas komt om het leven | 05/12/2018 | 06/12/2018 10:22:10 | images/sint.jpg | Op 5 december viel Sinterklaas van een dak. Hij kwam hierbij om het leven... | 1 |
2 | Trump laat haar kleuren | 03/01/2019 | 04/01/2079 11:10:20 | images/kuif.jpg | Trump gaat voortaan door het leven met bruin haar... | 3 |
... | ... | ... | ... | ... | ... |
Het artikel met id 1 heeft als authorid 1, artikel met id 2 krijgt als authorid 3. D.w.z. dat "Sinterklaas komt om het leven" geschreven is door Joske Janssens. Het artikel over Trump is dan weer geschreven door de auteur met id "3" oftewel Achmed Birandouni.
Aan de slag met MySQL
De meeste hostingmaatschappijen bieden standaard MySQL aan als databanksoftware. De hierboven beschreven tabellen, kan je aanmaken in een databank op je hostingpakket. Als een hostingmaatschappij MySQL aanbiedt, dan kan je de databank over het albemeen beheren via een online tool met de naam PHPMyAdmin. De interface schrikt op het eerste zicht wat af. Maar toch is het vrij makkelijk om de twee tabellen hier boven in PHPMyAdmin aan te maken.
Opgelet: Niet iedereen kan de databank openen en bekijken. Je moet over een gebruikersnaam en wachtwoord beschikken om tabellen te kunnen aanmaken. Die kan je zelf instellen in je persoonlijke hostingaccount.
In PHPMyAdmin maak je een nieuwe tabel aan door aan de linkerkant op "Nieuw" te klikken.
Je kan het aantal benodigde kolommen invoeren en een naam geven aan de tabel.
Bij "Naam" voer je de naam in van de kolom. Bij "type" bepaal je welk type informatie je in die kolom wil opslaan.
Een ID (de eerste kolom in onze beide tabellen) krijgt als "type" int. Een int of integer is een positief geheel getal (een natuurlijk getal). Je vinkt ook de optie "AI" aan (staat voor "auto increment" om de waarde automatish te laten verhogen. Vervolgens krijg je het onderstaande venster te zien. Klik op "Starten".
Velden zoals "title" en "content" (in de tabel "articles") en "name" en "email" (in de tabel "authors") krijgen als type "text" , "mediumtext" of "longtext" (afhankelijk van de hoeveelheid data die je per veld wil bewaren. Als je de optie "Leeg" aanvinkt, dan geef je aan dat het veld niet "moet" ingevuld worden, dat het ook leeg mag blijven.
Gereserveerde woorden
Voor "articledate" kozen we als naam niet simpelweg voor "date" omdat dit problemen zou kunnen opleveren. Date en time... zijn wat men noemt "gereserveerde woorden", woorden die MySQL intern gebruikt om bepaalde types van data aan te duiden. Net zoals "text" en "integer" ook interne benamingen zijn. Die gebruik je dus best nooit als veldnaam.
Standaardwaarde
Voor articledate kiezen we als type "date", voor "articletime" se
Voor dat veld stellen we een standaardwaarde in. Opgelet: als je een standaardwaarde (in dit geval timestamp) kiest, dan mag je de optie "leeg" niet aanvinken.
Gegevens toevoegen aan de databank
Via de tab "invoegen" kan je informatie aan elke tabel toevoegen. De bedoeling is dat we hiervoor achteraf een invoerformulier aan onze site toevoegen. Op die manier moet de "journalist" niet rechtstreeks in PHPMyAdmin aan de slag. Hij/zij kan via een eenvoudig invoerformulier (na wachtwoordtoegang) informatie toevoegen aan de tabellen.
De tabel "articles" omzetten in HTML
Tijd voor automatisering. In een volgende stap genereren we automatisch een HTML-pagina met de inhoud van de tabel "articles".