unieke combinaties

Status
Niet open voor verdere reacties.

Koen81

Gebruiker
Lid geworden
5 jan 2011
Berichten
12
hallo

Iemand een idee hoe volgend probleem kan aangepakt worden?

Ik wil een uurroosterprogramma voor school maken met volgende 4 elementen:

lesuren / klas / leerkracht / lokaal

De combinatie klas-lesuren is uniek, leerkracht-lesuren is uniek en lokaal-lesuren is uniek. Dus 3 velden die telkens uniek zijn met één zelfde ander veld (lesuren). Onderling zijn klas, leerkracht en lokaal niet uniek!

Iemand een idee hoe deze relatie er kan uitzien?

Waarschijnlijk is een query nodig (of meerdere), maar ik ben hier niet zo in thuis.
Wie kan helpen?

Met dank,

K.
 
Ik vermoed dat je aparte tabellen hebt voor Klassen, Leraren, Lesuren en Lokalen? En een tabel voor het Rooster?
Dan koppel je in de tabel Rooster alle tabellen aan de bijbehorende velden, en dan ben je er volgens mij al. De sleutel in Rooster is dan KlasID+LeraarID+LesuurID+LokaalID. Op basis van het fysieke gegeven dat geen enkele combinatie meer dan één keer mag voorkomen.
 
Bedankt voor de reactie!

Maar deze oplossing is wat te eenvoudig, de combinatie klas-uur-lokaal-leerkracht kan in dit geval maar één keer voorkomen, maar wanneer je in deze combinatie het lokaal veranderd dan kan een klas op een bepaald lesuur in 2 verschillende lokalen zitten of in hetzelfde lokaal van 2 verschillende leerkrachten leskrijgen. Lokaal, leerkracht en klas zijn dus wezl degelijk apart uniek met lesuur maar onderling mogen de combinaties (lokaal-leerkracht, lokaal-klas en leerkracht-klas) wel meerdere malen voorkomen.

Enig idee?

Met dank,

K.
 
Mij lijkt het dat een combinatie van Groep, Klas, Leerkracht en Lokaal per definitie uniek is; zelfs als je ze, wat blijkbaar moet kunnen, halverwege de les naar een ander lokaal wilt sturen, is dat mogelijk. Hiervoor geldt dan ook weer dat de nieuwe combinatie uniek is, en maar één keer voor mag komen. Ergo: Als je 4 variabelen hebt, kan elke combinatie één keer voorkomen.

Lokaal, leerkracht en klas zijn dus we degelijk apart uniek met lesuur maar onderling mogen de combinaties (lokaal-leerkracht, lokaal-klas en leerkracht-klas) wel meerdere malen voorkomen.

Dat riekt ernaar dat Lesuur de sleutelfactor is.... Maak anders eens een voorbeeldje, want mijn kleine snappie begint een beetje stoom uit te blazen ;)
 
access.JPGaccess.JPG

Voorbeeld;

Leerkracht Jan heeft les aan klas 5A in lokaal A12 tijdens lesuur 1
Leerkracht Jan kan hierna niet meer op lesuur 1 lesgeven, 5A kan ook niet meer tijdens lesuur 1 leskrijgen en lokaal A12 is niet meer vrij tijdens lesuur 1.

In wat je voorstelt is het volgende wel mogelijk; Jan heeft les aan 5B in lokaal A12 tijdens lesuur 1 of Henk geeft les aan 5A in lokaal A12 tijdens lesuur 1. Dit zijn combinaties die niet meer kunnen. Dus lesuren zijn inderdaad sleutelfactor.

In mijn voorbeeld zijn de klas-lesuur / leerkracht-lesuur / lokaal-lesuur uniek gekoppeld, maar de vraag blijft hoe die in één uurrooster kunnen samenkomen?

Met dank,
K.
 
Ik zou het toch opzetten volgens mijn plaatje.... Niet alleen veel simpeler, ook veel logischer. Daarbij wil je uiteraard wel voorkomen dat iemand op een plek moet zijn waar hij fysiek niet kan zijn, of in twee lokalen tegelijk is ingeboekt, maar dat is relatief simpel te regelen. Namelijk op een formulier. Hierop maak je keuzelijsten, die zijn gebaseerd op combinaties die daadwerkelijk mogelijk zijn. Oftewel: op het moment dat leraar Jansen op lesuur 1 is ingezet, is hij niet meer beschikbaar voor de overige klassen/lokalen. En ook voor lokalen: als lokaal A12 is ingedeeld op lesuur 2, is dat lokaal niet meer beschikbaar voor overige lessen. Oftwel: bij elke keuzelijst die je gebruikt voor het rooster maak je een Rijbron die de check doet op beschikbaarheid.
 

Bijlagen

  • Rooster.jpg
    Rooster.jpg
    22,8 KB · Weergaven: 49
Heel erg bedankt voor je antwoord.

Laatste vraagje ;-) Kan je nog kort uitleggen hoe ik die rijbron die een check doet op beschikbaarheid moet instellen?


Dank!!

K.
 
Ik was al begonnen aan een voorbeeldje ;)
Maar die heb ik thuis uiteraard nog niet, dus ik maak wel even een nieuwe.
 
unieke combinatie voor één veld opheffen

Ik heb in access de volgende query gemaakt:

ALTER TABLE tuurrooster ADD CONSTRAINT tuniek1 UNIQUE (Idklassen, Idlesuren)

Deze werkt!!

Zou het mogelijk zijn om deze query aan te passen zodat hij enkel werkt als Idklassen niet gelijk is aan de waarde 12? (Voor deze ene Id geld het uniek zijn nl niet)?

