Ik ben bezig met een systeem waarin tarieven voor campers berekend moeten worden. De wereld van camperhuur is nogal vreemd. De sport is om steeds iets te vinden wat niet in het systeem past. Tijdens het ontwerp van de eerste versie is er dus een afweging gemaakt tussen flexibiliteit & data-complexiteit en bruikbaarheid. Ik ben me nu aan het oriënteren op een nieuwe database structuur. Heb hierover een paar vragen/discussiepunten (omdat het natuurlijk op meerdere manieren kan).
De andere methode zijn seizoenstarieven. Tarieven met randvoorwaarden: camper, ophaallokatie, ophaaldatum.

Tot en met de camper tabelis alles nog hetzelfde, maar
Waar leg ik vast welk tarief-type er moet worden gebruikt?
Zelf denk ik dat ik dit gewoon vastleg in de campertabel met een kolom ratetype. Dit geeft het voordeel dat via de interface de keuze al gemaakt is bij de camper, of zelfs bij de supplier en dat de gebruiker dit niet verkeerd kan kiezen.
Aan de andere kant kun je zeggen dat dit gewoon moet blijken uit de beschikbare data, maar dat vergroot de kans op invoerfouten aanzienlijk.
. Bij de camper kunnen allerlei items worden geboekt. De tarieven varieren per seizoen hebben dus allen een beperking qua geldigheid die met datum worden aangegeven.
Voor de rest zijn er een aantal dingen die kunnen van invloed kunnen zijn op de prijs:
- ophaallokatie
- campertype
- per dag of vast bedrag (t/m x dagen vast, daarna y dollar per dag)
- inleverlokatie (bij route a -> b worden terugrijkosten berekend)
- afstand ( mijlpakketten )
Dit is de situatie nu ongeveer, maar ze bedenken zo weer wat anders. Juist als je denkt alle mogelijkheden te hebben afgedekt.
Hier is mijn afweging, maak in één tabel die alle voorwaarden denkt, waarbij de onnodige kolommen NULL blijven en dus relaties niet bestaan óf ga ik voor alle mogelijke variaties een aparte tabel maken. Hierin kan ik niet echt een helder e visie krijgen. Een stuk of 4 tabellen om je tarieven te defineren is ook niet echt optimaal.
Optie 1: 1 tabel

Optie 2: losse tabellen

Optie 1 heeft mijn voorkeur (KISS), maar ik het grootste probleem wat ik hier zie, is de optionele constraints. Kan iemand mij ervan overtuigen dat dit niet zo erg is?
- Korting als vast bedrag, als percentage, in huurdagen of gereduceerd tot een vast bedrag
- Verschilt in ophaal en inleverlocatie of camper
- Kies een x aantal items uit een set van y items
- Aanbieding A mag wel in combinatie met B maar niet met C
- 3 halen 2 betalen
- x aantal gratis
Ik kon zo 1 voorbeeldje vinden, helaas niet de meest complexe.
Vertrek in april, kies er één:
- Gratis one-way
- 50% korting op ongelimiteerde mijlen bij C30 campers, hierbij geldt de korting van 50% alleen op de eerste 21 dagen, de extra dagen worden volledig berekend.
- Gratis preparatie
Bonus: Gratis persoonskits bij vertrek tussen 1 - 19 april
Zoals je ziet een web van voorwaarden. Een persoon snapt dit nog eens, maar programmeer het maar eens. Met dit probleem verwacht ik geen oplossing, maar misschien kan iemand me een schop in de goede richting geven
. Ik zelf zou de aanbiedingen in de meeste gevallen als een item zien, op dit moment worden items in de aanbieding gewoon nieuwe items met andere bedragen. Dit is prima te doen, maar hoe kan ik in de db-structuur vastleggen welke combinaties er mogen en belangrijker niet mogen.
Samenvattend al het bovenstaande:
- Laat ik de data zelf bepalen wat er geldig is of wordt dit door de gebruiker zelf gedefiniëerd door het vast te leggen in een hogere tabel?
- Hoe kan ik flexibel voorwaarden opgeven in combinaties van verschillende tarieven uit verschillende tabellen?
Camper tarieven
Een supplier heeft 1 of meer campers in zijn programma. Daarnaast beschikt deze supplier over meerdere locaties waar de camper opgehaald of afgeleverd kan worden. Er zijn meerdere suppliers die elk hun eigen methode hebben om de tarieven te berekenen. De ene methode bestaat uit codes, deze codes vertegenwoordigen tarieven. Elke week worden er nieuwe codes uitgegeven in een matrix, hierbij staat verticaal de camper en horizontaal de ophaallocatie, of ophaallocatie tegen inleverlocatie met per camper een ander blad. + uitzonderingenDe andere methode zijn seizoenstarieven. Tarieven met randvoorwaarden: camper, ophaallokatie, ophaaldatum.

