El uso de números enteros y que requiere la multiplicación vs usando decimales como un tipo de datos - ¿cuáles son sus pensamientos?

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

Pregunta

¿Cuáles son sus pensamientos sobre esto? Estoy trabajando en la integración de algunos de los nuevos datos que están en un formato de texto delimitado por tabuladores, y todas las columnas decimales se mantienen como enteros individuales; con el fin de determinar la cantidad decimal es necesario multiplicar el número por 0,01. Esto se hace para cosas como porcentajes, el peso y el precio. Por ejemplo, el precio de un artículo se expresa como 3259 en los archivos de datos, y cuando quiero mostrar que me tendría que multiplicar el fin de obtener la cantidad "real" de 32.59.

¿Crees que esto es una buena o mala idea? Debería ser de mantenimiento de mi estructura de datos idéntica a la proporcionada por el vendedor, o debería hacer que las columnas de la base verdaderos decimales y utilizar SSIS o algún tipo de proceso de ETL se multipliquen de forma automática las columnas de tipo entero en su equivalente decimal? En este punto no he decidido si voy a utilizar un ORM o procedimientos almacenados o lo que para recuperar los datos, por lo que estoy tratando de pensar a largo plazo y decidir qué método utilizar. Podría también fácilmente con sólo manejar esto de código de un DTO o similares, algo a lo largo de las líneas de:

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

Pero eso parece un trabajo extra e innecesaria por parte de una clase. ¿Cómo le acercarse a este, teniendo en cuenta que los datos se proporciona en el formato entero por un proveedor que va a regular necesita para obtener las actualizaciones.

¿Fue útil?

Solución

"¿Usted piensa que esto es una buena o mala idea?"

Bad.

"¿Debo estar manteniendo mi estructura de datos idéntica a la proporcionada por el vendedor?"

No.

"¿Debo hacer las columnas de base de datos decimales verdaderos?"

Sí.

Es mucho más sencillo de hacer lo que es correcto. Actualmente, los datos se transmiten sin "" para separar los números enteros de los decimales; Eso no significa ningún significado real.

Los datos es decimal. matemáticas decimal funciona. Usar la matemática decimal recibida por su lengua y la base de datos. No invente su propia versión de la aritmética decimal.

Otros consejos

En lo personal me gustaría mucho prefieren tener los datos almacenados correctamente en mi base de datos y sólo hacer una simple conversión cada vez que una actualización entra en acción.

pedante: que no se mantienen tan bien enteros. Son cadenas que requieren análisis.

Philisophically: usted tiene información en el archivo y se debe escribir datos en la base de datos. Eso significa que la transformación de la información en cualquier forma necesaria para que sea significativa / utilidad. Si no lo hace frente a transformar, a continuación, se le condenan para repetir la transformación a través de todos los consumidores de la base de datos.

Hay algunas situaciones en las que no se les permite transformar los datos, tales como ser capaz de responder a la pregunta: "¿Qué había en el archivo". Esos escenarios requerirían que los datos sean escritos como cadena -. Si el análisis sintáctico no, usted no tendría una representación exacta del archivo

En mi mente la faceta más importante de la utilización decimal más de Int en este escenario es el mantenimiento.

Los datos almacenados en las tablas deben ser claramente significativa sin necesidad de manipulación arbitraria. Si se requiere la manipulación es debería ser evidente claramente que es (como a partir del nombre de campo).

recientemente que se ocupó de datos donde se almacenan los días de la semana, ya que los valores 2-8. No se puede imaginar la caída a cabo esto provocó (pruebas no se presentó el problema para una variedad de razones, pero su uso en vivo causó explosiones políticas).

Si alguna vez se queda en una situación de este tipo, me gustaría tener la certeza absoluta de asegurar que los datos no se pueden escribir o leer de la mesa sin el uso de procedimientos almacenados o vistas. Esto le permite asegurar la manipulación necesaria tanto se aplica y documentado. Si usted no tiene tanto de estos, hay un pobre cabrón que te siga en el futuro va a maldecir a su propio nombre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top