Usando números inteiros e exigindo multiplicação vs. usando decimais como um tipo de dados - quais são seus pensamentos?

StackOverflow https://stackoverflow.com/questions/533951

Pergunta

Quais são seus pensamentos sobre isso? Eu estou trabalhando na integração de alguns dados novos que estão em um formato de texto delimitado por tabulações, e todas as colunas decimais são mantidos como inteiros individuais; a fim de determinar a quantidade decimal você precisa multiplicar o número por 0,01. Ele faz isso para coisas como percentagens, peso e informações sobre preços. Por exemplo, o preço de um item é expresso como 3259 nos arquivos de dados, e quando eu quero mostrar que eu preciso multiplicá-lo, a fim de obter a quantidade "real" de 32.59.

Você acha que esta é uma boa ou má idéia? Eu deveria estar mantendo minha estrutura de dados idêntico ao fornecido pelo fornecedor, ou devo tornar as colunas de banco de dados verdadeiros decimais e uso do SSIS ou algum tipo de processo de ETL para automaticamente se multiplicam as colunas inteiras em seu decimal equivalente? Nesse ponto, eu não decidi se vou usar um ORM ou procedimentos armazenados ou o que para recuperar os dados, então eu estou tentando pensar a longo prazo e decidir qual abordagem ao uso. Eu também poderia facilmente apenas lidar com isso no código de um DTO ou similar, algo ao longo das linhas de:

public class Product
{
    // ...
    private int _price;
    public decimal Price
    {
        get
        {
            return (this._price * .01);
        }
        set
        {
            this._price = (value / .01);
        }
    }
}

Mas isso parece trabalho extra e desnecessário por parte de uma classe. Como você abordaria isso, tendo em mente que os dados são fornecidos no formato inteiro por um fornecedor que você regularmente vai precisar para obter atualizações de.

Foi útil?

Solução

"Você acha que isso é uma boa ou má idéia?"

Bad.

"Eu deveria estar mantendo minha estrutura de dados idêntico ao fornecido pelo fornecedor?"

Não.

"Devo fazer as colunas de banco de dados verdadeiros decimais?"

Sim.

É muito simples de fazer o que é certo. Atualmente, os dados são transmitidos sem "" para separar os números inteiros dos decimais; que não faz qualquer significado real.

Os dados são decimal. obras de matemática decimal. Use a matemática decimal fornecido pelo seu idioma e banco de dados. Não invente sua própria versão de Decimal aritmética.

Outras dicas

Pessoalmente, eu prefiro muito mais ter os dados armazenados corretamente no meu banco de dados e apenas fazer uma simples conversão cada vez que uma atualização vem em.

pedante: eles não são mantidos como ints também. Eles são cadeias que requerem análise.

Philisophically: você tem informações no arquivo e você deve escrever dados no banco de dados. Isso significa transformar a informação em todas as maneiras necessárias para torná-lo significativo / útil. Se você não fizer isso frente transformar-se, então você vai ser condenado a repetir a transformação em todos os consumidores de banco de dados.

Existem algumas situações em que você não tem permissão para transformar os dados, tais como ser capaz de responder à pergunta: "O que estava no arquivo". Esses cenários exigiria que os dados sejam escritos como string -. Se a análise falhou, você não teria uma representação precisa do arquivo

Em minha mente a faceta mais importante do uso de Decimal sobre Int neste cenário é de manutenção.

Os dados armazenados nas tabelas devem ser claramente significativa sem necessidade de manipulação arbitrária. Se a manipulação é necessário é deve ser claramente evidente que é (como do nome do campo).

Recentemente, tratou de dados onde os dias da semana foram armazenados como valores 2-8. Você não pode imaginar a queda fora isso causou (o teste não mostrar o problema para uma variedade de razões, mas o uso ao vivo fez causar explosões políticos).

Se você nunca correr em tal situação, um, eu seria absolutamente determinados a garantir que os dados não podem ser escritos ou lidos a partir da mesa sem uso de procedimentos armazenados ou vistas. Isso permite que você para garantir a manipulação necessária é tanto forçada e documentado. Se você não tem esses dois, alguns pobre moço que te segue no futuro vai amaldiçoar o seu próprio nome.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top