Hoi,
Ok, ik heb mijn post compleet opnieuw geschreven, omdat ik tijdens het schrijven ervan op een nieuwe vraag kwam. Here we go:
Ik ben bezig met een webapplicatie waarmee bezoekers producten kunnen zoeken en vergelijken. Bezoekers kunnen op een product_specs pagina een formulier invullen om informatie aan te vragen over dat product bij de leverancier. Voor zo'n aanvraag wordt in de toekomst eventueel een bedrag gerekend aan de leverancier.
Zo'n informatie-aanvraag is dus een item dat momenteel bij de webapplicatie hoort (en meer specifiek, bij een product en een leverancier), maar het hoort ook bij de financiële administratie.
Leveranciers kunnen in de webapplicatie zelf producten invoeren, wijzigen en verwijderen. Als een leverancier een product verwijdert zou ik om de integriteit van de database te behouden ook de bij dat product horende aanvragen moeten verwijderen. Probleem is echter dat ik deze informatie nodig heb (5 jaar lang als ik me niet vergis) voor de financiële administratie. Daarbij wil ik ze ook behouden voor latere analyse.
Wat zal ik doen? Producten en bijbehorende aanvragen helemaal verwijderen is geen optie, dus ik kan
(1) bij een verwijderd product en zijn aanvragen een bit veld 'deleted' op 1 zetten. Als er een leverancier verwijderd wordt, zal ik zelfs en de leverancier, en de producten voor die leverancier en de aanvragen voor de producten op deleted = 1 moeten zetten.
Zo bewaar ik de hele geschiedenis in de webapp database.
(2) een aparte database maken voor de financiële administratie, waarin ik gewoon de hele geschiedenis bewaar. Ik zou verwijderde producten en aanvragen in de webapp database dan verwijderen nadat ik met een dagelijkse job de financiele database geupdate heb.
Het nadeel van optie (1): waarom items die nooit meer gebruikt worden opslaan in mijn webapp database? Performance-wise geen ramp, maar het voelt gewoon niet ok.
Het nadeel van optie (2): Ik zal producten en bijbehorende aanvragen nog steeds niet direct kunnen verwijderen uit de webapp database. Dit kan pas als ik zeker weet dat eventuele informatie-aanvragen die dag voor dat product meegenomen zijn in de dagelijkse job om de financiële database te updaten. Ik zal dus alsnog met een 'deleted' veld moeten gaan werken voor als de aanvragen weg mogen, maar nog niet in de financiële database staan.
Kortom 'de boel bij elkaar houden' of verdelen en heerschen?
ps: laatste optie die ik verzin is realtime updaten van de financiële database. Dus aanvragen voor die dag wegschrijven in de financiele database en daarna verwijderen uit de webapp database.
Ok, ik heb mijn post compleet opnieuw geschreven, omdat ik tijdens het schrijven ervan op een nieuwe vraag kwam. Here we go:
Ik ben bezig met een webapplicatie waarmee bezoekers producten kunnen zoeken en vergelijken. Bezoekers kunnen op een product_specs pagina een formulier invullen om informatie aan te vragen over dat product bij de leverancier. Voor zo'n aanvraag wordt in de toekomst eventueel een bedrag gerekend aan de leverancier.
Zo'n informatie-aanvraag is dus een item dat momenteel bij de webapplicatie hoort (en meer specifiek, bij een product en een leverancier), maar het hoort ook bij de financiële administratie.
Leveranciers kunnen in de webapplicatie zelf producten invoeren, wijzigen en verwijderen. Als een leverancier een product verwijdert zou ik om de integriteit van de database te behouden ook de bij dat product horende aanvragen moeten verwijderen. Probleem is echter dat ik deze informatie nodig heb (5 jaar lang als ik me niet vergis) voor de financiële administratie. Daarbij wil ik ze ook behouden voor latere analyse.
Wat zal ik doen? Producten en bijbehorende aanvragen helemaal verwijderen is geen optie, dus ik kan
(1) bij een verwijderd product en zijn aanvragen een bit veld 'deleted' op 1 zetten. Als er een leverancier verwijderd wordt, zal ik zelfs en de leverancier, en de producten voor die leverancier en de aanvragen voor de producten op deleted = 1 moeten zetten.
Zo bewaar ik de hele geschiedenis in de webapp database.
(2) een aparte database maken voor de financiële administratie, waarin ik gewoon de hele geschiedenis bewaar. Ik zou verwijderde producten en aanvragen in de webapp database dan verwijderen nadat ik met een dagelijkse job de financiele database geupdate heb.
Het nadeel van optie (1): waarom items die nooit meer gebruikt worden opslaan in mijn webapp database? Performance-wise geen ramp, maar het voelt gewoon niet ok.
Het nadeel van optie (2): Ik zal producten en bijbehorende aanvragen nog steeds niet direct kunnen verwijderen uit de webapp database. Dit kan pas als ik zeker weet dat eventuele informatie-aanvragen die dag voor dat product meegenomen zijn in de dagelijkse job om de financiële database te updaten. Ik zal dus alsnog met een 'deleted' veld moeten gaan werken voor als de aanvragen weg mogen, maar nog niet in de financiële database staan.
Kortom 'de boel bij elkaar houden' of verdelen en heerschen?
ps: laatste optie die ik verzin is realtime updaten van de financiële database. Dus aanvragen voor die dag wegschrijven in de financiele database en daarna verwijderen uit de webapp database.
[ Voor 12% gewijzigd door Verwijderd op 09-01-2006 22:25 ]