Tot en met de camper tabelis alles nog hetzelfde, maar
Waar leg ik vast welk tarief-type er moet worden gebruikt?
Zelf denk ik dat ik dit gewoon vastleg in de campertabel met een kolom ratetype. Dit geeft het voordeel dat via de interface de keuze al gemaakt is bij de camper, of zelfs bij de supplier en dat de gebruiker dit niet verkeerd kan kiezen.
Aan de andere kant kun je zeggen dat dit gewoon moet blijken uit de beschikbare data, maar dat vergroot de kans op invoerfouten aanzienlijk.
Aanbiedingen
Als je denkt, waar stelt die jongen zich aan met ingewikkeld. Dan gaan we gewoon even verderVoor de rest zijn er een aantal dingen die kunnen van invloed kunnen zijn op de prijs:
- ophaallokatie
- campertype
- per dag of vast bedrag (t/m x dagen vast, daarna y dollar per dag)
- inleverlokatie (bij route a -> b worden terugrijkosten berekend)
- afstand ( mijlpakketten )
Dit is de situatie nu ongeveer, maar ze bedenken zo weer wat anders. Juist als je denkt alle mogelijkheden te hebben afgedekt.
Hier is mijn afweging, maak in één tabel die alle voorwaarden denkt, waarbij de onnodige kolommen NULL blijven en dus relaties niet bestaan óf ga ik voor alle mogelijke variaties een aparte tabel maken. Hierin kan ik niet echt een helder e visie krijgen. Een stuk of 4 tabellen om je tarieven te defineren is ook niet echt optimaal.
Optie 1: 1 tabel

Optie 2: losse tabellen

Optie 1 heeft mijn voorkeur (KISS), maar ik het grootste probleem wat ik hier zie, is de optionele constraints. Kan iemand mij ervan overtuigen dat dit niet zo erg is?
Aanbiedingen
Een apart hoofdstuk waarvan ik niet eens weet of ik jullie daarmee lastig kan/mag vallen op dit tijdstip. Aanbiedingen worden op de meest onmogelijke combinaties aangeboden. Een aantal mogelijkheden die onderling soms ook nog gecombineerd worden:- Korting als vast bedrag, als percentage, in huurdagen of gereduceerd tot een vast bedrag
- Verschilt in ophaal en inleverlocatie of camper
- Kies een x aantal items uit een set van y items
- Aanbieding A mag wel in combinatie met B maar niet met C
- 3 halen 2 betalen
- x aantal gratis
Ik kon zo 1 voorbeeldje vinden, helaas niet de meest complexe.
Vertrek in april, kies er één:
- Gratis one-way
- 50% korting op ongelimiteerde mijlen bij C30 campers, hierbij geldt de korting van 50% alleen op de eerste 21 dagen, de extra dagen worden volledig berekend.
- Gratis preparatie
Bonus: Gratis persoonskits bij vertrek tussen 1 - 19 april
Zoals je ziet een web van voorwaarden. Een persoon snapt dit nog eens, maar programmeer het maar eens. Met dit probleem verwacht ik geen oplossing, maar misschien kan iemand me een schop in de goede richting geven
Samenvattend al het bovenstaande:
- Laat ik de data zelf bepalen wat er geldig is of wordt dit door de gebruiker zelf gedefiniëerd door het vast te leggen in een hogere tabel?
- Hoe kan ik flexibel voorwaarden opgeven in combinaties van verschillende tarieven uit verschillende tabellen?
"Chaos kan niet uit de hand lopen"