хочу посоветоваться
Есть сущность Баланс. Есть сущность Валюта => храним на балансах валюты - криптовалюту, рублевую и т.п.
У криптовалюты максимально 18 знаков после запятой, у рублевой 2.
Как лучше хранить большие числа?
В истинном человеческом формате longText типа 0.00000000008 BTC и 18.45 RUB
Или ВСЮ валюту хранить строкой типа 8 * 10^18 и 1845 * 10^16
https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html
Не longText, а decimal По хорошему интом, но я так понимаю BTС интом особо не похранишь, хотя может в bigint влезет.
в bigint не влезет
Самая большая на дробную часть все равно btc будет, остальные 2 знака, а некоторые и вообще без знака, например UZS
храни строкой, а вычисления производи через bcmath
Аргументы против Строка занимает 20 байт, а числом 19 бит Не работают индексы
Аргументы за : Проще внедрить в систему
1) наберешь ли ты данных хотя бы мегабайт, чтобы это хоть какой-то эффект дало кроме гомеопатического? 2) зачем индесы на баланс? не особо понимаю кейсы, когда это может пригодиться за исключением одного - показать все счета с количеством денег >= (<=) чем что-то
На стрингах default не поставишь... В коде придется устанавливать... Хотя это не проблема
Вообще там не только балансы будут а транзакции
Индексы не аргумент, т.к. колонку с балансом врядли ты будешь индекстровать. А вот то что агрегирующие функции не будут работать с строкой может и боль. А decimal разве не потянет btc? Это же внутренний формат базы данных и там может быть и влезет.
а при чем тут транзакция и индекс?
транзакция как сущность - в смысле операция финансовая а не транзакция БД
Decimal - то потянет, если хранить дробную часть. Прошлый разработчик был против дробной части в БД и поэтому сделал все на целочисленных int с коэфф (сколько знаков забрать на запятую) сейчас мы уперлись в слишком низкий потолок знаков
Обсуждают сегодня