Wil je in een databank vlot opzoekingen doen, dan heb je best een goed inzicht in de manier waarop de tabellen van de databank naar elkaar verwijzen. Hiervoor is het databankschema opgesteld. Aan jou om dit grondig te bekijken en de betekenis van de pijlen te achterhalen. Voor de duidelijkheid staat naast elke kolom ook het type ervan.
In de oefeningen kan je het database schema weergeven door op het database icoon te klikken die rechts bij elke oefening staat:
In de eerste tabel (RUIMTEVAARDERS
) is de NATIONALITEIT
-kolom nu van het type INTEGER
. Dit verwijst naar het ID
in de tweede tabel (zie verder). Hieronder een uittreksel van de vernieuwde eerste tabel (RUIMTEVAARDERS
).
ID | VOORNAAM | ACHTERNAAM | Nationaliteit |
---|---|---|---|
1 | Joseph | Acaba | 1 |
2 | Viktor | Glover | 1 |
⋮ | ⋮ | ⋮ | ⋮ |
22 | Yurchikhin | Nikolayevich | 7 |
Er staat bij de eerste twee ruimtevaarders het getal 1
, omdat het twee amerikaanse ruimtevaarders zijn. De laatste
ruimtevaarder heeft de Russische nationaliteit en dus het getal 7
(zie tweede tabel). Het getal in de laatste kolom
verwijst naar de tweede tabel.
Er is een tweede tabel toegevoegd genaamd NATIONALITEITEN
en heeft de kolommen: ID
, ISO
, UN
en NATIONALITEIT
.
Het nieuwe database schema is zichtbaar door op het database icoon te klikken.
ID | ISO | UN | Nationaliteit |
---|---|---|---|
1 | US | USA | United States |
7 | RU | RUS | Russia |
31 | NL | NLD | Netherlands |
32 | BE | BEL | Belgium |
39 | IT | ITA | Italy |
Als we geen twee aparte tabellen zouden gebruiken, zou de informatie over de nationaliteit meerder keren voorkomen in de tabel met ruimtevaarders. Als er ooit iets moet aagepast worden is dat vervelend om dat overal te moeten aanpassen. Daarom is het beter om te werken met meerdere tabellen met een link ertussen.
Onderstaande tabel is dus niet efficiënt omdat de informatie over de nationaliteit meerdere keren voorkomt.
ID | VOORNAAM | ACHTERNAAM | Nationaliteit | ISO | UN | Nationaliteit |
---|---|---|---|---|---|---|
1 | Joseph | Acaba | 1 | US | USA | United States |
2 | Viktor | Glover | 1 | US | USA | United States |
⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |
22 | Yurchikhin | Nikolayevich | 7 | RU | RUS | Russia |
We kiezen er dus voor om te werken met twee aparte tabellen: RUIMTEVAARDERS
en NATIONALITEITEN
.
NATIONALITEITEN
ID | ISO | UN | NATIONALITEIT |
---|---|---|---|
1 | US | USA | United States |
7 | RU | RUS | Russia |
31 | NL | NLD | Netherlands |
32 | BE | BEL | Belgium |
39 | IT | ITA | Italy |
RUIMTEVAARDERS
ID | VOORNAAM | ACHTERNAAM | NATIONALITEIT |
---|---|---|---|
1 | Joseph | Acaba | 1 |
2 | Viktor | Glover | 1 |
3 | Richard | Arnold | 1 |
4 | Michael | Hopkins | 1 |
5 | Vladimir | Aksyonov | 7 |
Tip om query’s op te stellen
Bepaal eerst welke kolommen uit welke tabellen je moet raadplegen (om uit te schrijven, of om een functie op los te laten, of om een voorwaarde te controleren). Stel dat je uit meerdere tabellen info nodig hebt. Dan kleur je (in gedachten) de pijlen die het verband tussen deze tabellen leggen (eventueel via bijkomende, tussenliggende tabellen). Voor elke pijl komt er een
WHERE
-gedeelte van de vormWHERE TABEL_A.KOLOM_A = TABEL_B.KOLOM_B
.