Een tweede problematische tabel
Inleiding
Veronderstel dat je, in opdracht van Game Mania, een databank met videogames moet opstellen. Ze hebben momenteel volgende producten in hun inventaris en willen deze in hun nieuwe databank opslaan:
Titel | Ontwikkelaar | Platform |
---|---|---|
Anthem | Bioware | PS4 |
Anthem | Bioware | XBox One |
Anthem | Bioware | Windows |
Sekiro: Shadows Die Twice | From Software | PS4 |
Sekiro: Shadows Die Twice | From Software | XBox One |
Sekiro: Shadows Die Twice | From Software | Windows |
Devil May Cry 5 | Capcom | PS4 |
Devil May Cry 5 | Capcom | XBox One |
Mega Man 11 | Capcom | PS4 |
Mega Man 11 | Capcom | XBox One |
Mega Man 11 | Capcom | Nintendo Switch |
Mega Man 11 | Capcom | Windows |
Mass Effect: Andromeda | Bioware | PS4 |
Mass Effect: Andromeda | Bioware | XBox One |
Mass Effect: Andromeda | Bioware | Windows |
Dark Souls 3 | From Software | PS4 |
Dark Souls 3 | From Software | XBox One |
Dark Souls 3 | From Software | Windows |
Hier is elke rij wel verschillend, maar toch is hier een probleem.
Denk eraan dat we in onze definities zo precies mogelijk uitdrukken of iets CHAR
, VARCHAR
, NVARCHAR
,... is, hoe veel karakters er in passen,...
Dat is omdat een databank zuinig moet zijn voor goede performantie.
Bovenstaande tabel is dat niet: er zijn heel veel stukken lange tekst die regelmatig terugkomen en die nemen elke keer heel wat bytes in.
Zuinig zijn is bovendien niet alleen belangrijk voor performantie, maar helpt ook fouten te voorkomen. Hoe vaker we een waarde volledig moeten uitschrijven, hoe groter de kans dat we eens een fout maken.
Het zou al zuiniger zijn elke game, elke ontwikkelaar en elk platform aan te duiden met een uniek identificatienummer. Dat bespaart heel veel ruimte tegenover wanneer we telkens de volledige tekst uit te schrijven. We kunnen bijvoorbeeld het volgende afspreken voor de titels:
- Anthem: 1
- Sekiro: Shadows Die Twice: 2
- Devil May Cry 5: 3
- Mega Man 11: 4
- Mass Effect: Andromeda: 5
- Dark Souls 3: 6
Voor de ontwikkelaars spreken we af:
- Bioware: 1
- From Software: 2
- Capcom: 3
Voor de platformen:
- PS4: 1
- XBox One: 2
- Windows: 3
- Nintendo Switch: 4
Dan krijgen we voor de hele tabel:
Titel | Ontwikkelaar | Platform |
---|---|---|
1 | 1 | 1 |
1 | 1 | 2 |
1 | 1 | 3 |
2 | 2 | 1 |
2 | 2 | 2 |
2 | 2 | 3 |
3 | 3 | 1 |
3 | 3 | 2 |
4 | 3 | 1 |
4 | 3 | 2 |
4 | 3 | 4 |
4 | 3 | 3 |
5 | 1 | 1 |
5 | 1 | 2 |
5 | 1 | 3 |
6 | 2 | 1 |
6 | 2 | 2 |
6 | 2 | 3 |
Merk op dat we onze mappings van games / ontwikkelaars / platformen op getallen ook in drie tabelvoorstellingen met telkens 2 kolommen (de game/ontwikkelaar/het platform en het volgnummer) kunnen gieten. Dat is dan ook wat we zullen doen en we zullen de volgnummers aanduiden als primary keys die automatisch ophogen. Eens we dat gedaan hebben, kunnen we bijna op een heel efficiënte wijze data gaan combineren, maar we hebben ook vreemde sleutels of foreign keys nodig. Die komen in het volgende deel aan bod.