Hulp bij database
voor een hobby project ben ik bezig met een database waarbij ik de inhoud van het lokale bloemenkraampje wil helpen met de inventarisatie.
hiervoor heb ik een database gemaakt waarbij ze via een phpsite aankan geven waneer er iets verkocht is.
nu heb ik al wel een lijstje met bloemen, hoeveel fust er van is en hoeveel bossen bloemen er in de fust zitten echter de database er achter lukt voor geen meter.
het probleem zit denk ik er in dat ik geen rekening ermee heb gehouden dat de invoer van bloemen ook door meerdere mensen moet kunnen.
ik heb dus ook al een php script gemaakt waarbij je in theorie de database kan voeren met welke bloemen er komen, waarbij ik vakken heb voor:
Categorie bloem
lengte
hoeveelheid fust
hoeveelheid bossen in een fust
echter heb ik een totaal onoverzichtelijke database nu omdat deze dingen zonder samenhang in de database komen.
hoe kan ik ervoor zorgen dat wanneer de categorie, lengte en hoeveelheid bossen in een fust gelijk zijn, dat de aantal fusten bij elkaar opgeteld worden?
Denk het eerst helemaal uit hoe je dit handmatig zou doen.
Vervolgens kun je losse stukjes programmeren en die dan weer samenvoegen.
Met behulp van een knop kun je bijvoorbeeld dit script aanroepen en de voorraad actualiseren.
mijn tabel heeft elk van de eerder genoemde criteria, dan kan ik daarna select from [naam tabel], [aantal fust] where [naam bloem] etc equels [naam bloem opgegeven] etc, toch?
a. één hoofdtabel voor alle bloemsoorten;
b. één afhankelijke tabel voor de lengten per bloemsoort;
c. één tabel voor de fusten;
d. één tabel voor de aantallen boeketten/bloemen van bloemsoort + lengte per fust.
Voor de inventaris kun je vervolgens twee benaderingen volgen: óf je registreert alleen de onderhanden (actuele) voorraad óf je registreert alle voorraadmutaties (plus en min). De eerste benadering houd de boel klein en snel, maar de tweede verschaft je veel meer nuttige informatie. Je kunt daarmee handige verkoopoverzichten per week en per maand maken en de inkoop verbeteren (omdat je met historische informatie bijvoorbeeld kunt gaan voorspellen wat de kritieke voorraadniveaus zijn en de beste momenten om iets in te kopen).
Ward van der Put op 12/11/2015 12:38:27:
Begin met het maken van een relationeel datamodel. Gebruik vooral géén aparte databasetabel per bloemsoort. Maak in plaats daarvan bijvoorbeeld:
a. één hoofdtabel voor alle bloemsoorten;
b. één afhankelijke tabel voor de lengten per bloemsoort;
c. één tabel voor de fusten;
d. één tabel voor de aantallen boeketten/bloemen van bloemsoort + lengte per fust.
Voor de inventaris kun je vervolgens twee benaderingen volgen: óf je registreert alleen de onderhanden (actuele) voorraad óf je registreert alle voorraadmutaties (plus en min). De eerste benadering houd de boel klein en snel, maar de tweede verschaft je veel meer nuttige informatie. Je kunt daarmee handige verkoopoverzichten per week en per maand maken en de inkoop verbeteren (omdat je met historische informatie bijvoorbeeld kunt gaan voorspellen wat de kritieke voorraadniveaus zijn en de beste momenten om iets in te kopen).
a. één hoofdtabel voor alle bloemsoorten;
b. één afhankelijke tabel voor de lengten per bloemsoort;
c. één tabel voor de fusten;
d. één tabel voor de aantallen boeketten/bloemen van bloemsoort + lengte per fust.
Voor de inventaris kun je vervolgens twee benaderingen volgen: óf je registreert alleen de onderhanden (actuele) voorraad óf je registreert alle voorraadmutaties (plus en min). De eerste benadering houd de boel klein en snel, maar de tweede verschaft je veel meer nuttige informatie. Je kunt daarmee handige verkoopoverzichten per week en per maand maken en de inkoop verbeteren (omdat je met historische informatie bijvoorbeeld kunt gaan voorspellen wat de kritieke voorraadniveaus zijn en de beste momenten om iets in te kopen).
dat tweede is wel de bedoeling dat het moet worden, echter schiet daar vrees ik mijn kennis bij te kort. iemand een goede tutorial toevallig?
Code (php)
1
2
3
4
5
2
3
4
5
+------------------+-----------+---------+
| datum_en_tijd | bloemtype | mutatie |
+------------------+-----------+---------+
| 2015-11-12 08:35 | 123 | 12 |
+------------------+-----------+---------+
| datum_en_tijd | bloemtype | mutatie |
+------------------+-----------+---------+
| 2015-11-12 08:35 | 123 | 12 |
+------------------+-----------+---------+
Dezelfde ochtend wordt om 10:30 het eerste boeket verkocht:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
+------------------+-----------+---------+
| datum_en_tijd | bloemtype | mutatie |
+------------------+-----------+---------+
| 2015-11-12 08:35 | 123 | 12 |
| 2015-11-12 10:30 | 123 | -1 |
+------------------+-----------+---------+
| datum_en_tijd | bloemtype | mutatie |
+------------------+-----------+---------+
| 2015-11-12 08:35 | 123 | 12 |
| 2015-11-12 10:30 | 123 | -1 |
+------------------+-----------+---------+
Rond de lunch koopt een tweede klant een bos bloemen van twee boeketten:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
+------------------+-----------+---------+
| datum_en_tijd | bloemtype | mutatie |
+------------------+-----------+---------+
| 2015-11-12 08:35 | 123 | 12 |
| 2015-11-12 10:30 | 123 | -1 |
| 2015-11-12 12:45 | 123 | -2 |
+------------------+-----------+---------+
| datum_en_tijd | bloemtype | mutatie |
+------------------+-----------+---------+
| 2015-11-12 08:35 | 123 | 12 |
| 2015-11-12 10:30 | 123 | -1 |
| 2015-11-12 12:45 | 123 | -2 |
+------------------+-----------+---------+
Je kunt met deze eenvoudige opzet al zien dat we daar later "rijke" informatie uit kunnen halen. We kunnen bijvoorbeeld met SUM() zien dat de huidige voorraad 9 is. En we kunnen met een GROUP BY op de datum zien dat er vandaag 3 x type 123 is verkocht.
Bloemsoorten en bloemtypen hoeven we daarvoor niet voortdurend op te slaan: die komen in een aparte databasetabel met een unieke ID (identifier) als de primaire sleutel:
Code (php)
1
2
3
4
5
2
3
4
5
+-----------+------------+--------------+
| bloemtype | bloemsoort | lengte_in_cm |
+-----------+------------+--------------+
| 123 | Rode rozen | 30 |
+-----------+------------+--------------+
| bloemtype | bloemsoort | lengte_in_cm |
+-----------+------------+--------------+
| 123 | Rode rozen | 30 |
+-----------+------------+--------------+
Je kunt zo'n datamodel later nog op allerlei manieren uitbouwen met extra kolommen en extra tabellen, maar met slechts twee tabelletjes heb je al een redelijk degelijke én werkbare basis gelegd.
Gewijzigd op 12/11/2015 13:41:13 door Ward van der Put