[Alg] DB ontwerp voorraadsysteem

Pagina: 1
Acties:

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Hoi allemaal,

Voor een nieuw te ontwikkelen voorraad/order systeem ben ik bezig met het database ontwerp. Een heel groot gedeelte ben ik er wel uit, maar ik zit met het volgende :
code:
1
2
3
4
5
6
tabel Artikelen

id (primary key)
omschrijving varchar
..
..

Ik heb dus een tabel met artikelen waar de voorraad van bijgehouden dient te worden. Op deze voorraad worden mutaties verricht (inkoop/verkoop). Voor historie is het nodig dat op elk gewenst moment een voorraadpositie in het verleden op te vragen is. Ik wil dus kunnen zeggen "Wat was de voorraad van artikel x op datum y?"

Nu kun je natuurlijk een fixed positie nemen als "begin" en dan alle mutaties erop en eraf trekken om tot de gevraagde waarde te komen, maar dat duurt het opvragen van een voorraad van een aantal maanden terug natuurlijk best wel lang.

Deze fixed posities kunnen inventarisaties zijn die tweemaal per jaar worden uitgevoerd, maar dit is niet gegarandeerd.

Wat zijn jullie ideeen hierover ?

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Je zou met een soort "changelog" kunnen werken dmv. een aparte table of DB.

Door dan in die changelog alleen met ID's van producten en tabellen te werken kunnen en van te vooren zeer korte omschrijvingingen van standaard transacties vast te leggen kun je de hoeveelheid data ook binnen de perken houden.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Als ik je dus goed begrijp leg ik naast de tabellen artikelen en mutaties (inkopen/verkopen) ook nog een tabel voorraadmutaties aan. Iets als het volgende :
code:
1
2
3
4
tabel changelog
timestamp 
artikel_id (f_key)
aantal

Wordt dan je "opzoek" tijd toch niet heel lang als je bijvoorbeeld op 31 december de voorraad van 25 december gaat opvragen. Hij moet dan bijna het hele jaar gaan salderen ?

SIZE does matter.
"You're go at throttle up!"


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Als je een sommatie op de mutatie tabel uitvoert hoeft dit absoluut niet lang te duren. Zorg ervoor dat je positieve waarden gebruikt bij het ophogen van de vooraad en negatieve waneer er wat weg gaat, en dan kun je gewoon het sql commando sum gebruiken om op elk willekeurig bereik te achterhalen wat de mutaties zijn. Je moet eigenlijk niet met een startaantal beginnen, maar gewoon de vooraad initialiseren met een +mutatie van de huidige vooraad.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Hou per artikel de voorraad bij over een periode, dus in die tabel heb je dan artikel_id, datum_van, datum_tot en nog wat dingen die mogelijk nodig zijn (volgnummertjes, voorraden en dergelijke). Dit is eingelijk het systeem dat banken ook gebruiken om de stand van je bankrekening bij te houden.
Queries over een bepaalde periode worden dan reuze simpel.

  • bras
  • Registratie: Oktober 2000
  • Laatst online: 13-08 14:08
dat laatste (niet helemaal, omdat er dus iets tussen gekomen is :) ) kun je dan doen met een
code:
1
2
3
4
select sum(aantal)
from   changelog
where  artikel_id = $artikelid
and    timestamp < $timestamp

dit resultaat dan optellen bij je uitgangsvoorraad en klaar toch.

"When you find yourself in the company of a halfling and an ill-tempered Dragon, remember, you do not have to outrun the Dragon...you just have to outrun the halfling."


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Op donderdag 11 april 2002 15:38 schreef bras het volgende:
dat laatste (niet helemaal, omdat er dus iets tussen gekomen is :) ) kun je dan doen met een
code:
1
2
3
4
select sum(aantal)
from   changelog
where  artikel_id = $artikelid
and    timestamp < $timestamp

dit resultaat dan optellen bij je uitgangsvoorraad en klaar toch.
Als je de uitgangsvooraad ook in de changelog zet (waar ie imho ook hoort) ben je alleen al klaar na het uitvoeren van deze query :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Hoe weird eigenlijk...

Ik loop hier dus al een paar weken mee in mijn hoofd en steeds zat ik wel rond de oplossing die hier geschetst wordt, maar nu plaats ik een topic en is het binnen een half uur uitgekomen.

* Skinny denkt dat GoT toch wel een plaatsje in de wereld-wonder-top-10 verdient ;)

SIZE does matter.
"You're go at throttle up!"

Pagina: 1