Мне интересно, какой лучший тип для поля цены в SQL Server для магазина-подобной структуры?
Рассматривая этот обзор, у нас есть типы данных, называемые деньгами, 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)
- Float: 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 fields? что они будут передавать в С#/. NET?
Любые плюсы и минусы? Пойдите для целых цен или smallmoney или некоторых других?
Что говорит ваш опыт?