Hallo,

Nog steeds ben ik bezig met de opzet van mijn database en ik loop tegen een probleem aan waarvan ik niet weet hoe ik het moet oplossen, of naar welke termen ik moet zoeken op internet om tot een oplossing te komen.

Mijn database bestaat uit 3 tabellen:
- gebruiker
- school
- school_afdeling

Het idee is dat een gebruiker zich kan aanmelden bij 1 of meerdere scholen. Elke school heeft afdelingen;
- School 1 heeft bijvoorbeeld afdeling A en B,
- School 2 heeft bijvoorbeeld afdeling C en D

Naast dat een gebruiker zich bij een school kan inschrijven kan diegene zich ook eventueel(!) inschrijven bij 1 afdeling die gekoppeld is aan de school.

Wanneer een gebruiker is ingeschreven bij school 1, kan hij zich dus optioneel inschrijven bij afdeling A en B, maar niet bij afdeling C en D, omdat die behoren aan school 2.

Het probleem is nu, hoe leg ik deze koppeling?

Op dit moment heb ik een tabel gemaakt genaamd gebruiker_school, met daarin de volgende velden:
- gebruiker_id
- school_id
- school_afeling_id

De rijen die ik in school_afdeling_id kan kiezen zouden dus afhankelijk zijn van de waarde in school_id;
- Staat in school_id 1? Dan zou ik in school_afdeling_id A of B kunnen kiezen.
- Staat in school_id 2? Dan zou ik in school_afdeling_id C of D kunnen kiezen.

Ik hoop dat mijn vraag een beetje duidelijk is.

Alvast bedankt!
Ik denk niet dat dat iets is wat je in je database zou moeten willen reguleren. Persoonlijk beschouw ik de database als een plek waar we de data in plaatsen. Hoe en welke informatie die database zou moeten krijgen lijkt mij een code ding.
Je zou wellicht een if statement op kunnen nemen in je create of update query.
Als zulke dingen in code zouden moeten worden opgelost, zijn dingen als UNIQUE INDEX etc. toch ook een beetje overbodig? :/
UNIQUE INDEX is in sommige gevallen handig, maar het betekend nog niet dat alles een pas klare oplossing heeft voor datgene wat je uit wilt voeren.
Dit lijkt mij in ieder geval de meest genormaliseerde en functionele versie van wat jij zou willen bewerkstelligen.
gebruikers:
- gebruiker_id (PK)
- school_id (FK)

scholen:
- school_id (PK)

afdelingen:
- afdeling_id (PK)
- school_id (FK)

gebruikers2afdelingen:
- gebruiker_id (PK+FK)
- afdeling_id (FK)
Op die manier kan een gebruiker maar lid zijn van 1 school.
De gebruiker moet lid kunnen zijn van meerdere scholen en per school lid van 1 afdeling.

Maar zoals ik begrijp is het niet mogelijk deze restricties op te leggen in de database zelf?

Edit:
Op dit moment heb ik het opgelost met een trigger die kijkt of de relatie bestaat, zo niet; wordt er een signal verstuurd.

Reageren