Databases

Wat is een database

Een database (of databank in het Nederlands) is een plek waar je gegevens bewaart.Voorbeelden van databases zijn dus:

Toepassingen van databases

Waarom databases?

Ontstaan van de database

Het grote probleem met bewaren is het zo te bewaren dat je later het bewaarde weer terug kunt vinden. Daar is in de loop van de geschiedenis de huidige database zoals wij de kennen uit ontstaan.

In de loop der jaren verschillende systemen bedacht om informatie zo slim mogelijk te bewaren. Doel is telkens om te zorgen dat gebruikers snel benodigde informatie kunnen terugvinden in een grote berg van andere informatie.

In een hierarchische database (v.a. jaren 60) worden gegevens opgeslagen in een groot document, dat hierarchisch is opgebouwd.

bijvoorbeeld:

  1. School
    1. Klas1
      1. Leerling Jan Klaasen
      2. Leerling Piet van Dam
      3. Leerling Klaas de Boer
      4. etc
    2. Klas2
      1. Leerling Clark Kent
      2. Leerling Lois Lane
      3. Leerling Peter Pan
      4. etc.
    3. etc.

Waar zou je een docent het beste in de boom kunnen plaatsen?

In een netwerk database ( v.a. jaren 70) is het bovenstaande concept als het ware uitgebreid met hyperlinks. Hierdoor kan dezelfde informatie op meerdere plaatsen tegelijk in de boom voorkomen en zijn complexe gegevensstructuren mogelijk. De structuur van de database werd keurig vastgelegd in een "schema". Alleen was het erg veel programmeerwerk om gegevens uit de database te halen.

Tegenwoordig worden beide bovenstaande type database systemen nog maar weinig gebruikt.

Voor speciale doeleinden zijn er:

Maar verreweg het populairst zijn zogenaamde relationele database (r-mds). Dit de database die ik jullie ga uitleggen.

Hoe zit een relationele database in elkaar?

In een relationele database worden lijsten bijgehouden van bij elkaar horende gegevens: de tabellen. Een database is een verzameling van één of meerder tabellen. Een school database zou kunnen bestaan uit een tabel met gegevens over studenten, een tabel met gegevens over leraren, een tabel met klassen, een tabel met lessen, een tabel met cijfers, en dergelijke.

Tabel

In een database kun je de gegevens origaniseren in thema's. Zo'n thema heet een tabel. Een tabel kun je vergelijken met een Excel bestand (in feite is het ook een tabel). Omdat een Excel bestand een gestructureerd bestand is kun je het vaak uitwisselen met andere programma's of database applicaties (doormiddel van formaten als TSV, CSV of XML).

In een tabel staan bij elkaar horende gegevens op één regel. Een rij in een database tabel wordt een record genoemd. De gegevens van één student vormen dus één record. Een record bestaat uit verschillende velden. Als je een tabel ontwerpt moet je voor ieder veld aangeven wat de veldnaam is en wat voor soort gegevens er in komen: text, integers, datums, e.d.

Tabel: rij

Een rij wordt ookwel een 'tuple' of 'record' genoemd.

Tabel: kolom

Een kolom wordt ookwel een 'attribuut' of 'veld' genoemd.

Je dient voor een kolom ook een type te specificeren: text, numbers, date, time, BLOB (Binairy Large Objects, bijvoorbeeld afbeeldingen).

Modeleren

Wat is modeleren

Met modeleren optimaliseer je je gegevensstructuur.

Een voorbeeld

Stel je wilt een bestand maken met daarin de telefoonnummers van je vrienden. In de tabel hieronder (Tabel 01) zie je een kolom voor de voor- en achternaam. En tevens diversie kolommen voor de telefoonnummers. Er zijn altijd wel vrienden met meerdere telefoonnummers. Kijk maar naar Ivan Hoe, die heeft wel drie telefoonnummers. Er ontstaat echter een probleem als Ivan Hoe nog een vierde (of zelfs vijfde) telefoonnummer krijgt. Dan dien je een nieuwe kolom aan te maken.

Tabel 01: friends

Je zou de tabel ook als volgt in kunnen richten. Indien Ivan Hoe een extra telefoonnummer krijgt, dan hoef je in ieder geval geen nieuwe kolom aan te maken.

Tabel 02: friends

Het probleem echter met deze tabel is, dat wanneer je per ongeluk de naam van Ivan Hoe verkeerd getypt hebt, en je wilt deze veranderen. Je dus 3 keer de naam moet veranderen. Stel je verandert de naam in Ivanhoe Knight. Als je één van de records vergeet te veranderen, dan heb je een probleem als je op de achternaam 'Knight' zoekt.

Tabel 03: friends

Het is daarom beter om de tabel 'friends' verder uit te splitsen in 'friends' en 'phonenumbers'. Indien je dus de naam van één je vrienden wilt veranderen, hoef je dat maar één keer te doen. Wat wel noodzakelijk is dat je de juiste naam aan het juiste telefoonummer koppelt. Je gebruikt hiervoor een sleutelveld (in dit geval 'id'). In beide tabellen, dien je dit sleutelveld te gebruiken, zodat je een link kunt maken. Let er wel op wat voor soort id je gebruikt in dit geval zijn volgnummers gebruikt. Indien je bijvoorbeeld de initialen gebruikt van je vrienden, 'ck' voor Clark Kent en je verandert de naam Clark Kent in Clarky Supermannetje, dan krijg je een probleem als je het id ook verandert in 'cs'. Je dient dan immers ook het id in je tabel phonenumbers te veranderen.

Tabel 04: friends

Tabel 05: phonenumbers

Primairy Key

