|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Добрый день Уважаемые! Вот в этой теме: Правильная организация таблиц для движений денег. никто не ответил, возможно потому что вопрос напрямую не относится к MySQL, потому задаю его в более подходящей ветке форума. Итого: Надо хранить всякие расчётно/денежные данные. Связи не так важны в данном вопросе. Важно вот что: - Записи будут как про обычные денежные валюты, так и про различные новомодные coin'ы. Вопросы: 1. Надо ли делать разные таблицы для coin'овых записей и обычных валют? 2. Какой имеет смысл выбрать тип столбцов для хранения сумм: Для обычных валют вроде хватит DECIMAL(15,5), а вот какой стоит выбрать для coin'ов? У них там суммы с кучами значащих цифр, есть ли какой-то достаточный вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2018, 22:31 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormot, Вы действительно делаете легальный мультивалютный учет по законам РФ? Тогда вам курить ПБУ 3/2006 «Учет активов и обязательств, стоимость которых выражена в иностранной валюте», и непонятно, зачем точность 15,5. Или у вас система для внутреннего использования по своим правилам? Тогда вам никто не указ, делайте что хотите. Сколько знаков у coin'ов требуется хранить? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2018, 23:28 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormot2. Какой имеет смысл выбрать тип столбцов для хранения сумм: Для обычных валют вроде хватит DECIMAL(15,5) И для обычных валют и для фантиков можно использовать только целый тип, храня все суммы в наименьшей возможной единице для данной валюты. То есть для рублей - копейки, для евро - центы, для биткоинов - сатоши. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 00:36 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormot, 1. Нет, если имеете ввиду справочник валют. 2. Для обычных валют вообще-то 2 знака после запятой. Для криптовалют больше 12 после запятой не видел, но никто не застрахован что завтра появится такая крипта. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 00:50 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormotВопросы: 1. Надо ли делать разные таблицы для coin'овых записей и обычных валют? 2. Какой имеет смысл выбрать тип столбцов для хранения сумм: Для обычных валют вроде хватит DECIMAL(15,5), а вот какой стоит выбрать для coin'ов? У них там суммы с кучами значащих цифр, есть ли какой-то достаточный вариант? 1. Если операции с койнами и валютами одни и те же - нет смысла делать разные таблицы. 2. Возьмите десятичный тип с максимальной разрядностью - это не та тема, на которой надо экономить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 02:06 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
1. Нет 2. Проведите анализ имеющихся коинов, определите максимальный размер до и после запятой, прибавьте пару разрядов, выберите соответствующий тип. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 02:41 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovИ для обычных валют и для фантиков можно использовать только целый тип, храня все суммы в наименьшей возможной единице для данной валюты. То есть для рублей - копейки, для евро - центы, для биткоинов - сатоши. Дмитрий, это такое правило неписаное есть? Тут ведь в таком случае я так понимаю надо будет все входящие суммы умножать на какой-то условный 1e15 а исходящие (выводимые из БД клиенту) делить на это же число. Нет ли тут потенциального места для накопления ошибок? И в принципе на каждый чих дополнительные арифметические действия делать надо. Cane Cat FisherТогда вам курить ПБУ 3/2006 Погляжу. Спасибо за ссылку на документ. Хотелось бы конечно чтобы вышло не для личного пользования система :) Злой Бобресли имеете ввиду справочник валют. Нет, не справочник валют. А например список транзакций, но транзакции в разных валютах. Т.е. типа такого: Код: sql 1. 2. 3. 4. 5.
Т.е. сумма и указатель на валюту в которой эта сумма. Спасибо всем за нет для пункта №1. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 05:22 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Cane Cat FisherВы действительно делаете легальный мультивалютный учет по законам РФ? Прочитав начало документа наткнулся сразу на такие формулировки: .....в рубли должен производиться на дату совершения операции в иностранной валюте, а также на отчетную дату. Таблица текущих курсов валют у меня в схеме запланирована, но вместе с тем я так понимаю должно быть сохранено состояние курсов на дату совершения транзакции в валюте. И у меня тут конечно сразу возникает вопрос, а как лучше организовывать связь транзакции с курсом? По дате? Курсы же устанавливаются на дату и в документе говорится о дате а не о моменте. Т.е. потом связывать условно по Код: sql 1.
или лучше курс хранить прямо в транзакции типа: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 05:43 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Злой Бобр2. Для обычных валют вообще-то 2 знака после запятой. Для криптовалют больше 12 после запятой не видел, но никто не застрахован что завтра появится такая крипта.Для криптомусора более актуально 12+ знаков до запятой, чем после. Особенно, если с таблицей будет работать робот, а не только человек. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 09:21 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormotТаблица текущих курсов валют у меня в схеме запланирована Таблица текущих курсов - вещь сомнительной полезности, эту функцию при необходимости может выполнять view. Но в таблице курсов, конечно, помимо ссылок на базовую и производную валюты должна быть дата/время курса и его тип (типов курсов довольно много). kormotПо дате? Курсы же устанавливаются на дату и в документе говорится о дате а не о моменте. Смотря какие курсы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 10:23 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот МатроскинkormotПо дате? Курсы же устанавливаются на дату и в документе говорится о дате а не о моменте. Смотря какие курсы. Очень немногие. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 11:16 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
982183Кот Матроскинпропущено... Смотря какие курсы. Очень немногие. "Очень немногие" что? :) имеют привязку ко времени или не имеют? И "очень немногие" - это странная постановка вопроса, если хоть один из нужных типов курсов имеет оную привязку - ее надо закладывать в структуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 11:33 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormot, А в MySQL нету специального типа для хранения денежных сумм money или currency? У него 4 знака после запятой, и он специально под хранение денежных сумм предназначен. Хотя если надо хранить миллионные доли всяких figcoin-ов, тогда не подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 11:37 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот Матроскин982183пропущено... Очень немногие. "Очень немногие" что? :) имеют привязку ко времени или не имеют? И "очень немногие" - это странная постановка вопроса, если хоть один из нужных типов курсов имеет оную привязку - ее надо закладывать в структуру. А что у нас по датам? кроме ЦБ ничего и не помню. А вся биржа работает с гораздо большей дискретностью, но явно не нужной в подобных задачах. Тут важен курс сделки, а он может сильно отличаться от чего угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 11:41 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormotДмитрий, это такое правило неписаное есть? Это такой опыт поколения автоматизаторов бухгалтерии, "сын ошибок трудных". kormotТут ведь в таком случае я так понимаю надо будет все входящие суммы умножать на какой-то условный 1e15 а исходящие (выводимые из БД клиенту) делить на это же число. Ни делить ни умножать не надо. Это всего лишь вопрос в какую позицию втыкать десятичный разделитель при преобразовании в строку и обратно. kormotНет ли тут потенциального места для накопления ошибок? Нет. kormotИ в принципе на каждый чих дополнительные арифметические действия делать надо. Не надо. Вся арифметика производится в целых числах. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 12:11 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
982183Кот Матроскинпропущено... "Очень немногие" что? :) имеют привязку ко времени или не имеют? И "очень немногие" - это странная постановка вопроса, если хоть один из нужных типов курсов имеет оную привязку - ее надо закладывать в структуру. А что у нас по датам? кроме ЦБ ничего и не помню. Многие биржи проводят дневной фиксинг - именно для целей определения курса при всяких там отложенных конвертациях. Например, договор у вас в долларах, реальная оплата происходит в тугриках (требование законодательства) через 5 дней после поставки. Чтобы определить, сколько же тугриков должен контрагент, в договоре указывается "...по курсу LSE (на самом деле - некоему конкретному типу курса LSE) на день оплаты". Но с койнами, курс которых меняется на сотни процентов за день, вряд ли такой тип конвертаций будет сильно востребован :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 12:12 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovkormotДмитрий, это такое правило неписаное есть? Это такой опыт поколения автоматизаторов бухгалтерии, "сын ошибок трудных". А можно хоть одно преимущество этого способа по сравнению с десятичным типом? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 12:15 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот МатроскинА можно хоть одно преимущество этого способа по сравнению с десятичным типом? Не нужно думать сколько цифр после запятой надо выделять в numeric. Поэтому можно складывать в одно поле биткоины с их восемью знаками после запятой и какие-нибудь йены с их десятью знаками перед запятой не боясь, что точности не хватит. И можно не волноваться о внутреннем представлении numeric в конкретной СУБД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 12:20 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovКот МатроскинА можно хоть одно преимущество этого способа по сравнению с десятичным типом? Не нужно думать сколько цифр после запятой надо выделять в numeric. Но придется думать о "наименьшей возможной единице для данной валюты", что, вообще говоря, гораздо сложнее, чем просто выделить максимальный разряд в numeric. Dimitry SibiryakovИ можно не волноваться о внутреннем представлении numeric в конкретной СУБД. А зачем о нем волноваться? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 12:32 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот МатроскинА можно хоть одно преимущество этого способа по сравнению с десятичным типом? Храня деньги в типах с запятой, приходится быть более внимательным, чтобы где-нибудь (в хранимых процедурах, либо на клиенте) не столкнуться с классическим свинством машинной арифметики, вроде того что есть 0.10 руб, раздаешь их по какому-то алгоритму, отнимаешь от него в цикле 10 раз по 0.01 руб, а оно либо остается не ноль, либо вовсе на последнюю итерацию не хватает. Оно все решаемо грамотным округлением, и сам я не сторонник столь радикальных мер, как хранить все в Integer, просто об этом надо постоянно помнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 12:40 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Cane Cat Fisher, Кот Матроскин, Dimitry Sibiryakov - Уважаемые, спасибо за полезную информацию. Я думаю что хранить в целом не буду, потому как в любом случае для этого надо исходные данные до БД умножать на какую-то базу условную 1e15, а если потом окажется что надо было больше базу брать? Да и BIGINT - это 20 знаков, при базе в 1e15 остаётся все то 5 разрядов. Таким макаром не получится в одной таблице целочисленно хранить и какие-нибудь миллиардные беларусские рубли и койны с большим количеством знаков после запятой. А если у DECIMAL'а надо будет больше разрядов, то увеличить их не составит труда. Опыт "копеечных" проблем у меня уже есть, на эти грабли наступал, проблемы вылазили и я с ними в итоге справился, с тех пор отошёл от float'а на DECIMAL и при округлениях делаю всё корректно. Так что думаю что остановлюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 13:00 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот МатроскинА зачем о нем волноваться? Затем, что оно внезапно может оказаться с плавающей запятой. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 13:07 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormotи какие-нибудь миллиардные беларусские рубли Обижаете :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 13:24 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Cane Cat FisherОбижаете :) Очень кстати подметили текущий курс. Я помню что не так давно в Беларуссии (через А намеренно, национальный колорит :)) курс был дикий. И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент? Хотя сам понял что так и есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 13:35 |
|
|
start [/forum/topic.php?fid=32&fpage=6&tid=1539984]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 419ms |
0 / 0 |