powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с организацией таблиц для хранения денег
25 сообщений из 32, страница 1 из 2
Помогите с организацией таблиц для хранения денег
    #39719607
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день Уважаемые!

Вот в этой теме: Правильная организация таблиц для движений денег. никто не ответил, возможно потому что вопрос напрямую не относится к MySQL, потому задаю его в более подходящей ветке форума.

Итого:
Надо хранить всякие расчётно/денежные данные. Связи не так важны в данном вопросе. Важно вот что:
- Записи будут как про обычные денежные валюты, так и про различные новомодные coin'ы.

Вопросы:
1. Надо ли делать разные таблицы для coin'овых записей и обычных валют?
2. Какой имеет смысл выбрать тип столбцов для хранения сумм: Для обычных валют вроде хватит DECIMAL(15,5), а вот какой стоит выбрать для coin'ов? У них там суммы с кучами значащих цифр, есть ли какой-то достаточный вариант?
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719623
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot,

Вы действительно делаете легальный мультивалютный учет по законам РФ? Тогда вам курить ПБУ 3/2006 «Учет активов и обязательств, стоимость которых выражена в иностранной валюте», и непонятно, зачем точность 15,5.

Или у вас система для внутреннего использования по своим правилам? Тогда вам никто не указ, делайте что хотите. Сколько знаков у coin'ов требуется хранить?
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719626
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot2. Какой имеет смысл выбрать тип столбцов для хранения сумм: Для обычных валют вроде
хватит DECIMAL(15,5)

И для обычных валют и для фантиков можно использовать только целый тип, храня все суммы в
наименьшей возможной единице для данной валюты. То есть для рублей - копейки, для евро -
центы, для биткоинов - сатоши.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719627
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot,

1. Нет, если имеете ввиду справочник валют.
2. Для обычных валют вообще-то 2 знака после запятой. Для криптовалют больше 12 после запятой не видел, но никто не застрахован что завтра появится такая крипта.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719630
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotВопросы:
1. Надо ли делать разные таблицы для coin'овых записей и обычных валют?
2. Какой имеет смысл выбрать тип столбцов для хранения сумм: Для обычных валют вроде хватит DECIMAL(15,5), а вот какой стоит выбрать для coin'ов? У них там суммы с кучами значащих цифр, есть ли какой-то достаточный вариант?

1. Если операции с койнами и валютами одни и те же - нет смысла делать разные таблицы.
2. Возьмите десятичный тип с максимальной разрядностью - это не та тема, на которой надо экономить.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719632
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Нет
2. Проведите анализ имеющихся коинов, определите максимальный размер до и после запятой, прибавьте пару разрядов, выберите соответствующий тип.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719635
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИ для обычных валют и для фантиков можно использовать только целый тип, храня все суммы в
наименьшей возможной единице для данной валюты. То есть для рублей - копейки, для евро -
центы, для биткоинов - сатоши.
Дмитрий, это такое правило неписаное есть? Тут ведь в таком случае я так понимаю надо будет все входящие суммы умножать на какой-то условный 1e15 а исходящие (выводимые из БД клиенту) делить на это же число. Нет ли тут потенциального места для накопления ошибок? И в принципе на каждый чих дополнительные арифметические действия делать надо.
Cane Cat FisherТогда вам курить ПБУ 3/2006
Погляжу. Спасибо за ссылку на документ. Хотелось бы конечно чтобы вышло не для личного пользования система :)
Злой Бобресли имеете ввиду справочник валют. Нет, не справочник валют. А например список транзакций, но транзакции в разных валютах. Т.е. типа такого:
Код: sql
1.
2.
3.
4.
5.
TABLE transaction (
   id      SERIAL,
  amount DECIMAL(25,15),
  currID   INT UNSIGNED NOT NULL
)


Т.е. сумма и указатель на валюту в которой эта сумма.

