|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#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 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormotнадо ли как-то девальвации в базе оформлят Надо. Проще всего - заведением новой валюты. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 13:58 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormot И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент? Хотя сам понял что так и есть. К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 15:07 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот Матроскинkormot И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент? Хотя сам понял что так и есть. К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах. В катастрофоустойчивом режиме? (шутка) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 15:41 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Спасибо Товарищи! Чрезвычайно приятно и полезно для собственного обучения, общаться с такими образованными людьми :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 19:44 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Кот Матроскинkormot И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент? Хотя сам понял что так и есть. К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах. это каким образом? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:21 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
kormotCane Cat FisherОбижаете :) Очень кстати подметили текущий курс. Я помню что не так давно в Беларуссии (через А намеренно, национальный колорит :)) курс был дикий. И собственно возникает очевидный вопрос, надо ли как-то девальвации в базе оформлять или это не более чем смена курса по отношению к другим валютам в определённый момент? Хотя сам понял что так и есть. этот же вопрос в контексте деноминации выглядит интереснее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:22 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
ОзверинКот Матроскинпропущено... К сожалению, это не просто смена курса, а еще и изменение текущих остатков на счетах. это каким образом? это кто-то девальвацию с деноминацией перепутал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 10:43 |
|
Помогите с организацией таблиц для хранения денег
|
|||
---|---|---|---|
#18+
Товарищи, тут ещё у меня возникли вопросы. Внесение реальных средств может быть по нескольким сценариям: 1. Авторизованный пользователь кладёт средства себе на счёт, чтобы в дальнейшем их пользовать. 2. Авторизованный пользователь оплачивает услугу на сайте используя реальные средства (не списыванимем со своего счёта) 3. Неавторизованный пользователь решает закинуть денег на сайт на определённую услугу не желая регистрироваться и в дальнейшем участвовать в судьбе внесённых средств. Сценарии может будут и ещё, мне сейчас вот что понять. Как я начал разбираться с платёжными сервисами Я.Деньги всякие, пайпалы и т.п. В них всех создаётся запрос на оплату, т.е. формируется некий ключ транзакции и уже в случае реального проведения платежа клиентом, эта транзакция по ключу подтверждается платёжным сервисом. Таким образом моему приложению необходимо когда клиент хочет внести денег, сперва создать уникальный ключ транзакции и в БД его сохранить. Также для последующего распределения подтверждённого платежа, мне надо в БД сохранить цель для данной транзакции (типа на счёт такого-то пользователя, от такого-то пользователя за такую-то услугу, и просто от кого-то на такой-то сервис). Как это стоит реализовывать в БД? В топике про антипаттерны проектирования, прочитал что моветон использовать всякие константы в полях таблиц, на основе которых становится понятно с чем джойнить таблицу. И вот я в сомнениях хороший ли это вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
И в этой таблице соответственно userID и buyItemID - могут быть 0 и уже при подтверждении транзакции на основе payType уже или в входящие транзакции пополнения баланса пользователя (пополнение баланса), или и пополнение баланса и оплата за покупку (оплата за что-то), или просто в таблицу с внесениями денег за определённую услугу. Застрял я что-то на этом формировании учёта движений средств. Подскажите пожалуйста! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 12:30 |
|
|
start [/forum/topic.php?all=1&fid=32&tid=1539984]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
143ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 275ms |
0 / 0 |