Utilizzando numeri interi e che richiedono la moltiplicazione vs utilizzando decimali come tipo di dati - quali sono i tuoi pensieri?

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

Domanda

Quali sono i tuoi pensieri su questo? Sto lavorando sull'integrazione di alcuni nuovi dati che è in un formato di testo delimitato da tabulazioni, e tutte le colonne decimali sono tenuti come singoli numeri interi; al fine di determinare l'importo decimale è necessario moltiplicare il numero per .01. Lo fa per le cose come le percentuali, il peso e le informazioni sui prezzi. Ad esempio, il prezzo di un oggetto è espressa come 3259 nei file di dati, e quando voglio visualizzarlo avrei bisogno di moltiplicare al fine di ottenere l'importo "reale" di 32.59.

Pensi che questo sia un bene o un male idea? Dovrei mantenere la mia struttura dati identico a quello fornito dal venditore, o dovrei fare le colonne del database veri decimali e utilizzare SSIS o una sorta di processo di ETL per moltiplicare automaticamente le colonne intere nel loro equivalente decimale? A questo punto non ho ancora deciso se ho intenzione di usare un ORM o stored procedure o quello che per recuperare i dati, quindi sto cercando di pensare a lungo termine e decidere quale approccio da utilizzare. Potrei anche facilmente solo gestire questo in codice da una DTO o simile, qualcosa sulla falsariga di:

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

Ma che sembra come il lavoro supplementare e inutile da parte di una classe. Come ci si avvicina questo, tenendo presente che i dati sono forniti in formato intero da un fornitore che sarà regolarmente necessario per ottenere gli aggiornamenti.

È stato utile?

Soluzione

"Pensi che questa sia una buona o cattiva idea?"

Bad.

"Dovrei mantenere la mia struttura dati identica a quella fornita dal venditore?"

No.

"Devo fare le colonne del database veri decimali?"

Sì.

E 'molto più semplice di fare ciò che è giusto. Al momento, i dati vengono trasmessi senza "" per separare i numeri interi dai decimali; che non lo fa alcun significato reale.

I dati sono decimale. matematica decimale funziona. Utilizzare la matematica decimale fornito dalla vostra lingua e il database. Non inventare la propria versione di aritmetica decimale.

Altri suggerimenti

Personalmente preferirei di gran lunga avere i dati memorizzati correttamente nel mio database e fare solo una semplice conversione ogni volta che un aggiornamento è disponibile in.

pedanteria: essi non sono tenuti come int sia. Essi sono stringhe che richiedono analisi.

Philisophically: hai informazioni nel file e dati che si dovrebbe scrivere nel database. Ciò significa trasformare le informazioni in alcun modo necessarie per renderla significativa / utile. Se non si fa questo fronte trasformare, allora sarete condannati a ripetere la trasformazione in tutti i consumatori del database.

Ci sono alcuni scenari in cui non è permesso di trasformare i dati, come l'essere in grado di rispondere alla domanda: "Qual è stato nel file". Quei scenari richiederebbero i dati da scrivere come stringa -. Se il parse fallito, non si avrebbe una rappresentazione accurata del file

Nella mia mente l'aspetto più importante di usare decimale sopra Int in questo scenario è la manutenibilità.

I dati memorizzati nelle tabelle devono essere chiaramente significative, senza necessità di manipolazione arbitraria. Se la manipolazione è richiesto è dovrebbe essere evidente che è (ad esempio dal nome del campo).

Recentemente ho avuto a che fare con i dati in cui i giorni della settimana sono stati memorizzati come valori 2-8. Non potete immaginare la caduta fuori questo ha causato (test non ha mostrato il problema per una serie di motivi, ma l'uso dal vivo ha causato esplosioni politici).

Se mai eseguito in una situazione del genere, sarei assolutamente certi di garantire che i dati non possono essere scritti o letti dal tavolo senza utilizzo di stored procedure o viste. Ciò consente di garantire la manipolazione necessaria è sia applicata e documentata. Se non si dispone di entrambi questi, qualche povero zolle che ti segue in futuro maledirà il tuo stesso nome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top