1. Learning SQL part 4 - More relations
In deel 4 gaan we de database afbouwen. Als eerste willen we nu ruimtereizen gaan invoeren. Een ruimtereis heeft een vertrekpunt, een bestemming, een bepaalde duur en een bemanning (later zullen we ook ruimtereizigers en ruimteschepen toevoegen). We breiden hiertoe ons strokendiagram uit op de volgende manier:
Dit lijkt echter niet zo'n goed idee te zijn. Hoe ga je nu meer astronauten toevoegen aan dezelfde reis? Een mogelijke oplossing hiervoor illustreert de volgende afbeelding. Je kunt hier zien dat we hebben gekozen voor astronaut1, astronaut2 etc. In een volgende stap in het ontwerp zouden we dan de relatie kunnen leggen met de tabel astronauts.
Ook deze oplossing is geen goed idee.
2. De een op veel en de veel op veel relatie
In deel 3 heb je een relatie gelegd tussen een astronaut en een nationaliteit. Daarbij kunnen we constateren dat er meerdere astronauten met dezelfde nationaliteit zijn. Anders gezegd zou je ook kunnen constateren dat één nationaliteit meerdere astronauten heeft. Dit noemen we een één op veel relatie.
3. Een relatie tussen reizen en astronauten
Omdat we nu weten hoe we een veel op veel relatie kunnen maken, kunnen we nu een relatie leggen tussen astronauten en ruimtereizen. We komen nu tot het volgend ontwerp:
Je kunt dus nu aan meerdere ruimtereizen (spacetrips) meerdere astronauten toevoegen. Merk op dat we de PRIMARY KEY in de koppeltabel staat ingesteld over 2 kolommen in de koppeltabel astronaut_spacetrips. Dit is mogelijk omdat een combinatie tussen een ruimtereis en een astronaut uniek dient te zijn. Op deze wijze onstaat dus een unieke sleutel.
4. De tabel ruimtereizigers toevoegen
Wij gaan nu de tabel ruimtereizigers toevoegen. De vraag is nu: hoe gaan we deze tabel koppelen? Dit ga je eerst zelf proberen.
5. Enkele ontwerpen
We gaan nu verder nadenken over het ontwerp. Misschien heb je zelf al een goede oplossing in opdracht 5 ontworpen. Dat dit niet eenvoudig is ben je misschien al achter.
We zullen beginnen met het integreren van de tabel ruimtereizigers (spacetravelers). Hiervan is het de bedoeling dat de voor- en achternaam en de nationaliteit wordt opgeslagen. Verder zijn er geen eisen gesteld. Het ontwerp zou er als volgt uit kunnen zien:
We hebben dus de tabel spacetraveler aan de tabel spacetrips gehangen.
6. Het ontwerp bijna gereed
Er zijn meerdere oplossingen maar we zullen nu een ontwerp geven wat werkbaar is. Uiteindelijk besluiten we om de tabel spacetravelers te koppelen aan de tabel spacetrips. In opdracht 6 ben je er misschien achter gekomen dat de koppeltabel nog miste. We komen daarom tot het volgende ontwerp.
7. Het uiteindelijk ontwerp
De redundante informatie die je had moeten ontdekken in opdracht 8 betreft de kolommen departure en destination. We voegen dit nog als een aparte kolom toe. Verder zie je dat de tabel spacetravelers de kolom nationality bevat. Deze kan weer verwijzen naar de de tabel nationality zodat we uiteindelijk tot het volgend ontwerp komen.
Merk op dat we nu de pijlen van de PRIMARY KEY zowel onder als boven de tabel hebben gemaakt. Voor een ontwerp is dat wat handiger. Verder zijn nu ook de relaties van de pijlen aangegeven met een zogenaamd entity-relationship lijn (uit de map entity-relationship in Gliffy). Hiermee kun je aangeven of het een een-op-veel relatie of een veel-op-veel relatie is. Deze optie is facultatief.
Verder nog een opmerking over Gliffy. Als je free trial voorbij is kun je gewoon doorwerken in Gliffy met een standaard, gratis, account. Hierbij is echter de optie tabellen afgesloten. Via een omweg kunnen we hier echter toch gewoon bij namelijk door in je bestaand ontwerp een tabel te kopieren met CTRL-c.