Спасибо всем за нет для пункта №1.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719639
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherВы действительно делаете легальный мультивалютный учет по законам РФ?
Прочитав начало документа наткнулся сразу на такие формулировки:
.....в рубли должен производиться на дату совершения операции в иностранной валюте, а также на отчетную дату.
Таблица текущих курсов валют у меня в схеме запланирована, но вместе с тем я так понимаю должно быть сохранено состояние курсов на дату совершения транзакции в валюте. И у меня тут конечно сразу возникает вопрос, а как лучше организовывать связь транзакции с курсом?
По дате? Курсы же устанавливаются на дату и в документе говорится о дате а не о моменте. Т.е. потом связывать условно по
Код: sql
1.
JOIN kurs_history ON kurs_history.date=transaction.date

или лучше курс хранить прямо в транзакции типа:
Код: sql
1.
2.
3.
4.
5.
6.
TABLE transaction (
   id      SERIAL,
  amount DECIMAL(25,15),
  currID   INT UNSIGNED NOT NULL,
  dateKurs DECIMAL(25,15)
)
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719700
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злой Бобр2. Для обычных валют вообще-то 2 знака после запятой. Для криптовалют больше 12 после запятой не видел, но никто не застрахован что завтра появится такая крипта.Для криптомусора более актуально 12+ знаков до запятой, чем после. Особенно, если с таблицей будет работать робот, а не только человек.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719735
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotТаблица текущих курсов валют у меня в схеме запланирована
Таблица текущих курсов - вещь сомнительной полезности, эту функцию при необходимости может выполнять view.
Но в таблице курсов, конечно, помимо ссылок на базовую и производную валюты должна быть дата/время курса и его тип (типов курсов довольно много).

kormotПо дате? Курсы же устанавливаются на дату и в документе говорится о дате а не о моменте.
Смотря какие курсы.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719783
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинkormotПо дате? Курсы же устанавливаются на дату и в документе говорится о дате а не о моменте.
Смотря какие курсы.
Очень немногие.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719804
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Кот Матроскинпропущено...

Смотря какие курсы.
Очень немногие.
"Очень немногие" что? :) имеют привязку ко времени или не имеют?
И "очень немногие" - это странная постановка вопроса, если хоть один из нужных типов курсов имеет оную привязку - ее надо закладывать в структуру.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719811
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot,

А в MySQL нету специального типа для хранения денежных сумм money или currency? У него 4 знака после запятой, и он специально под хранение денежных сумм предназначен.
Хотя если надо хранить миллионные доли всяких figcoin-ов, тогда не подойдёт.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719816
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин982183пропущено...
Очень немногие.
"Очень немногие" что? :) имеют привязку ко времени или не имеют?
И "очень немногие" - это странная постановка вопроса, если хоть один из нужных типов курсов имеет оную привязку - ее надо закладывать в структуру.
А что у нас по датам? кроме ЦБ ничего и не помню.
А вся биржа работает с гораздо большей дискретностью, но явно не нужной в подобных задачах.
Тут важен курс сделки, а он может сильно отличаться от чего угодно.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotДмитрий, это такое правило неписаное есть?

Это такой опыт поколения автоматизаторов бухгалтерии, "сын ошибок трудных".

kormotТут ведь в таком случае я так понимаю надо будет все входящие суммы умножать
на какой-то условный 1e15 а исходящие (выводимые из БД клиенту) делить на это же число.

Ни делить ни умножать не надо. Это всего лишь вопрос в какую позицию втыкать десятичный
разделитель при преобразовании в строку и обратно.

kormotНет ли тут потенциального места для накопления ошибок?
Нет.

kormotИ в принципе на каждый чих дополнительные арифметические действия делать надо.

Не надо. Вся арифметика производится в целых числах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719848
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Кот Матроскинпропущено...

"Очень немногие" что? :) имеют привязку ко времени или не имеют?
И "очень немногие" - это странная постановка вопроса, если хоть один из нужных типов курсов имеет оную привязку - ее надо закладывать в структуру.
А что у нас по датам? кроме ЦБ ничего и не помню.