Om gegevens later beter terug te kunnen vinden krijgt ieder record een veld met een unieke sleutel: de primary key. Deze primary key is uniek voor het hele record en met de primary key op zak kun je dus alle bijbehorende gegevens vinden. Er mogen nooit twee records voorkomen met dezelfde primary key. De velden voornaam, achternaam en geboortedatum zijn niet geschikt als primary key, omdat er meerdere studenten kunnen zijn met dezelfde voornaam, met dezelfde achternaam of met dezelfde geboortedatum. Primary keys zijn bij voorkeur betekenisloze nummertjes (ID's), die (op verzoek) door het database systeem kunnen worden aangemaakt zodra je een record toevoegt. Voorbeelden zijn je studentennummer, je sofi-nummer of een productcode.

Waarom is het beter als een primary key geen betekenis heeft?

In een relationele database worden de gegevens in verschillende tabellen ook aan elkaar gekoppeld door gebruik te maken van deze primary key. In een van de tabellen maak je een veld dat verwijst naar de primary key uit de andere tabel. In het bovenstaande voorbeeld is het veld 'class' waarschijnlijk een verwijzing naar de primary key van de 'classes' tabel. Als je wil weten wie de mentor is van een bepaalde student, dan kijk je eerst in het veld 'class' en zoek je vervolgens in de tabel 'classes' naar het record met als primary key "CMD1K". Het verwijzende veld wordt een foreign key genoemd.

SQL

Alle relationele database systemen hebben met elkaar gemeen dat ze SQL (Structured Query Language) begrijpen. SQL is een standaard taaltje, waarmee je

Op het gebruik van SQL komen in een andere les op terug.

Verschillende systemen

Er zijn verschillende relationele database systemen (server programma's) op de markt:

MS Access Onderdeel van MS Office. Alleen voor beperkt gebruik.
MySql Open source database systeem voor algemeen gebruik.
MS SqlServer Professioneel en duur database systeem.
Oracle Zeer duur database systeem voor zeer grote databases.

Bij de keuze voor een bepaalde database systeem wordt gelet op:

PHPmyAdmin

Er staat al een hele beschrijving van phpmyadmin online maar hier een overzicht van hoe je dit programma in het algemeen moet gebruiken.

mysql.cmd.hro.nl

Er zijn een heleboel verschillende programma's die je visueel ondersteunen bij het maken van een database. Hierbij kan je denken aan acces van microsoft, maar ook aan phpmyadmin. Dit is een gratis programma waarmee je je database ontwikkelen via internet of via apache op je eigen computer.

In phpmyadmin kan je met behulp van SQL een database maken, maar ook door gewoon te klikken. We gaan beiden uitproberen. Iedereen die online werkt heeft al een database, deze heeft de naam van je student nummer. Je kan niet nog een database maken, het enige wat je kan doen is tabellen aanmaken.

Wanneer je een tabel hebt opgegeven, moet je alle velden een naam geven een de parameters instellen. Hieronder een rijtje met de betekenis van de verschillende parameters:

type parameter
tekst varchar, text
foto, mp3 blob
getal int
lijst enum

Al deze parameters bestaan in verschillende varianten, groter en kleiner (tiny, medium, large). Dit heeft te maken met hoeveel ruimte je denkt nodig te hebben, de databases reserveert een bepaalde hoeveelheid ruimte op je harde schijf voor de eventuele data.

varChar
De enige uitzondering is varchar. Deze is voor een variabele tekst. Bijvoorbeeld een naam of een straat. Je moet aangeven hoeveel tekens dit woord maximaal lang is. Dit is dus niet voor tekst maar meer voor variabelen.

Length
Van elke parameter moet je aangeven wat de length is. Dit is bij bijna allemaal al voor gedefieneerd, en dit hoef je dan ook niet in te vullen. Alleen bij varchar en enum moet dit wel altijd.

Attributen
Atributen zijn alleen belangrijk bij het gebruik van een blob. Hier zal je meestal kiezen voor binairy. Anders laat je dit veld altijd leeg.

Null
Moet het database veld als het bestaat altijd gevuld zijn? Is het schadelijk voor de database als het veld leegblijft. Wanneer dit niet het geval is kan je voor null kiezen, kies anders voor not null. Standaard waarde heeft hier direct mee te maken, als je kiest voor not null kan je een standaard waarde aangeven, die wordt ingevuld wanneer er niets wordt opgeven.

Extra
Extra gebruik je vooral bij je id. Deze is vaak ook je primairy key en moet automatisch doornummeren. Hier kies je dan voor 'auto_increment'. Deze optie zorgt dat dit veld bij elke nieuwe record automatisch doornummert.

Primary key
In het laatste rijtje kan je aangeven of dit veld een primairy key ontvangt. Dit is de eerste radiobutton van de drie. De andere staan voor het indexeren van het veld of dat de waarde in het veld verplicht uniek moet zijn. Deze komen later ter sprake.

SQL in phpmyAdmin

Op elk scherm in phpmyadmin kan je SQL queries loslaten op je database. Zo kan je goed testen welke resultaten je terug krijgt en of je queries goed zijn. Hier onder een plaatje waar dat kan:


Wanneer je een query hebt opgegeven kan je op de button start klikken om de query te activeren. Het resultaat is een tabel met alle gegevens uit de tabel Docenten waar het id 1 is. Dus refererent naar de tabel boven is het resultaat het volgende:

1 Marije Smits CMD

Wanneer je bovenstaande query vanuit php verstuurd, krijg je binnen php dezelfde gegevens terug. Vervolgens kan je met html deze gegevens op maken. Meer hierover in de volgende les.