Mysql
 sql >> Database >  >> RDS >> Mysql

Domanda di best practice per MySQL:ordine per ID o data?

Se c'è c'è una possibilità che ne vengano aggiunti due con la stessa data, probabilmente avrai bisogno di:

SELECT balance FROM my_table ORDER BY date_added DESC,id DESC LIMIT 1;

(notare la clausola 'discendente' su entrambi i campi).

Tuttavia, dovrai tenere conto di ciò che vuoi che accada quando qualcuno aggiunge una voce di rettifica del 2 febbraio a cui viene assegnata la data 31 gennaio per garantire che il mese di gennaio sia completo. Avrà un ID maggiore di quelli realizzati il ​​1 febbraio.

In genere, i sistemi contabili funzionano solo sulla data. Forse se potessi dirci perché l'ordine è importante, potremmo dare altri suggerimenti.

In risposta al tuo commento:

Vorrei fornire alcuni consigli:questo è tutto ciò a cui riesco a pensare immediatamente, di solito esprimo molti più "consigli" con ancora meno incoraggiamento :-) I primi due, più relativi al database che alla contabilità, sono:

Innanzitutto, fai tutto nella terza forma normale e ripristinarlo solo se e quando si verificano problemi di prestazioni. Questo ti farà risparmiare un sacco di angoscia con dati duplicati che potrebbero andare fuori fase. Anche se esegui il ripristino, utilizza i trigger e altre funzionalità DBMS per assicurarti che i dati non vadano fuori fase.

Ad esempio, se vuoi velocizzare le tue ricerche su una colonna del cognome, puoi creare una colonna upper_last_name (indicizzata), quindi usarla per individuare i record che corrispondono al tuo termine di ricerca già maiuscolo. Questo sarà quasi sempre più veloce della funzione per riga upper(last_name) . Puoi utilizzare un trigger di inserimento/aggiornamento per assicurarti che upper_last_name sia sempre impostato correttamente e questo comporta il costo solo quando il nome cambia, non ogni volta che esegui la ricerca.

In secondo luogo, non duplicare i dati anche tra tabelle (come il tuo schema attuale) a meno che tu non possa utilizzare quegli stessi trucchi di tipo trigger per garantire che i dati non vadano fuori passo. Cosa farà il tuo cliente quando gli invierai una fattura in cui il saldo finale non corrisponde al saldo iniziale più gli acquisti? Questo non farà sembrare la tua azienda molto professionale :-)

In terzo luogo (e questo è più legato alla contabilità), generalmente non devi preoccuparti del numero di transazioni quando calcoli i saldi al volo. Questo perché i sistemi contabili di solito hanno una funzione di rollover a fine anno che azzera i saldi di apertura.

Quindi di solito non devi mai elaborare più di un anno di dati alla volta che, a meno che tu non sia il governo degli Stati Uniti o Microsoft, non è così oneroso.