|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Добрый день Уважаемые! Скажите пожалуйста, как лучше оформить личные счета например для "Пользователей" и для "Групп Пользователей". Пример исключительно теоретический, просто для иллюстрации. Различных (принципиально) сущностей может быть больше 2-х. Я пока остановился на таком варианте: В коде приложения прописаны константы с типами сущностей. Навроде: Код: sql 1. 2.
и счета для сущностей описать так: Код: sql 1. 2. 3. 4. 5. 6.
И в дальнейшем движения средств уже описывать двойной записью с указанием данных счетов. Скажите пожалуйста, стоит так формировать или для каждой сущности свою таблицу со счетами надо делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 08:40 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
учитывая, что финвопросы бывает вызывают ожесточённые споры (претензионно-исковую работу, включая суды), наверное имеет смысл добавлять везде избыточность. Чтобы не получилось потом, что из за кривого 1 бита деньги Иванова легли в кошелёк Петрова. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 09:01 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Блин... Аппаратные проблемы это вроде чуть другое. Их ECC'ом надо решать. Тут всё-же вопрос в корректности решения. Да и от сменившегося бита это никак не спасёт. Если в начале транзакции распределения средств будет тот самый некорректный бит в идентификаторе приёмника или источника - результат в любом случае будет неверным. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 09:23 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Разовью тему дальше. Ещё в системе соответственно есть - платежи от пользователей (через разные системы: карты, WM, ЯД и т.п.) - платежи "счетами" внутри системы, т.е. от такого-то пользователя такому-то, от такого пользователя на баланс такой-то группы и т.п. И если вопрос по внутренним счетам (пользователей, групп и др.) уже сформулирован выше с просьбой оценить выбранный способ, то взносы извне хочу тожу спросить совета как оформлять. Пришёл на ум такой вид: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Скажите, стоит ли так делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:38 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Зачем физически делить внешние и внутренние ? Разве они принципиально отличаются ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:52 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormot, ИМХО не надо "усложнять" без необходимости. У вас есть сущность счет с четко заданными операциями - "приход/расход/прсмотр". А сверху можно "накручивать" доступ к операциям над счетом для пользователя или группы пользователей. Кто имеет право смотреть/начислять/снимать деньги (производить соответствующие операции) Т.е. мухи (счета) отдельно, котлеты (права пользователей) отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:14 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
L_argoЗачем физически делить внешние и внутренние ? Разве они принципиально отличаются ? Ну как... условно потому что внешние они общий баланс системы меняют, а внутренние нет - только перераспределяют внутри. Вроде принципиально разные как я вижу типы счетов. А как иначе? Т.е. прямо стоит все счета в одной таблице хранить и просто типом их подразделять? mad_nazgulИМХО не надо "усложнять" без необходимости. У вас есть сущность счет с четко заданными операциями - "приход/расход/прсмотр". А сверху можно "накручивать" доступ к операциям над счетом для пользователя или группы пользователей. Кто имеет право смотреть/начислять/снимать деньги (производить соответствующие операции) Т.е. мухи (счета) отдельно, котлеты (права пользователей) отдельно. Не очень понял. Тут права не имеют особого значения, эти счета чисто для учёта баланса, нет такого что один пользователь может/не может смотреть чей-то счёт. Он может пополнить свой счёт и оплатить что-то, счета только для таких операций нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:26 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormotНе очень понял. Тут права не имеют особого значения, эти счета чисто для учёта баланса, нет такого что один пользователь может/не может смотреть чей-то счёт. Он может пополнить свой счёт и оплатить что-то, счета только для таких операций нужны. Как раз имеют. На счет могут деньги придти, с него могут деньги списаться, и можно посмотреть текущее состояние счета. Все. Вам же нужно разграничить доступ к счету. Т.е. кто имеет право на ту или иную операцию. Один клиент или группа клиентов. Например личные счета, это те счета, на просмотр и снятие с которых имеет право только один клиент. Групповые счета, это те счета, на просмотр и снятие которых имеет право группа клиентов. Можно еще упростить. На операции со счетами имеет право всегда группа клиентов. Но для личных счетов группа будет состоять из одного клиента. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:53 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Т.е. прямо стоит все счета в одной таблице хранить и просто типом их подразделять?Именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:55 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormotНу как... условно потому что внешние они общий баланс системы меняют, а внутренние нет - только перераспределяют внутри. Вроде принципиально разные как я вижу типы счетов. А как иначе? Т.е. прямо стоит все счета в одной таблице хранить и просто типом их подразделять? Думаю надо похожей задачей и решил не делить на разные таблицы- это сильно усложняет. Все в одной таблице тип счета прописан в самом счете должен быть прописан, так что и без типа понятно что это. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 14:16 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Товарищи, оцените пожалуйста итоговую схему: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 14:54 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Транзакции забыл, ну без них оцените пожалуйста, как будто они есть :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 15:06 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormotТоварищи, оцените пожалуйста итоговую схему: Разве у счета не должна быть строго одна валюта? Помоему в банках для каждой валюты отдельный счет открывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 16:08 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
SergueiРазве у счета не должна быть строго одна валюта? Помоему в банках для каждой валюты отдельный счет открывают. Так у меня не счёт в банковском понимании, а кошелёк скорее. Могут приходить разные валюты и в этих валютах должна быть своя сумма. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 20:15 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormotТак у меня не счёт в банковском понимании, а кошелёк скорее. Могут приходить разные валюты и в этих валютах должна быть своя сумма. Какая разница? Есть одна учетная запись в кошельке, а есть счет для каждой валюты отдельно. Ведь учет каждой валюты идет отдельно. Не уверен на 100%, но думаю что в этом есть логика. . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 20:26 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
SergueiКакая разница? Есть одна учетная запись в кошельке, а есть счет для каждой валюты отдельно. Ведь учет каждой валюты идет отдельно. Не уверен на 100%, но думаю что в этом есть логика. . Ну вот вроде если прикинуть, то в оформлении всяческих запросов для работы со всем этим хозяйством, просто будет на одну таблицу связующую больше, без каких-либо дополнительных выгод. Можно было бы предположить, что теоретически может быть операция конвертирования одной валюты в другую у одного пользователя (у меня вроде этого не требуется и не предполагается), и это потребовало бы указания с какого счёта на какой пришло/ушло. Но в предложенной выше схеме (один кошелёк мультивалютный) всё вполне реализуется записью в таблице pay_actions с указанием одинакового №счёта 1 и 2 и разных валют. Только вот двойная запись плохо будет некорректной, ведь там дебет и кредит должны сходиться, а мы условно доллары с рублями сравниваем. Но это можно тогда реализовать в две операции, через кошелёк системы. Т.е. 1. операция снимаем валюту1 со счёта объекта на счёт-обменник системы. 2. операция вносим валюту2 со счёта-обменника системы на счёт объекта. Но в целом, зерно сомнения закралось насчёт отдельных счетов. Но всё-же в случае отдельных счетов для каждой валюты, ведь операция "конвертации" будет реализована ровно также. 1. Со счёта валюты №1 перенести на какой-то системный счёт в такой-же валюте 2. С какого-то системного счёта в валюте 2 перенести средства на счёт объекта. Короче не вижу выгод и принципиальной разницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 20:39 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Уважаемые, привёл к такому виду пока, скажите пожалуйста свои соображения. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 21:12 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormotУважаемые, привёл к такому виду пока, скажите пожалуйста свои соображения. pay_transaction - по-моему это не транзакции у вас(кстати что вы имели ввиду? :) ), а просто комментарий к операции в pay_actions. С таким же успехом можно tDescr в pay_actions перенести. pay_accountState на мой взгляд смысла нет. Читаешь последнюю запись в pay_accountActions - вот и состояние счета. Я бы сделал поля в pay_accountActions: сумма дебета сумма кредита сумма транзакции ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 22:44 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
SergueikormotТак у меня не счёт в банковском понимании, а кошелёк скорее. Могут приходить разные валюты и в этих валютах должна быть своя сумма. Какая разница? Есть одна учетная запись в кошельке, а есть счет для каждой валюты отдельно. Ведь учет каждой валюты идет отдельно. Не уверен на 100%, но думаю что в этом есть логика. . Ну естественно разница есть. Кошелёк и банковский счёт вещи совершенно разные. Не стоит упоминать их в одном предложении. Учёт в кошельке ведётся по наименованию валюты, а не по какому-то счёту. Достаньте из кармана свой кошелёк, откройте его, и поймите какая причина физически мешает положить туда и долларовые бумажки и рубли. И что мешает Вам сказать, что в кошельке у Вас например, "20 рублей, 30 долларов и 50 евро"? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:34 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Mr.FontaineSergueiпропущено... Какая разница? Есть одна учетная запись в кошельке, а есть счет для каждой валюты отдельно. Ведь учет каждой валюты идет отдельно. Не уверен на 100%, но думаю что в этом есть логика. . Ну естественно разница есть. Кошелёк и банковский счёт вещи совершенно разные. Не стоит упоминать их в одном предложении. Учёт в кошельке ведётся по наименованию валюты, а не по какому-то счёту. Достаньте из кармана свой кошелёк, откройте его, и поймите какая причина физически мешает положить туда и долларовые бумажки и рубли. И что мешает Вам сказать, что в кошельке у Вас например, "20 рублей, 30 долларов и 50 евро"? Никто. 4000$, 15000р, 1000ман ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:27 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Sergueipay_transaction - по-моему это не транзакции у вас(кстати что вы имели ввиду? :) ), а просто комментарий к операции в pay_actions. С таким же успехом можно tDescr в pay_actions перенести. Тут транзакции это не те который COMMIT ROLLBACK :) Это объединение нескольких действий в одной транзакции. Т.е. например пользователь хочет со своей карты внести денег за товар. Это в моих транзакциях, в рамках одного PT_ID будут несколько действий: 1. Внесение денег с карты на счёт такого то пользователя 2. Оплата со счёта такого-то пользователя за то-то и то-то. Mr.FontaineНу естественно разница есть. Кошелёк и банковский счёт вещи совершенно разные. Не стоит упоминать их в одном предложении. Учёт в кошельке ведётся по наименованию валюты, а не по какому-то счёту. Достаньте из кармана свой кошелёк, откройте его, и поймите какая причина физически мешает положить туда и долларовые бумажки и рубли. И что мешает Вам сказать, что в кошельке у Вас например, "20 рублей, 30 долларов и 50 евро"? ViPRosНикто. 4000$, 15000р, 1000ман Товарищи, я только не понял, в итоге как правильно делать? Внешние счета (с которых непосредственно средства извне приходят) - отдельно, а внутрисистемные счета пользователей и других объектов - отдельно? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:36 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Sergueipay_accountState на мой взгляд смысла нет. Читаешь последнюю запись в pay_accountActions - вот и состояние счета. Я бы сделал поля в pay_accountActions: сумма дебета сумма кредита сумма транзакции Ну нет, в pay_accountActions там же лог действий, из которых состояние счёта в любой момент можно получить, но это же надо SUM по всей истории херачить. А так триггерами или ещё как при каждой записи в Actions пересчёт соответствующего счёта. А по поводу полей в Actions, я так в итоге и сделал (debetAmount, creditAmount), сумма действия же всегда равна нулю в двойной записи? Т.е. дебит с кредитом по величине одинаковы, но разные знаки. Сумма транзакции, ну да, наверное можно в pay_transaction его добавить. Только имеет ли это поле смысл, кроме как информационное? Ведь если в "транзакции" несколько действий, т.е. например взнос один, а распределяется он например по несколким путям (в группу, процент ещё куда-то и т.п.) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:17 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormot, так-то я у Сергея спрашивал про кошелёк Ну, а по табличкам, то более-менее нормально. Не все поля таблиц понятны из их названий, ну да ладно, главное: есть кошельки и движение средств в одной табличке. Кстати, неплохо было бы переименовать табличку кошельков. "Состояние счёта" как-то не в то русло направляет мысли. Ты сам писал, что это у тебя кошельки, а не счета. Вот и назови её pay_moneyBags. Тогда проще будет воспринимать, что запрос на состояние счёта может выдать несколько строк (по каждой валюте отдельно), а то из термина "Состояние счёта" совсем не вытекает возможность наличия нескольких строк в выборке. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:23 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
Mr.Fontaine, Ок, приму к сведению и термины сменю. А всё же надо разделять на уровне таблиц внешние счета и внутренние "кошельки"? Внешние счета, это например пользователь пополняет свой кошелёк через SMS, и соответственно агрегатор отправляет мне подтверждение операции. И значит идентификатор этого "внешнего счёта" - это тип (TYPE_SMS_AGGREGATOR1) и уникальный ключ этого "внешнего счёта" - номер телефона. Тогда будут таблицы "pay_account" => "Кошелёк" и добавится "ext_account" (extTypeID - тип внешнего сервиса, extKey - уникальный ключ счёта в этом внешнем сервисе) и действия будут разделены на две таблицы ext_actions (id, currID, extAccID, intBagID, extPayAmount, intPayAmount) и текущая "pay_actions" => "bag_actions" ? А то выше вроде посоветовали в одной таблице хранить и внутренние кошельки и внешние счета, разделяя их типами. В принципе это реализуемо, но вроде смешение довольно разных по смыслу элементов в одной таблице? А наличие отдельно внешних сервисов как раз принципиально не усложнит все внутрисистемные связанные с движением средств запросы, т.к. требуются лишь в моменты работы с внешними счетами (ввод-вывод средств из системы) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:42 |
|
Реализация "кошельков" для разных сущностей
|
|||
---|---|---|---|
#18+
kormot, чисто теоритически (мне кажется в этом ключе у нас идёт разговор?) конечно надо. Это разные сущности. Но честно сказать я сомневаюсь, что тебе нужны внешние счета. Мне кажется достаточно знать откуда пришли деньги - по СМС или из Яндекса. У тебя есть сумма денег, есть внутренний аккаунт, куда надо перечислить их. Что даёт тебе номер телефона или последние четыре цифры карты? Есть сайты, где это дело учитывают, но там движение денег идёт в ручном режиме: пользователь перечислил деньги на счёт Яндекс.Деньги, а уже потом по данным с какого номера деньги пришли, администратор сайта пополняет внутренний кошелёк указанного в примечаниях к платежу аккаунта. Честно говоря, я не специалист в электронной коммерции и могу запросто ошибаться, да и то что у тебя указано в таблице Account_Ext мне вообще малопонятно.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 12:18 |
|
|
start [/forum/topic.php?fid=32&msg=39856951&tid=1539912]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 402ms |
0 / 0 |