Quando insegui qualcosa come la cronologia dei prezzi, nel mio database relazionale, qual è il modo consigliato per archiviare le modifiche dei prezzi? Ad esempio posso:
- mantenere solo gli eventi di modifica del prezzo (ovvero una singola data che indica che è stato inserito un nuovo prezzo). Una data per un record storico dei prezzi. alias
price_change_date
o
- mantieni
effective_price_start_date
eeffective_price_end_date
(alias, quando inserisci un nuovo prezzo, il vecchio record ottiene e aggiorna la "data di fine", e il nuovo record ottiene la data corrente come "data di inizio" enull
(?) per "fine Data"). Sono due date per ogni record della cronologia dei prezzi.
Penso che il primo approccio - mantenere solo il singolo record di data che significa "questa è la data in cui il prezzo è stato inserito" è sufficiente. E forse un po 'più semplice da mantenere.
Tuttavia, ho visto suggerimenti in altre risposte che raccomandano di mantenere una durata effettiva del prezzo, cioè la data di inizio del prezzo e la data di fine. Ma in questo approccio ci sono complicazioni come
- Cosa succede se voglio tornare ai prezzi precedenti? Creo solo un nuovo record con lo stesso valore di prezzo ma date diverse?
- Ora ho a che fare con problemi d'angolo come - Ho appena inserito un nuovo prezzo, cosa posso inserire per una data di fine effettiva quando è indeterminato? Inserisco
null
e poi lo interpreto come "attualmente attivo"?
Ci sono problemi specifici che dovrei affrontare se scelgo di seguire il primo approccio (una colonna di date) piuttosto che il secondo approccio (due colonne di date per record)
Obiettivo
L'obiettivo è scopi di controllo e domande dei clienti. Ad esempio, la HR chiede cosa abbiamo addebitato per la parte X nel gennaio 2015? Come lo scopriamo?
Oppure il cliente dice perché mi stai facendo pagare $ 200 in più rispetto allo scorso anno quando ti ho ordinato? Le vendite possono tornare indietro e dire oh sì, abbiamo cambiato il prezzo a dicembre per questo o quel motivo.
Come avvengono i cambiamenti - dire che HR dirige che a gennaio dovremmo addebitare $ 100 per la parte X, ma a partire da febbraio addebitiamo $ 200.