powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с организацией таблиц для хранения денег
32 сообщений из 32, показаны все 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
Помогите с организацией таблиц для хранения денег
    #39720014
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент?

Хотя сам понял что так и есть.
К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах.
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39720028
Фотография конечно Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинkormot И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент?

Хотя сам понял что так и есть.
К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах.

В катастрофоустойчивом режиме? (шутка)
...
Рейтинг: 0 / 0
Помогите с организацией таблиц для хранения денег
    #39720147
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Товарищи!

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

Хотя сам понял что так и есть.
К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах.

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

Хотя сам понял что так и есть.

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

К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах.

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

Внесение реальных средств может быть по нескольким сценариям:
1. Авторизованный пользователь кладёт средства себе на счёт, чтобы в дальнейшем их пользовать.
2. Авторизованный пользователь оплачивает услугу на сайте используя реальные средства (не списыванимем со своего счёта)
3. Неавторизованный пользователь решает закинуть денег на сайт на определённую услугу не желая регистрироваться и в дальнейшем участвовать в судьбе внесённых средств.

Сценарии может будут и ещё, мне сейчас вот что понять. Как я начал разбираться с платёжными сервисами Я.Деньги всякие, пайпалы и т.п. В них всех создаётся запрос на оплату, т.е. формируется некий ключ транзакции и уже в случае реального проведения платежа клиентом, эта транзакция по ключу подтверждается платёжным сервисом.
Таким образом моему приложению необходимо когда клиент хочет внести денег, сперва создать уникальный ключ транзакции и в БД его сохранить. Также для последующего распределения подтверждённого платежа, мне надо в БД сохранить цель для данной транзакции (типа на счёт такого-то пользователя, от такого-то пользователя за такую-то услугу, и просто от кого-то на такой-то сервис). Как это стоит реализовывать в БД?

В топике про антипаттерны проектирования, прочитал что моветон использовать всякие константы в полях таблиц, на основе которых становится понятно с чем джойнить таблицу. И вот я в сомнениях хороший ли это вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
TABLE transaction_request (
   id      SERIAL PRIMARY KEY,
payType ENUM("user.balance", "user.buy", "anon.invest"),
  tKey   CHAR(128) UNIQUE,
  tState TINYINT NOT NULL DEFAULT 0,
  userID  BIGINT UNSIGNED NOT NULL,
  buyOrderID BIGINT UNSIGNED NOT NULL,
  amount DECIMAL(12,6) NOT NULL DEFAULT 0
)


И в этой таблице соответственно userID и buyItemID - могут быть 0 и уже при подтверждении транзакции на основе payType уже или в входящие транзакции пополнения баланса пользователя (пополнение баланса), или и пополнение баланса и оплата за покупку (оплата за что-то), или просто в таблицу с внесениями денег за определённую услугу.

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


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