Многие биржи проводят дневной фиксинг - именно для целей определения курса при всяких там отложенных конвертациях. Например, договор у вас в долларах, реальная оплата происходит в тугриках (требование законодательства) через 5 дней после поставки. Чтобы определить, сколько же тугриков должен контрагент, в договоре указывается "...по курсу LSE (на самом деле - некоему конкретному типу курса LSE) на день оплаты".
Но с койнами, курс которых меняется на сотни процентов за день, вряд ли такой тип конвертаций будет сильно востребован :)
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719852
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovkormotДмитрий, это такое правило неписаное есть?

Это такой опыт поколения автоматизаторов бухгалтерии, "сын ошибок трудных".

А можно хоть одно преимущество этого способа по сравнению с десятичным типом?
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719855
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинА можно хоть одно преимущество этого способа по сравнению с десятичным типом?

Не нужно думать сколько цифр после запятой надо выделять в numeric. Поэтому можно
складывать в одно поле биткоины с их восемью знаками после запятой и какие-нибудь йены с
их десятью знаками перед запятой не боясь, что точности не хватит.

И можно не волноваться о внутреннем представлении numeric в конкретной СУБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719870
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКот МатроскинА можно хоть одно преимущество этого способа по сравнению с десятичным типом?

Не нужно думать сколько цифр после запятой надо выделять в numeric.

Но придется думать о "наименьшей возможной единице для данной валюты", что, вообще говоря, гораздо сложнее, чем
просто выделить максимальный разряд в numeric.

Dimitry SibiryakovИ можно не волноваться о внутреннем представлении numeric в конкретной СУБД.

А зачем о нем волноваться?
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719886
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинА можно хоть одно преимущество этого способа по сравнению с десятичным типом?

Храня деньги в типах с запятой, приходится быть более внимательным, чтобы где-нибудь (в хранимых процедурах, либо на клиенте) не столкнуться с классическим свинством машинной арифметики, вроде того что есть 0.10 руб, раздаешь их по какому-то алгоритму, отнимаешь от него в цикле 10 раз по 0.01 руб, а оно либо остается не ноль, либо вовсе на последнюю итерацию не хватает.

Оно все решаемо грамотным округлением, и сам я не сторонник столь радикальных мер, как хранить все в Integer, просто об этом надо постоянно помнить.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719915
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher, Кот Матроскин, Dimitry Sibiryakov - Уважаемые, спасибо за полезную информацию.

Я думаю что хранить в целом не буду, потому как в любом случае для этого надо исходные данные до БД умножать на какую-то базу условную 1e15, а если потом окажется что надо было больше базу брать? Да и BIGINT - это 20 знаков, при базе в 1e15 остаётся все то 5 разрядов. Таким макаром не получится в одной таблице целочисленно хранить и какие-нибудь миллиардные беларусские рубли и койны с большим количеством знаков после запятой.
А если у DECIMAL'а надо будет больше разрядов, то увеличить их не составит труда.

Опыт "копеечных" проблем у меня уже есть, на эти грабли наступал, проблемы вылазили и я с ними в итоге справился, с тех пор отошёл от float'а на DECIMAL и при округлениях делаю всё корректно. Так что думаю что остановлюсь
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719924
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинА зачем о нем волноваться?

Затем, что оно внезапно может оказаться с плавающей запятой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719934
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotи какие-нибудь миллиардные беларусские рубли

Обижаете :)
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719940
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherОбижаете :)
Очень кстати подметили текущий курс. Я помню что не так давно в Беларуссии (через А намеренно, национальный колорит :)) курс был дикий. И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент?

Хотя сам понял что так и есть.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39719951
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotнадо ли как-то девальвации в базе оформлят

Надо. Проще всего - заведением новой валюты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с организацией таблиц для хранения денег
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]