Waarom hebben we een database nodig?
In een bestandssysteem bewaart elke afdeling haar eigen bestanden. Dat geeft problemen:
- Gegevensredundantie: dezelfde gegevens staan vaak opgeslagen, wat ruimte verspilt.
- Inconsistentie: één kopie wordt aangepast, de andere niet, dus ze spreken elkaar tegen.
- Moeilijk zoeken en delen: voor elke vraag is een nieuw programma nodig.
- Slechte beveiliging: lastig te regelen wie wat mag zien.
- Gegevensisolatie en afhankelijkheid: bestanden hebben verschillende formaten; verander je de indeling, dan werken de programma's niet meer.
Een database is een geordende verzameling van bij elkaar horende gegevens op één plek, zodat ze gedeeld, consistent gehouden en beschermd kunnen worden.
Databasemanagementsysteem (DBMS)
Een DBMS is software waarmee je een database maakt, opslaat, bijwerkt, doorzoekt en beheert, en waarmee je bepaalt wie ermee mag werken. Voorbeelden: MySQL, Oracle, PostgreSQL, SQLite, Microsoft Access.
Voordelen: minder redundantie, consistente gegevens, delen door veel gebruikers, beveiliging met wachtwoorden en rechten, back-up en herstel, en makkelijk zoeken met een zoektaal (SQL).
Dagelijks gebruik: bankieren, treinreserveringen, schooladministratie, online winkelen, ziekenhuizen.
Relationeel model: relatie, attribuut, tupel, domein
In het relationele gegevensmodel staan gegevens in tabellen.
- Relatie: een tabel met een naam, bijvoorbeeld STUDENT.
- Attribuut: een kolom, bijvoorbeeld Name.
- Tupel: een rij, dus één volledig record.
- Domein: de verzameling toegestane waarden van een attribuut, bijvoorbeeld Class ∈ {9, 10, 11, 12}.
- Graad: het aantal attributen (kolommen).
- Kardinaliteit: het aantal tupels (rijen).
Regels: elke kolom heeft een unieke naam; de volgorde van rijen of kolommen maakt niet uit; geen twee rijen zijn precies gelijk; elke cel bevat één enkele waarde (of NULL, dat betekent onbekend).
Sleutels: kandidaat, primair en alternatief
- Kandidaatsleutel: een attribuut (of een groep attributen) waarvan de waarde voor elke rij uniek is en nooit NULL. Een tabel kan er meer dan één hebben.
- Primaire sleutel: de ene kandidaatsleutel die gekozen is om rijen te herkennen. Hij kan niet NULL zijn en niet herhaald worden.
- Alternatieve sleutel: elke kandidaatsleutel die niet als primaire sleutel is gekozen.
Voorbeeld: STUDENT(AdmNo, Name, Class, Email). Name komt dubbel voor, Class ook, dus dat zijn geen sleutels. AdmNo en (als die altijd is ingevuld en verschillend is) Email zijn kandidaatsleutels. Kies AdmNo als primaire sleutel; Email wordt de alternatieve sleutel.
Ook handig: een samengestelde sleutel gebruikt twee of meer kolommen samen (zoals Class + RollNo); een refererende sleutel (foreign key) is een kolom in de ene tabel die verwijst naar de primaire sleutel van een andere tabel en zo de twee koppelt.
Probeer het: zoek de sleutel op je schoolpas
Kijk naar je schoolpas of een buskaart. Schrijf elk veld op (naam, klas, nummer in de klas, leerlingnummer, telefoon). Stel bij elk veld twee vragen: kunnen twee leerlingen dezelfde waarde hebben? Kan het leeg zijn? Noteer welke velden kandidaatsleutels zijn en welke je als primaire sleutel zou kiezen. Test hetzelfde idee daarna in stap 6 van de 3D.
Belangrijke formules en begrippen
- Relatie = tabel; attribuut = kolom; tupel = rij
- Graad = aantal kolommen; kardinaliteit = aantal rijen
- Kandidaatsleutel: uniek + niet NULL
- Primaire sleutel = gekozen kandidaatsleutel; alternatieve sleutels = de rest
Uitgewerkte voorbeelden
1. Een tabel heeft 5 kolommen en 30 rijen. Geef de graad en de kardinaliteit.
Graad = 5, kardinaliteit = 30.
2. Je voegt 2 rijen en 1 kolom toe aan een tabel van 4 × 10 (graad 4, kardinaliteit 10). Wat zijn de nieuwe waarden?
Graad = 5, kardinaliteit = 12.
3. EMPLOYEE(EmpID, Name, Aadhaar, Dept). Geef de kandidaat-, primaire en alternatieve sleutels.
EmpID en Aadhaar zijn uniek → kandidaatsleutels. Kies EmpID als primaire sleutel; Aadhaar is de alternatieve sleutel. Name en Dept kunnen zich herhalen.
4. Waarom kan Name geen primaire sleutel zijn in STUDENT?
Twee leerlingen kunnen dezelfde naam hebben, dus een naam herkent een rij niet uniek.
5. Geef het domein van een attribuut Gender dat als één letter is opgeslagen.
{"M", "F", "O"} (of welke codes de school ook toestaat).
Veelgemaakte fouten
- Een kolom een tupel noemen. Tupel = rij; attribuut = kolom.
- Zeggen dat de graad het aantal rijen is. De graad telt kolommen.
- Denken dat een tabel maar één kandidaatsleutel kan hebben. Er kunnen er veel zijn, maar slechts één primaire sleutel.
- NULL toestaan in een kolom van een primaire sleutel.