Modo corretto per tracciare l'evoluzione del ranking di alcuni record db

1

Avrò un database di prodotti in cui ad ogni record verrà associato un numero, diciamo, il numero di "vendite".

Aggiornerò periodicamente il database in modo che ogni campo "vendite" per ogni record verrà aggiornato.

Ho bisogno di ordinare questi record in base alle colonne "vendite", in ordine decrescente. Ho bisogno di tracciare la "classifica" di ciascuno di questi record ad ogni aggiornamento del database. Quindi se un record è il numero 1 quando il database è ordinato per "vendite" in ordine decrescente, ho bisogno di memorizzare queste informazioni. Quando aggiorno questo database e quel record ora è il quinto ancora quando il database è ordinato per vendite discendenti, ho bisogno di registrare queste informazioni. Quindi posso ricostruire l'evoluzione della classifica di ogni record.

È chiaro?

Vedo 2 modi per farlo: Per ogni record e su ciascun aggiornamento del database, creare un record di chiave esterna con posizione e data. Il database crescerà molto con ogni aggiornamento poiché ogni record sarà associato a una nuova chiave esterna.

Un altro modo per farlo: non creare un record straniero ma archiviare in qualche modo queste informazioni sul record stesso, non sapendo esattamente come.

Come faresti? Qual è il modo corretto di fare? Questo sistema intende utilizzare un DB postgres.

    
posta Robert Brax 03.11.2017 - 10:16
fonte

2 risposte

0

Alcuni suggerimenti:

  • Non è necessario creare nuovi record per tutti i prodotti ogni volta, devi solo creare per quelli che cambiano la loro posizione in classifica
  • Ho fatto una rapida ricerca e ho scoperto che Postgres ha array e tipo json. Non sono sicuro che tu possa avere una matrice di JSON in un tavolo. Se sì, puoi avere una serie di JSON con posizione in classifica e timestamp all'interno del tuo record. Invia nuovo json a questo array ogni volta che viene modificata la posizione in classifica
  • È inoltre necessario controllare il limite di dimensioni del campo dell'array. Se non corrisponde alle aspettative del tuo sistema, dovrai creare nuovi record di tipi primitivi
  • O ancora usando array di json, ma all'interno di nuovi record. Controlla la dimensione dell'array ogni volta che aggiorni, se la dimensione è al limite creane una nuova con la stessa chiave esterna, spinga il json al suo array, usa un campo index / timestamp per conoscere l'ordine dei record con la stessa chiave esterna
risposta data 03.11.2017 - 19:43
fonte
1

Su ogni aggiornamento o inserto crea un trigger di database. All'interno di tale trigger, cerca l'elemento di vendita principale e memorizza il suo ID in una tabella separata o in qualsiasi luogo desideri archiviarlo con data e posizione. Leggi attivatori qui .

    
risposta data 03.11.2017 - 12:29
fonte