Tabellen met relaties: een voorbeeld
Tabellen met relaties
Sorry als je dit altijd hebt gedacht, maar een spreadsheetprogramma zoals MS Excel is geen databanktoepassing, ook al gebruiken heel wat mensen zo'n software nu net met dat doel. In een databank bewaar je gestructureerde informatie door ze te bewaren in een of meerdere tabellen.
Ga je regelmatig winkelen in een zaak waar men ook klantenkaarten uitdeelt? Heel vaak zal men je bij een aankoop eerst vragen naar je postcode. Hieronder kom je te weten waarom dit zo is.
Laat ons starten met het voorbeeld van een adressenlijst. Een eenvoudige adressenlijst zouden de meeste mensen meteen in één tabel bewaren. Die zou er dan als volgt kunnen uitzien:
| Naam | Voornaam | Postcode | Gemeente | Straat |
|---|---|---|---|---|
| Janssens | Jos | 3001 | Heverlee | Leo Dartelaan 12 |
| Willems | An | 3300 | Tienen | Hoegaardsestraat 4 |
| Musk | Elon | 3000 | Leuven | Bondgenotenlaan 10 |
| ... | ... | ... | ... | ... |
Vaak volstaat zo'n simpele databank niet. Ook in het geval van het bovenstaande voorbeeld kan het beter. Immers: als je adressenlijst aangroeit, moet je wellicht vaak dezelfde gemeente en postcode en dezelfde straatnaam invoeren. We zouden het bovenstaande voorbeeld op die manier in 3 tabellen kunnen onderbrengen.
Een tabel voor de gemeentes
We geven de tabel de naam tblCities
Je merkt dat één kolom de naam “ID†krijgt. Een “id†is een uniek nummer. Je kan ervoor zorgen dat de databank dit getal automatisch verhoogt als je een rij toevoegt. Als je een rij verwijdert, wijzigen niet alle andere nummers. Dat klinkt misschien raar, maar is vrij normaal. Je moet het zien als een “volgnummerâ€. Bij het wielrennen, moeten ook niet alle renners hun volgnummer wijzigen als er iemand onderweg afhaakt.
Als kolomnaam gebruiken we Engelstalige benamingen en enkel "letters", geen spaties.
| ID | city | postalcode |
|---|---|---|
| 1 | Heverlee | 3001 |
| 2 | Leuven | 3000 |
| 3 | Tienen | 3300 |
| ... | ... | ... |
Een tabel met de straatnamen
We geven de tabel de naam tblStreets
Daarnaast maken we een afzonderlijke tabel voor de straatnamen. Elke gemeente telt meerdere straten, maar één straat ligt (over het algemeen) in één gemeente (dat klopt natuurlijk niet altijd). De tabel bevat in dit geval 3 kolommen: een ID, het ID van de gemeente in de andere tabel, de straatnaam.
De tabel van de gemeentes en de tabel van de straten hebben een innige relatie. Je kan nu snel data “filteren†en zoeken. Bijvoorbeeld: geef me alle straten van “Tienenâ€. In databanktermen komt dit op het volgende neer: selecteer alle velden in de tabel “straten†waar IDcity = 1.
Iets geavanceerder kan je nu zeggen: geef me alle straten van de gemeente met postcode 3300. Dat is de postcode van Tienen.
| ID | street | IDcity |
|---|---|---|
| 1 | Bondgenotenlaan | 2 |
| 2 | Leo Dartelaan | 1 |
| 3 | Hoegaardsestraat | 3 |
| ... | ... | ... |
Een tabel voor de contacten
We geven de tabel de naam tblClients
De tabel voor de contacten kan nu wat vereenvoudigd worden. Door de 3 tabellen met elkaar te verbinden, kan je te weten komen in welke gemeente en in welke straat iemand woont. Immers: Jos Janssens woont in IDstreet 1. Dat ID vind je terug in de tabel met de straatnamen. Die tabel bevat het ID van de gemeente in de tabel “citiesâ€.
| name | firstName | houseNumber | IDstreet |
|---|---|---|---|
| Janssens | Jos | 12 | 1 |
| Willems | An | 4 | 3 |
| Musk | Elon | 10 | 2 |
| ... | ... | ... | ... |
Dit lijkt nogal omslachtig, maar zorgt er uiteindelijk voor dat je gegevens veel gestructureerder en compacter kan bewaren. Bovendien zijn op die manier alle gegevens conform en voorkom je verschillende notaties en fouten.
Voordelen:
- Je kan op die manier een-op-veelrelaties creëren.
- Je voorkomt fouten in de schrijfwijze. Als je bijvoorbeeld bij elke nieuwe klant de naam van de gemeente manueel laat invoeren, kunnen er spellingfouten in opduiken.
- Bij de invoer van een nieuwe klant, kan je de postcode selecteren uit een lijst. Vervolgens kan je straten filteren die bij die postcode horen.
- Je databank blijft "compacter" (Opgelet: als je een lijst van alle straten en gemeentes in je databank opneemt, zal dit ook wel wat plaats innemen.