Met dank,

K.
 
Nu vraag je het onmogelijke: in een tabel is een veld of index uniek, of hij is dat niet. Je kunt geen uitzonderingen inbouwen...
Wil het overigens lukken met het formulier? In mijn beleving zou het zo moeten zijn, dat je een maximaal aantal combinaties moet kunnen maken. Daar bedoel ik dit mee: als je 12 leerkrachten hebt, 8 lokalen, en 14 klassen, dan kun je voor elk lesuur maar maximaal 8 combinaties bedenken. Je kunt namelijk niet meer lessen plannen dan je lokalen hebt. En ook: je 5 leerkrachten hebt, 8 lokalen, en 14 klassen is het maximale aantal combinaties dus 5, omdat je elke leerkracht maar één keer in kan zetten.
In je planningsformulier moet je dus eerst vaststellen hoeveel combinaties je maximaal kunt maken, en op basis daarvan de keuzelijsten dichtzetten of niet. In het laatse voorbeeld geldt dan, dat als alle leerkrachten zijn ingepland, je geen nieuwe planning voor dat roosteruur kunt maken.
 
Ok, bedankt!!

In bijlage het volledige bestand. Het is bijna zoals ik het wil maar...

Volgende probleempjes krijg ik niet opgelost:

- graag wil ik de velden klassen, klassen1, klassen2, klassen3, klassen4 en klassen5 samenkrijgen in één veld (nieuwe kolom). Dit omdat soms klassen samen les kunnen krijgen. De Idwaarden optellen is geen probleem maar hoe krijg ik deze velden uit verschillende tabellen samen? Zonder dit te doen krijg ik nooit een mooie filter voor elkaar.

- uiteindelijk wil ik graag een rooster per klas en per leerkracht kunnen afdrukken, waar alle 33 lesuren op vermeld staan, enig idee hoe ik deze "filter-opdracht" naar een rapport kan overbrengen?

- hoe kan ik een nulwaarde toestaan? Een leerkracht zonder klas een uur laten aanwezig zijn, dus klas blanco laten. Wordt nu niet aanvaard.


Met veel dank!

K.

--> Bijlage zit in mail; kreeg ik hier niet doorgestuurd.
 
Mag ik je nog even wijzen op deze regel uit je eerste post?
De combinatie klas-lesuren is uniek, leerkracht-lesuren is uniek en lokaal-lesuren is uniek.
Als ik je nu goed begrijp, is de combinatie lokaal-lesuren niet uniek, omdat je in één lokaal meerdere klassen kunt hebben. Dat houdt dus in, als je de db tenminste goed wilt normaliseren, dat je bij een combinatie van 3 klassen in één lokaal voor één lesuur (met vermoedelijk één of geen docent) 3 records hebt met een lokaal-lesuren combinatie.
 
Klopt!

Maar toch is die uniekheid belangrijk, vandaar dat ik graag met uitzonderingen wou werken of verchillende klassen samen voegen in één veld. Ik heb klassen2, klassen3, klassen4 en klassen5 aangemaakt om op dezelfde record verschillende klassen te combineren. Als deze velden worden samengevoegd is het probleem opgelost.

Later moeten deze klassen dan worden uitgefilterd. (Zie vraag 2.)
 
Nee, je maakt je probleem alleen maar groter. In je rapportages weet je dan namelijk niet meer welke klas op welk moment in welk lokaal heeft gezeten. En wat doe je als je per klas een overzicht wil maken van het rooster? Dat kan dan ook niet meer, omdat de waarde "Klas1" niet hetzelfde is als de waarde "Klas1, Klas3". Wat mij betreft ben je hiermee op een heilloze weg ingeslagen... En wat is het probleem als de combinatie Lokaal+Les niet uniek is?
 
Bedankt voor de reacties!

Ik begrijp dat ik best alle uniekheden ophef. Dan werkt alles natuurlijk. Maar het blijft hard opletten bij de ingave van gegevens.

Bestaat er een mogelijkheid om een melding te krijgen als een combinatie al eens eerder werd gebruikt (zonder ze uniek te maken), dan kan ik telkens zelf beslissen of het toegelaten is?
 
Je moet, voordat je dat soort zaken beslist, misschien eerst eens goed nadenken over de afhankelijkheden die je eigenlijk wilt in je tabel(len). Eerst bepaal je welke gegevens je wilt opslaan, en vervolgens ga je kijken welke (combinatie) van gegevens je kunt gebruiken om records uniek te identificeren.
Als het noodzakelijk is om de combinatie klas+lokaal uniek te houden, kun je maar één klas per lokaal in je rooster gebruiken. Dat is voor een hoop scholen een prima uitgangspunt, maar in jouw geval blijkbaar niet. Dan is de conclusie dat deze combinatie niet uniek is. Geen probleem, moet kunnen! De combinatie Lokaal+Leerkracht? Geldt dezelfde redenatie voor: als één leerkracht twee lokalen moet kunnen bestieren, dan is de combinatie niet uniek. Komt dat niet voor, en wil je dit dus wel afdwingen, dan houd je deze combinatie wèl uniek, en krijg je op basis hiervan dus geen dubbele records.
En zo loop je door alle combinaties heen.
Maar dus eerst: nadenken over wat je nu eigenlijk wilt! En zeker geen onmogelijke oplossingen verzinnen als velden samenvoegen in een nieuw veld, want daarmee is je db na verloop van tijd absoluut niet meer te onderhouden. En persoonlijk zou ik daar ook helemaal geen tijd in willen steken, want dat is gewoon zonde van de tijd ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan