tabla - PostgreSQL: ¿Qué tipo de datos se debe usar para la moneda?
tipos de datos en postgresql pdf (4)
Parece que se desaconseja el tipo de Money
como se describe here
Mi aplicación necesita almacenar moneda, ¿qué tipo de datos debo usar? Numérico, dinero o FLOTACIÓN?
Mantengo todos mis campos monetarios como:
numeric(15,6)
Parece excesivo tener tantos decimales, pero si existe la más mínima posibilidad de lidiar con monedas múltiples, necesitará mucha precisión para la conversión. No importa lo que le presente a un usuario, siempre almaceno en dólares estadounidenses. De esa manera, puedo convertir fácilmente a cualquier otra moneda, dada la tasa de conversión del día involucrado.
Si nunca haces otra cosa que una moneda, lo peor aquí es que desperdiciaste un poco de espacio para almacenar algunos ceros.
Tu fuente no es de ninguna manera oficial. Data de 2011 y ni siquiera reconozco a los autores. Si el tipo de dinero era "desaconsejable", PostgreSQL lo diría en el manual, y no es así .
Para obtener una fuente más oficial , lea este hilo en pgsql-general (¡desde esta semana!) , Con declaraciones de los principales desarrolladores, como D''Arcy JM Cain (autor original del tipo de dinero) y Tom Lane:
Básicamente, el money
tiene sus usos (limitados). La ventaja sobre el numeric
es el rendimiento .
decimal
es solo un alias para numeric
en Postgres.
Respuesta relacionada (y comentarios!) Sobre mejoras en lanzamientos recientes:
Personalmente, me gusta almacenar moneda como un integer
representa Centavos. Eso es más eficiente que cualquier otra de las opciones mencionadas.
Tus elecciones son:
-
integer
: almacenar la cantidad en centavos. Esto es lo que utilizan las transacciones EFTPOS. -
decimal(12,2)
: almacene la cantidad con exactamente dos decimales. Esto es lo que usa el software de libro mayor. -
float
: idea terrible: precisión inadecuada. Esto es lo que usan los desarrolladores ingenuos.
La opción 2 es la más común y más fácil de trabajar. Haga la precisión (12 en mi ejemplo, es decir, 12 dígitos en total) tan grande o pequeña como le sea mejor.
Tenga en cuenta que si agrega varias transacciones que fueron el resultado de un cálculo (por ejemplo, que implica un tipo de cambio) en un único valor que tiene significado comercial, la precisión debe ser mayor para proporcionar un valor macro preciso; Considere usar algo como decimal(18, 8)
para que la suma sea precisa y los valores individuales se puedan redondear a precisión de ciento para mostrar.
Numeric con precisión forzada de 2 unidades. Nunca use float o float como datatype para representar la moneda, porque si lo hace, la gente no estará contenta cuando la cifra final del informe financiero sea incorrecta por + o - unos pocos dólares.
Por lo que puedo ver, el tipo de dinero se deja por razones históricas.