En utilisant des nombres entiers et nécessitant la multiplication par rapport à l'aide décimaux comme un type de données - quelles sont vos pensées?

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

Question

Que pensez-vous à ce sujet? Je travaille sur l'intégration de nouvelles données qui sont dans un format de texte délimité par des tabulations, et que toutes les colonnes décimales sont conservés comme simples entiers; afin de déterminer la quantité décimale vous devez multiplier le nombre par .01. Elle le fait pour des choses comme les pourcentages, le poids et l'information sur les prix. Par exemple, le prix d'un article est exprimé en 3259 dans les fichiers de données, et quand je veux afficher je besoin de multiplier afin d'obtenir le montant « réel » de 32.59.

Pensez-vous que cela est une bonne ou mauvaise idée? Dois-je garder ma structure de données identique à celui fourni par le vendeur, ou devrais-je faire les colonnes de base de données vraies et décimales utiliser SSIS ou une sorte de processus ETL pour multiplier automatiquement les colonnes entières dans leur équivalent décimal? À ce stade, je ne l'ai pas décidé si je vais utiliser un ORM ou des procédures stockées ou quoi récupérer les données, donc je suis en train de penser à long terme et décider de l'approche à utiliser. Je pourrais aussi facilement juste gérer cela dans le code d'un DTO ou similaire, quelque chose le long des lignes de:

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

Mais cela semble être un travail supplémentaire et inutile de la part d'une classe. Comment aborderez-vous cela, en gardant à l'esprit que les données sont fournies dans le format entier par un fournisseur que vous aurez besoin régulièrement pour obtenir des mises à jour de.

Était-ce utile?

La solution

« Pensez-vous que cela est une bonne ou mauvaise idée? »

Bad.

« Dois-je garder ma structure de données identique à celui fourni par le vendeur? »

Non.

« Dois-je faire les colonnes de base de données vraies décimales? »

Oui.

Il est tellement plus simple de faire ce qui est juste. À l'heure actuelle, les données sont transmises sans « » pour séparer les nombres entiers à partir des décimales; qui n'a pas de signification réelle.

Les données sont décimales. fonctionne les mathématiques décimales. Utilisez le calcul fourni par votre décimale la langue et la base de données. Ne pas inventer votre propre version de l'arithmétique décimale.

Autres conseils

Personnellement, je préférerais avoir les données correctement stockées dans ma base de données et juste faire une simple conversion chaque fois qu'une mise à jour vient.

pédante: ils ne sont pas conservés comme ints non plus. Ils sont des chaînes qui nécessitent l'analyse syntaxique.

Philisophically: vous avez informations dans le fichier et vous devez écrire données dans la base de données. Cela signifie transformer les informations de toutes les manières nécessaires pour le rendre utile / utile. Si vous ne faites pas cette transformation à l'avant, alors vous serez condamné à répéter la transformation à travers tous les consommateurs de la base de données.

Il y a quelques scénarios où vous n'êtes pas autorisé à transformer les données, par exemple pouvoir répondre à la question: « Ce qui était dans le fichier ». Ces scénarios nécessiteraient les données à écrire sous forme de chaîne -. Si l'analyse a échoué, vous auriez pas une représentation exacte du fichier

Dans mon esprit, l'aspect le plus important de l'utilisation Décimal sur Int dans ce scénario est maintenabilité.

Les données stockées dans les tableaux doivent être clairement significatives sans nécessiter de manipulation arbitraire. Si la manipulation est nécessaire est devrait être clairement qu'il est (comme le nom du champ).

J'ai récemment eu affaire à des données où les jours de la semaine ont été stockés sous forme de valeurs 2-8. Vous ne pouvez pas imaginer la chute ce fait (le test ne montre pas le problème pour diverses raisons, mais l'utilisation en direct a causé des explosions politiques).

Si vous ne jamais courir dans une telle situation, je serais absolument certain d'assurer que les données ne peuvent pas être écrites ou lues à partir de la table sans utiliser des procédures stockées ou des vues. Cela vous permet d'assurer la manipulation nécessaire est à la fois appliquée et documentée. Si vous ne possédez pas ces deux, un pauvre gazon qui vous suit dans l'avenir maudire votre nom même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top