Io e un paio di colleghi stiamo discutendo sul seguente caso:
In una tabella OrderStatus
teniamo traccia di tutti gli stati che un ordine attraversa nel tempo, inclusi "Pending"
, "Available"
, "Returned"
, ecc. C'è un campo timestamp nella tabella per tenere traccia di quando ogni stato è stato aggiunto. Tuttavia, ci sono due stati che possono essere aggiunti esattamente allo stesso tempo, uno dopo l'altro, nel qual caso entrambi possono avere esattamente lo stesso timestamp (inclusi i millisecondi). In un'altra parte del codice, dobbiamo verificare quale sia l'ultimo stato in cui è stato impostato un ordine, e dal momento che stiamo ordinando in base al timestamp, possiamo facilmente ottenere il record sbagliato dal database.
La tabella ha una chiave primaria IDENTITY(1,1)
, e i miei colleghi pensano che dovremmo ordinare usando quella colonna, dal momento che ti darà sempre l'ultimo record aggiunto alla tabella.
Mi sento come una colonna IDENTITY
dovrebbe essere annullata di qualsiasi significato e quindi non dovrebbe essere usata per alcun ordinamento, e preferirei fare un Thread.Sleep(1)
per assicurarmi che i timestamp siano diversi e possiamo continuare a ordinare usando quel campo .
Quale pensi sia la migliore pratica in questo caso?