Мне интересно, какой тип цены лучше использовать в SQL Server для структуры магазина?
Глядя на этот обзор у нас есть типы данных, называемые money , smallmoney , тогда у нас есть десятичное / числовое и, наконец, float и real .
Имя, память / использование диска и диапазоны значений:
- Деньги: 8 байтов (значения: от -922 337 203 685 477,5808 до + 922 337 203 685 477,5807)
- Smallmoney: 4 байта (значения: от -214 748,3648 до + 214 748,3647)
- Десятичное число: 9 [по умолчанию, мин. 5] байтов (значения: от -10 ^ 38 +1 до 10 ^ 38 -1)
- Число с плавающей запятой: 8 байтов (значения: -1,79E + 308 до 1,79E + 308)
- Реальный: 4 байта (значения: от -3,40E + 38 до 3,40E + 38)
Действительно ли целесообразно хранить значения цен в этих типах? Как насчет, например. INT
- Int: 4 байта (значения: от -2 147 483 648 до 2 147 483 647)
Допустим, в магазине используются доллары, у них есть центы, но я не вижу, чтобы цены составляли 49,2142342 доллара, поэтому использование большого количества десятичных знаков, показывающих центы, кажется пустой тратой пропускной способности SQL. Во-вторых, большинство магазинов не показывали бы цены около 200.000.000 (по крайней мере, не в обычных интернет-магазинах, если кто-то не пытается продать мне знаменитую башню в Париже)
Так почему бы не пойти на Int?
Int - это быстрое, его всего 4 байта, и вы можете легко делать десятичные дроби, сохраняя значения в центах вместо долларов, а затем делить их при представлении значений.
Другой подход заключается в использовании smallmoney, который также составляет 4 байта, но для этого потребуется вычисление математической части ЦП, где Int - целочисленная мощность ... с другой стороны, вам нужно разделить каждое одиночный исход.
При использовании полей smallmoney / money возникают ли проблемы с валютой в региональных настройках? что они тоже перенесут в C # / .NET?
Есть плюсы / минусы? Перейти на целые цены или мелкие деньги или что-то другое?
Что говорит ваш опыт?