welke tabellen heb ik nodig?

Door Jeroen VD, 15 jaar geleden, 16.522x bekeken

Als je een database nodig hebt, is het vaak de vraag: welke tabellen heb ik nodig? Volgens de regels van de normalisatie kun je dit bedenken, maar ik heb altijd een makkelijkere manier geleerd, en deze zal ik ook eens hier uitleggen. Of je deze manier gebruikt, mag je zelf weten. de basis van het relationele model.

Je hoeft helemaal geen verstand te hebben van databases, php of welke taal dan ook, ik zal hier niet eens code behandelen! Maar een beetje logisch denken is dan wel weer nodig.

Let wel op: dit is pas een opstapje tot een goed databasemodel. Je zult na deze methode alsnog goed moeten nadenken of het wel helemaal logisch is. Ik heb dan ook nog een pagina toegevoegd met een aantal aanvullingen

Gesponsorde koppelingen

Inhoudsopgave

  1. Zinsontleden
  2. cardinaliteit
  3. 1 op veel en veel op 1
  4. veel op veel
  5. Opmerkingen
  6. Slotwoord

 

Er zijn 11 reacties op 'Welke tabellen heb ik nodig'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
heeft niemand er wat van te zeggen?
Frank WD
Frank WD
15 jaar geleden
 
0 +1 -0 -1
Vind het een nette tut. Moest bij somige dingen wel even 1 of 2x extra lezen om het te kunnen begrijpen.

Maar dit is wel een handige opstap tot normaliseren van je database. Moet wel zeggen dat ik op mysql nog niet veel kijk heb, maar zo voorbeeld kan veel duidelijk maken voor beginners.
Elwin - Fratsloos
Elwin - Fratsloos
15 jaar geleden
 
1 +1 -0 -1
Het is een leuke en vooral makkelijke benadering voor het inrichten van de database, die je in gedachten erg snel kan uitvoeren.

Over de inhoud twee opmerkingen:
- Je hebt in de tabel Klas de kolom Aantal-leerlingen; dat is een gegeven die je niet op hoeft te slaan, omdat het een procesgegeven is. Het aantal leerlingen uit een klas is natuurlijk op te halen door een COUNT() op de tabel Student.

- Bij de uitleg van de veel-op-veel relatie koppel je een student aan een docent. Dat is volgens mij geen goede relatie, dat zou betekenen dat een docent aan alle leerlingen van dezelfde klas gelinkt wordt. Dat terwijl die relatie er eigenlijk al is tussen Klas en Student. Volgens mij moet de tabel Docent dus een relatie hebben met Klas.
Jeroen VD
Jeroen VD
15 jaar geleden
 
volgens mij haal je wat dingetjes door elkaar. bovenstaande voorbeelden zijn op zichzelf staande zaken, de tabel Klas bestaat helemaal niet bij de veel op veel relatie, daar is enkel sprake van student, les, en docent.

Quote:
- Je hebt in de tabel Klas de kolom Aantal-leerlingen; dat is een gegeven die je niet op hoeft te slaan, omdat het een procesgegeven is. Het aantal leerlingen uit een klas is natuurlijk op te halen door een COUNT() op de tabel Student.


inderdaad, klein foutje, pas het even aan. maar dannog zou je een COUNT() op klas moeten doen, niet alle leerlingen zitten in dezelfde klas

Quote:
- Bij de uitleg van de veel-op-veel relatie koppel je een student aan een docent. Dat is volgens mij geen goede relatie, dat zou betekenen dat een docent aan alle leerlingen van dezelfde klas gelinkt wordt. Dat terwijl die relatie er eigenlijk al is tussen Klas en Student. Volgens mij moet de tabel Docent dus een relatie hebben met Klas.


dit gebeurt als het ware ook (al heet klas hier dan les). 'Student krijgt les van Docent'. dit worden drie tabellen: student, les, en docent. dan heeft docent helemaal niets meer te maken met student, maar met les. vervolgens koppelt deze tabel weer naar studenten
Crispijn -
Crispijn -
15 jaar geleden
 
0 +1 -0 -1
Heb je ook aan 1 tabel users gedacht waar je uiteindelijk een status of categorie (leerling, student) aan gaat geven? Dit lijkt mij uiteindelijk nog handiger aangezien je veelal dezelfde informatie op gaat slaan in beide tabellen.
Wees niet te bang om extra tabellen aan te maken. Vaak kan je met eenvoudige code een tabel in een admin paneel beheren. Zo bouw je wel iets voor de toekomst want wat als een leerling uiteindelijk een docent wordt? Dan heb je de persoon in 2 tabellen staan en ga je ergens hiaten in je leerling/docent en klas geschiedenis oplopen.

Kortom: Denk iets groter dan leerling of docent -> denk aan persoon. Heb je vakanties, weekenden of een avond in de kroeg? Dat is een event of activiteit. Heb je een restaurant, kroeg, vakantiehuis of school. Het valt allemaal in dezelfde categorie namelijk locatie.

Ik ben erg fan van categoriseren binnen 1 tabel. Normaliseren tot de max en deuren voor de toekomst open houden.
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
Dat is natuurlijk ook de bedoeling (vind ik), maar dit zijn slechts voorbeelden om relaties te leggen, ongeacht of er dit zou kunnen. Na het bepalen van de relaties, ga je normaliseren, en als het goed is krijg je dan nette tabellen
- SanThe -
- SanThe -
15 jaar geleden
 
Ik vind het een zeer komische, doch treffende, uitleg.
Geweldige beginopzet.
Jeroen VD
Jeroen VD
15 jaar geleden
 
bedankt!
Joren de Wit
Joren de Wit
15 jaar geleden
 
0 +1 -0 -1
Goede eerste stap richting normaliseren! Van mij mag je echter wel de nadruk leggen dat de modellen die je nu verkregen hebt, nog niet optimaal zijn.

Een ander punt: de PK van je koppeltabel is naar mijn mening incorrect. Je kunt nu maar 1 student/docent combinatie per lokaal hebben (een PK kan immers maar 1x voorkomen). Tenzij je 1-op-1 lessen geeft, lijkt mij dit geen gewenste situatie. Bovendien kun je gewoon een PK aanbrengen op de combinatie van de twee FK's. Op die manier kun je records ook uniek onderscheiden...
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
natuurlijk. zo zie je maar weer dat je snel iets over het hoofd ziet.

ik heb niels net een berichtje gestuurd met een aantal aanpassingen en een nieuwe pagina. ik heb veel van de reacties erin verwerkt.

bedankt voor alle opbouwende kritiek!
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
Het heeft even geduurd, maar nu zijn de wijzigingen toch doorgevoerd. Bedankt Niels ;)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Zinsontleden
  2. cardinaliteit
  3. 1 op veel en veel op 1
  4. veel op veel
  5. Opmerkingen
  6. Slotwoord

Labels

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.