Mit ganzen Zahlen und erfordern Multiplikation vs. Dezimalzahlen als Datentyp verwenden - was sind Ihre Gedanken?

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

Frage

Was sind Ihre Gedanken dazu? Ich arbeite ein paar neue Daten über die Integration, die in einem getabulatortrennte Textformat ist, und alle die Dezimalspalten werden als einzelne Zahlen gehalten; um die Dezimal-Menge zu bestimmen, müssen Sie die Nummer von 0,01 multiplizieren. Er tut dies für Dinge wie Prozent, Gewicht und Preisinformationen. Zum Beispiel kann ein Preis des Artikels wird als 3259 in den Datendateien ausgedrückt, und wenn ich es angezeigt werden soll würde ich es, um sich vermehren müssen die „echten“ Menge an 32.59 zu erhalten.

Glauben Sie, das eine gute oder schlechte Idee? Soll ich meine Datenstruktur identisch mit dem vom Hersteller zur Verfügung gestellt werden, zu halten, oder soll ich die Datenbankspalten wahre Dezimalstellen herzustellen und verwenden SSIS oder irgendeine Art von ETL-Prozess, um automatisch die Integer-Spalten in ihre Dezimaläquivalents zu multiplizieren? An dieser Stelle haben sich entschieden, ich nicht, ob ich ein ORM oder Stored Procedures verwenden werde, oder was die Daten abzurufen, so versuche ich, langfristig zu denken und entscheiden, welcher Ansatz zu verwenden. Ich könnte auch dies leicht handhabe nur in Code von einem DTO oder ähnlich, etwas entlang der Linien von:

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

Aber das scheint wie zusätzliche und unnötige Arbeit seitens einer Klasse. Wie würden Sie diesen Ansatz, wenn man bedenkt, dass die Daten im Integer-Format von einem Anbieter zur Verfügung gestellt wird, die Sie regelmäßig Updates erhalten müssen aus.

War es hilfreich?

Lösung

„Glaubst du, das ist eine gute oder schlechte Idee?“

Bad.

„Soll ich meine Datenstruktur identisch mit dem vom Anbieter zur Verfügung gestellt werden, zu halten?“

Nein.

„Soll ich die Datenbankspalten wahr Dezimalstellen machen?“

Ja.

Es ist so viel einfacher zu tun, was richtig ist. Derzeit werden die Daten ohne übertragen „“ die ganzen Zahlen von den Dezimalstellen zu trennen; dass keine wirkliche Bedeutung.

Die Daten sind dezimal. Dezimal Mathematik funktioniert. Verwenden Sie die Dezimal-Mathematik durch Ihre Sprache und Datenbank zur Verfügung gestellt. Sie nicht Ihre eigene Version von Dezimalarithmetik erfinden.

Andere Tipps

Persönlich würde ich viel lieber die Daten korrekt in der Datenbank gespeichert haben und tun nur eine einfache Konvertierung jedes Mal ein Update kommt.

Pedantisch: sie werden nicht als Ints entweder gehalten. Sie sind Zeichenfolgen, die Parsing erforderlich.

Philisophically: Sie haben Information in der Datei und Sie sollten schreiben Daten in die Datenbank. Das bedeutet, dass die Informationen in jeder Hinsicht Umwandlung notwendig, um es sinnvoll / nützlich zu machen. Wenn Sie diese Transformation vorne nicht tun, dann werden Sie zum Scheitern verurteilt sein, um die Transformation in allen Konsumenten von der Datenbank zu wiederholen.

Es gibt einige Szenarien, in denen es nicht erlaubt ist, die Daten zu transformieren, wie in der Lage, die Frage zu beantworten: „Was in der Datei war“. Diese Szenarien würden die Daten erfordern als String geschrieben werden -. Wenn der Parse fehlgeschlagen ist, würden Sie nicht eine genaue Darstellung der Datei

In meinem Kopf die wichtigste Facette Dezimal über Int in diesem Szenario zu verwenden, ist die Wartbarkeit.

Die Daten in den Tabellen gespeichert sollen, ohne dass eine willkürliche Manipulation eindeutig sinnvoll sein. Wenn Manipulation erforderlich ist, sollte klar ersichtlich sein, dass es (wie aus dem Feldnamen) ist.

Ich habe vor kurzem mit Daten befasst, wo die Wochentage gespeichert wurden als 2-8-Werte. Sie können der Sturz aus dieser nicht vorstellen, verursacht (Prüfung nicht das Problem für eine Vielzahl von Gründen zeigte, aber Live-Einsatz politische Explosionen verursacht).

Wenn Sie jemals in einer solchen Situation führen, würde ich absolut sicher sein, Daten gewährleisten kann nicht auf oder aus der Tabelle ohne Verwendung von gespeicherten Prozeduren oder Sichten gelesen werden. Dies ermöglicht Ihnen, die notwendige Manipulation zu gewährleisten, sowohl erzwungen und dokumentiert. Wenn Sie diese beiden nicht haben, einige arme Sau, die Sie in der Zukunft folgt Ihren Namen sehr verfluchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top