Het probleem
Je kunt producten niet zomaar verwijderen of aanpassen, omdat als een product op een factuur voorkomt, die factuur opeens incompleet of onjuist zou zijn. Hoe werk je daar omheen?

Mijn idee
Mijn idee is als volgt: In plaats van een product te verwijderen of (de prijs) aan te passen, zet je het product op non-actief. Het product blijft dan in de database bewaard onder hetzelfde ID, zodat alle productverwijzingen op oude facturen naar dat product, met die productprijs, juist blijven. Daarnaast maak je een kopie van het product, die je met een nieuw ID weer invoert in je tabel. Alle facturen die vanaf dat moment worden gegenereerd en dat product bevatten, maken zo gebruik van de nieuwe data.

Is dit de juiste manier van werken?
Correct. In principe verwijder je nooit wat uit je database (zeg nooit nooit).
Je kunt het nog verder uitbreiden, denk ik, door die prijs 'uit' het product te halen. Daar dus weer een aparte tabel voor maken. Heb je ook al nagedacht over korting?
Zoek anders eens op [google]normaliseren[/google].
Goed idee! Ik kan natuurlijk ook een nieuwe tabel aanmaken en daar het product naartoe kopieƫren. Dan moet ik echter wel ook NOG een koppeltabel aanmaken, en ook de factuur updaten om naar die nieuwe koppeltabel en dus het nieuwe product te verwijzen. Wat zou hier wijsheid zijn, denk je? De nieuwe koppeltabel + update, of een kopie van het product in zijn eigen tabel?

Normaliseren is wel aardig gelukt ;).

[size=xsmall]Toevoeging op 07/02/2011 01:04:54:[/size]

Edit:
Nu ik er over nadenk, heb ik denk ik niet eens een nieuwe koppeltabel nodig. Wat mijn oplossing op dit moment zou zijn is:

Een nieuw veld toevoegen aan de bestaande koppeltabel tussen producten en facturen. Je krijgt dan:
factuur_id, product_id, oud_product_id (bijv.)

Waarbij steeds alleen factuur_id en product_id OF oud_product_id zijn ingevuld; van die laatste twee dus niet beide!
ik ben ook een programma aan het maken voor facturen, wat ik doe is alle data uit tabellen zoals 'product' halen en dat allemaal opslaan in de tabel 'factuur'. Dan kan er nooit data verloren gaan doordat er elders data verwijderd word of bewerkt.

straks komt de belastingdienst...moet je zeggen: "sorry mijn facturen kloppen niet meer want ik heb oude producten uit mijn systeem verwijderd" :-)
Allemaal prima suggesties behalve "oud_product_id" dat is sowieso fout. Zorg voor een juiste datamodellering. Neem in de tabel producten een einddatum op, dat is beter dan non-actief. In de tabel prijs neem je ook een einddatum op (datum_tot) deze laat je leeg (NULL) totdat er een prijsverhoging ingevoerd wordt. Op deze manier kan je altijd je facturen opnieuw genereren. Overigens wordt de belasting daar niet vrolijk van, opnieuw genereren is manipuleerbaar. De belasting ziet liever een pdf opgeslagen in je document management boekhoudsysteem of in een tabel of op storage of alles in de tabel factuurregels zoals Bart ongeveer voorstelt.

Reageren