Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pergunta de melhor prática para MySQL:ordem por id ou data?


Se houver existir uma chance de você ter dois adicionados com a mesma data, você provavelmente precisará:
SELECT balance FROM my_table ORDER BY date_added DESC,id DESC LIMIT 1;

(observe a cláusula 'descendente' em ambos os campos).

No entanto, você precisará levar em consideração o que deseja que aconteça quando alguém adicionar uma entrada de ajuste de 2 de fevereiro, que é dada a data 31 de janeiro para garantir que o mês de janeiro esteja completo. Terá um ID maior do que os feitos no dia 1º de fevereiro.

Geralmente, os sistemas de contabilidade funcionam apenas na data. Talvez se você pudesse nos dizer por que a ordem é importante, podemos fazer outras sugestões.

Em resposta ao seu comentário:

Eu daria alguns conselhos - isso é tudo que eu conseguia pensar imediatamente, eu geralmente vomito muito mais "conselhos" com ainda menos incentivo :-) Os dois primeiros, mais relacionados ao banco de dados do que à contabilidade, são:

Primeiro, faça tudo na terceira forma normal e só reverter se e quando você tiver problemas de desempenho. Isso poupará muita angústia com dados duplicados que podem ficar fora de sintonia. Mesmo se você reverter, use gatilhos e outros recursos do DBMS para garantir que os dados não saiam do ritmo.

Por exemplo, se você deseja acelerar suas pesquisas em uma coluna last_name, você pode criar uma coluna upper_last_name (indexada) e usá-la para localizar registros que correspondam ao seu termo de pesquisa já em maiúsculas. Isso quase sempre será mais rápido que a função por linha upper(last_name) . Você pode usar um gatilho de inserção/atualização para garantir que upper_last_name seja sempre definido corretamente e isso incorrerá no custo apenas quando o nome for alterado, não sempre que você pesquisar.

Em segundo lugar, não duplique dados mesmo em tabelas (como seu esquema atual), a menos que você possa usar esses mesmos truques de tipo de gatilho para garantir que os dados não saiam do ritmo. O que seu cliente fará quando você enviar uma fatura em que o saldo final não corresponde ao saldo inicial mais as compras? Isso não vai fazer sua empresa parecer muito profissional :-)

Em terceiro lugar (e isso é mais relacionado à contabilidade), você geralmente não precisa se preocupar com o número de transações ao calcular saldos em tempo real. Isso porque os sistemas contábeis geralmente têm uma função de rolagem no final do ano que redefine os saldos iniciais.

Portanto, você geralmente nunca precisa processar mais de um ano de dados de uma só vez, o que, a menos que você seja o governo dos EUA ou a Microsoft, não é tão oneroso.