|
|
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
хочу добавить в базу данных конвертацию валюты: 1) все курсы будем хранить по отношению к евро 2) и пересчитывать в любую выбранную валюту 3) схема такая: 4) норм? нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 23:38 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, не туда запостила (хотела в проектирование БД), сотрите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2015, 23:40 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabцель пересчитать данные по странам в выбранную валюту прикручивать будем примерно так: для начала определитесь с постановкой задачи. Я так понимаю сейчас вы изливаете в интернет "поток своего сознания". И сами четко не понимаете чего хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 08:16 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabхочу добавить в базу данных конвертацию валюты: 1) все курсы будем хранить по отношению к евро У Вас могут быть проблемы с точностью при расчете кросс-курсов mini.weblab3) схема такая: Не совсем понятно вынесение поля Rate в отдельную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 08:53 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabцель пересчитать данные по странам в выбранную валюту прикручивать будем примерно так: "Будте проще - к вам потянутся" (с) Карнеги. Много лишнего, таблицу TimeSeries можно сократить, Таблицу Rate тоже. Для ускорения можно в таблице Курсов либо две даты держать, либо курсы иметь всегда на каждый день. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 08:57 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, Делайте через валютные пары. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 09:01 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Непонятно, какая выгода выносить TimeSeries и CountryTime в отдельные таблицы? Я бы сделал так: country_currency( country , from_date , to_date, currency) currency_rate( currency , from_date , to_date, rate) to_date заполняется автоматически, и not null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 09:39 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Гхостик, А нафига две даты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 09:49 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Неправильно хранить Rate к Евро. Нужно хранить исходные данные так, как публикует их официальный источник: "За 100 тугриков - 33 еврика, за 10 тугриков - 22 бублика", то есть хранить и 100, и 33, и 10, и 22, и тугрики и еврики и бублики. А если хранить коэффициент, то при попытке обменять 100 миллионов тугриков получится не ровно 33 миллиона евриков, а с хвостиком. И будут вопросы. Кроме того, при попытке обмена напрямую бублики на еврики могут быть особые правила - например, считать не через тугрики, а через другую валюту. И вообще, просто "конвертации валюты" в вакууме не бывает. Мультивалютный учет - отдельная песня со своими тараканами. Погуглите "Курсовые валютные и суммовые разницы". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 10:06 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
dma_caviarГхостик, А нафига две даты? если за некоторые даты курсов нет - так быстрее искать нужную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 10:52 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Ivan Durakdma_caviarГхостик, А нафига две даты? если за некоторые даты курсов нет - так быстрее искать нужную. Так и не надо на конкретную дату искать курс. Ясно что его может не быть. Ищем максимальную имеющуюся дату, которая <= искомой даты, затем ищем курс на эту максимальную дату. Настраиваем индексы и все отлично работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 11:08 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, Всего 2 таблицы : валюты и курсы валют. Ребята уже сказали - проще нужно быть, а то потом в вашем бардаке никто разбираться не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 11:47 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
dma_caviarТак и не надо на конкретную дату искать курс. Ясно что его может не быть. Ищем максимальную имеющуюся дату, которая <= искомой даты, затем ищем курс на эту максимальную дату. Настраиваем индексы и все отлично работает.Один between и писать гораздо короче, и для СУБД проще выполнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 11:48 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Гхостикdma_caviarТак и не надо на конкретную дату искать курс. Ясно что его может не быть. Ищем максимальную имеющуюся дату, которая <= искомой даты, затем ищем курс на эту максимальную дату. Настраиваем индексы и все отлично работает.Один between и писать гораздо короче, и для СУБД проще выполнять. Вставлять новый курс зато дороже, и коллизии в данных возможны. Схема с двумя датами имхо осмысленна для вьюшки, но не для исходной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 11:58 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Гхостикdma_caviarТак и не надо на конкретную дату искать курс. Ясно что его может не быть. Ищем максимальную имеющуюся дату, которая <= искомой даты, затем ищем курс на эту максимальную дату. Настраиваем индексы и все отлично работает.Один between и писать гораздо короче, и для СУБД проще выполнять. Представьте, если каждый кодер будет городить в таблице кучу полей чтобы лично ему было проще жить из-за своих сложностей с sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 12:01 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
2 Кот Матроскин: Делая две даты во view а не таблице, мы не улучшаем производительность запросов. И, конечно, денормализация имеет свою цену, это и код поддержки правильности дублирования данных, и удорожание модификации данных. И, в данным конкретном случае, я считаю что эта цена не чрезмерна. dma_caviarиз-за своих сложностей с sql.Сложностей с sql нет, но зачем делать сложнее когда можно сделать проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 12:21 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Гхостик2 Кот Матроскин: Делая две даты во view а не таблице, мы не улучшаем производительность запросов. Если вьюшка материализованная - то улучшает (тоже возникает удорожание модификаций, конечно - но тут уж либо дудочка, либо кувшинчик) Т.е. любая вьюшка закрывает Ваше "between писать проще" + материализованная закрывает и "для СУБД проще выполнять", если это действительно нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 12:30 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, слишком сложно, достаточно двух таблиц - справочник валют (ид, код, наименование, страна) таблица: ид, ид валюты1, ид валюты2, дата/время, курс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 12:39 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинГхостик2 Кот Матроскин: Делая две даты во view а не таблице, мы не улучшаем производительность запросов. Если вьюшка материализованная - то улучшает (тоже возникает удорожание модификаций, конечно - но тут уж либо дудочка, либо кувшинчик) Т.е. любая вьюшка закрывает Ваше "between писать проще" + материализованная закрывает и "для СУБД проще выполнять", если это действительно нужно вместо одного поля добавлять цельную мат.вью. !!!!!! Это лажа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 12:55 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Гхостикно зачем делать сложнее когда можно сделать проще? Сложнее чего, вот этого?)) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. или Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 12:56 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
dma_caviarГхостикно зачем делать сложнее когда можно сделать проще? Сложнее чего, вот этого?)) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Да, этого: Код: sql 1. 2. 3. 4. 5. 6. И когда такие запросы пишутся сотнями для десятка аналогичных таблиц с историческими данными, разница заметна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 13:03 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Shr, А где код, который обновляет вторую дату? Желательно с контолем на пересечение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 13:05 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
ShrИ когда такие запросы пишутся сотнями для десятка аналогичных таблиц с историческими данными, разница заметна. Каких таблиц... курсы как правило юзаются в виде скалярной функции, типа ПолучитьКурсНаДату и все эти сотни просто юзают эту функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 13:06 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Ivan DurakКот Матроскинпропущено... Если вьюшка материализованная - то улучшает (тоже возникает удорожание модификаций, конечно - но тут уж либо дудочка, либо кувшинчик) Т.е. любая вьюшка закрывает Ваше "between писать проще" + материализованная закрывает и "для СУБД проще выполнять", если это действительно нужно вместо одного поля добавлять цельную мат.вью. !!!!!! Это лажа. Да, вместо одного поля добавить цельную мат.вью. Вопрос "чем это лучше?" - для самостоятельного изучения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 13:10 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
dma_caviarShr, А где код, который обновляет вторую дату? Желательно с контолем на пересечение.Запросов на выборку больше чем один раз написанный код на модификацию. dma_caviarкурсы как правило юзаются в виде скалярной функции, типа ПолучитьКурсНаДатуКогда такой атрибут (курс) один - да. Когда их несколько - уже сложнее. Ну, и в целом к функциям в sql у меня есть некоторая подозрительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 13:27 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
ShrНу, и в целом к функциям в sql у меня есть некоторая подозрительность. А, понятно, вопросов больше нет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 13:32 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за ответы! Уточню: 1) Конвертация "приделывается" к уже существующей ДБ. Поэтому простота не очень-то прокатывает. 2) Курсы буду хранить на каждый день 3) TimeSeries - таблица из начальной ДБ, поэтому убирать ее никуда не нужно будем использовать ее для привязки 3) По поводу того, что выносить Rate в отдельную таблицу не стоит, пожалуй, соглашусь. Зачем я это сделала? ну например, чтобы не хранить пустые значения (на самом-то деле, я поэкспериментировала с нормализацией) 4) Конвертация происходит через связку CountryTime. Т.е в базе собрана некоторая статистика по странам и денежные значения нужно уметь конвертировать в любую валюту. 5) Хранить курсы я буду не в евро, а в нац.валюте (т.е стоимость 1евро в нац. валюте) 6) Курсы будем хранить на каждый день 7) Конвертация проста: пусть нужно предоставить отчет в доллара на определенную дату: a)находится курс USD/EUR на заданную дату б)выбираются курсы CUR/EUR на заданную дату в)делим USD/EUR на CUR/EUR и получаем нужные курсы нац. валют в USD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2015, 23:57 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
и дополнительный вопрос по поводу функций: почему к функциям относитесь с недоверием? :) у нас в базе кстати тоже функций мало (в основном мои :D), а ведь оч. удобная вещь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 00:06 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
и еще вопрос, допустим я все-таки выношу Rate в отдельную таблицу (как в схеме) rtID в таблице Rate будет foreign key по отношению к rtID в таблице TimeCurrency? правильно или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 00:19 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabи еще вопрос, допустим я все-таки выношу Rate в отдельную таблицу (как в схеме) rtID в таблице Rate будет foreign key по отношению к rtID в таблице TimeCurrency? правильно или нет? неправильно, форейн будет в таблице которая на рэйт ссылается. Но реально есть уже бест практисы по реализации курсов валют давным давно, ни в одной из них нету никакой отдельной таблицы для самого курса! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 09:46 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
dma_caviarShrНу, и в целом к функциям в sql у меня есть некоторая подозрительность. А, понятно, вопросов больше нет) перегрузка запроса функциями - лучший способ запутать оптимизатор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 09:47 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Ivan Durakdma_caviarпропущено... А, понятно, вопросов больше нет) перегрузка запроса функциями - лучший способ запутать оптимизатор Никакой перегрузки тут нет, простейшая функция с минимальной стоимостью (лично у меня показывает 0.009). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 10:01 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
dma_caviarу меня показывает 0.009). Ой, не туда посмотрел, 0.003 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 10:04 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, Еще раз - всего 2 таблицы решают вашу задачу. Это если вы все озвучили правильно. В противном случае схема может расширяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 12:26 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Злой Бобр, нормализация базы как раз и используется, для того чтобы была возможность сравнительно легко расшириться в будущем. вопрос про ключи это теоретический вопрос, возникший по ходу разбора полетов отдельную тему заводить не хотелось Рассмотрим часть таблицы с вынесением курсов в отдельную таблицу теперь нужно обеспечить целостность БД ключ rtID в таблице TimeCurrency будет первичным ключом (эта таблица собственно и используется для генерации ключей) что происходит с таблицей Rate? я бы ставила Foreign Key + Unique Constraint на rtID в таблице Rate. прокомментируйте пожалуйста (и не говорите, что нет смысла выносить курсы в отдельную таблицу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2015, 22:42 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabключ rtID в таблице TimeCurrency будет первичным ключом а смысл??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 00:49 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, Мне, как и всем тут, абсолютно всеравно как вы реализуете свою задачу. Мы лишь можем подсказать как лучше, что б потом не переделывать кучу таблиц. Для начала расшифруйте что у вас в какой таблице. Я примерно догадываюсь, но опыт подсказывает что все может быть. И уточню еще раз - вам необходимо хранение курсов валют? Или курсов в разрезе поставщиков? Ну или еще что ... Если речь именно о денежном курсе валют - 2 таблицы решают все. В противном случае нужно подробно знать что и как. После обеда гляну и подскажу что и как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 03:29 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, смысл в том, что я хочу разобраться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 09:10 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabключ rtID в таблице TimeCurrency будет первичным ключом (эта таблица собственно и используется для генерации ключей) что происходит с таблицей Rate? я бы ставила Foreign Key + Unique Constraint на rtID в таблице Rate. А что, Ваша СУБД не умеет делать одно и то же поле primary key и foreign key? Ну тогда делайте так, как Вы написали. Понимаете, непонятен смысл Вашей таблицы Rate - чего Вы хотите добиться при помощи нее? поэтому сложно советовать, как ее правильно сделать. если у Вас отношение 1:0..1 - каков бизнес-смысл записи в TimeCurrency, которой не соответствует запись в rate? Злой БобрЕсли речь именно о денежном курсе валют - 2 таблицы решают все. Нет, конечно - как минимум еще могут понадобиться виды курсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 09:52 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabIvan Durak, смысл в том, что я хочу разобраться ну щаззз. кто холчет разобраться пишет. "подскажите как" А вы пишете - "я уже все решила, напишите мне что это правильно. Только не пишите что это непрвильно." А на вопросы "нафига вот эта лишняя хрень?" отвечаете что-то невразумительное типа "на самом-то деле, я поэкспериментировала с нормализацией". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 10:28 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
1) как правильно заметил Злой Бобр, решение никого не интересует, поэтому я просто учла критику и возможные трудности и более-менее определилась со схемой, спасибо 2) но возникли новые вопросы по ключам и я беру начальную схему как пример и спрашиваю, как лучше сделать ключи в таблице Rate в начальной схеме рассматриваю варианты а) Foreign Key + Primary Key б) Foreign Key + Unique посоветуйте таблицы: Currency: содержит список валют (добавленная) TimeSeries: содержит список временных рядов (часть ДБ к которой добавим конвертер) TimeCurrency: таблица-отношение, используется для генерации ключей (добавленная) Rate: таблица значений курсов, вынесена, чтобы не хранить пустых значений курсов (добавленная) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 00:15 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, умеет, я сразу не подумала :) в TimeCurrency я генерирую ключи по Identity на 10 лет вперед возможно в TimeCurrency такая схема себя не оправдывает, но в случае CountryTime такая схема очень даже удобно, многие статистические показатели зависят от времени-страны и их нужно связывать между собой, поэтому я генерирую ключи в отдельной таблице в таблице Rate я держу имеющиеся ненулевые курсы если коротко, то TimeCurrency используется for consistency ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 00:28 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblabв TimeCurrency я генерирую ключи по Identity на 10 лет вперед возможно в TimeCurrency такая схема себя не оправдывает, но в случае CountryTime такая схема очень даже удобно, многие статистические показатели зависят от времени-страны и их нужно связывать между собой, поэтому я генерирую ключи в отдельной таблице в таблице Rate я держу имеющиеся ненулевые курсы если коротко, то TimeCurrency используется for consistency Схема странная, но назвать явно неправильной ее нельзя - никаких особых проблем кроме усложнения логики она не несет, так что если Вам нравится - почему нет. Float - не очень хороший тип для денежных значений, лучше использовать что-то типа money. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 08:54 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Злой Бобр Спасибо за помощь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 12:48 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, когда работал в компании с международным бизнесом и требовались курсы разнообразных валют, даже тех, которые котируются 1 раз в месяц, то сделал таблицу фактов, в которой курс по отношению к рублю каждой валюты на каждую дату и за период за 10 лет. Никаких коэффициентов, всё максимально подготовлено. Навесил покрывающий индекс. Один раз прогрузил курсы, далее они никогда не меняются, далее только подгружай ежедневно. Даже пересчитывал и загружал курсы по устаревшим валютам - драхма, немецкая марка и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2015, 00:43 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
авторхочу добавить в базу данных конвертацию валюты: 1) все курсы будем хранить по отношению к евро 2) и пересчитывать в любую выбранную валюту 3) схема такая: В базу данных нельзя добавить конвертацию валют, можно только добавить информацию об объекте реального мира-сущности(или проще говоря таблицу), потому что назначение базы данных-хранить информацию. Конвертация-это операция, или функция, на вход которой должно подаваться значение, а на выходе получать пересчитанный денежный курс нужной страны. Вы некорректно ставите задачу, отсюда проблемы с самого начала. Что за база данных, она существует? Тогда надо посмотреть схему, или вы собираетесь добавлять отдельно новую структуру от всей базы данных? Вся реляционная теория строится на сущностях и связей между ними, хотите добавить новую сущность Ее надо написать на человекопонятном языке, тогда ваши мысли будут понятны не только вам, и людям желающим вам помочь, а разработчикам который достанется ваш продукт после вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 01:00 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Есть одна.. Задачка, так скажем. В последнее время не приходят свежие мысли в голову по поводу ее решения... Существует (пока что в вакууме) сервис.. :) По выкупу и пересылке товаров. Который принимает от клиентов рубли , меняет рубли на доллары , на которые в свою очередь выкупаются товары . Процесс в упрощенном виде выглядит так: - клиент добавил в корзину товаров на 100$; - этот же клиент пополняет свой рублевый счет на 10 000 рублей, которые затем меняются по некоему внутреннему курсу на доллары (пусть в данном примере это будет 100 рублей за 1 доллар для удобства); - клиент получает на баланс [долларового счета] 100$; - клиент оплачивает товары в кабинете, - оператор-сотрудник, получив "заказ" клиента, проводит фактическую оплату. - денежка списывается со счета, в свойствах товаров фиксируем курс покупки (чтобы клиент знал, по какому курсу были выкуплены те или иные товары или сколько рублей он потратил на ту или иную вещь), проблем никаких не возникает. Но если вдруг (а такое, к сожалению, бывает) по какому-то из товаров выкуп осуществить не удается (например, товар кончился у поставщика уже после оплаты сделки), проблемный товар удаляется и не принимает участие в подсчете баланса клиента. Допустим, в примере выше оператор смог оплатить 5 товаров на сумму 70$, а шестой товар на сумму 30$ решили отменить. Клиент говорит, что пока не собирается ничего покупать на освободившуюся сумму в 30 долларов. Пусть она полежит на счете. ... Через неделю клиент решает купить вещь за 300 долларов. На счете у клиента осталось 30$ из предыдущего заказа. Курс теперь составляет не 100, а 90 р\доллар, клиент пополняет счет на (90руб\$ * 270$) = 24 300 рублей, которые меняются на доллары и приходят на долларовый счет клиента в личном кабинете. Теперь баланс клиента составляет ровно 300 долларов. Вопрос: как следует подойти к решению вопроса об указании курса данной сделки? Что должно быть вписано в поле "курс"? В данной сделке 30$ менялись по курсу 100 р\$ и 270 по курсу 90 р\$. Думаю, какие-то решения существуют на этот счет.. Догадки о том, как должно быть (или во всяком случае как НЕ должно быть) :). Как в таком случае определяется принадлежность транзакции тому или иному товару?.. Одна транзакция на обмен валюты может послужить основанием для выкупа 10 разных товаров, ровно как и несколько транзакций (с разными курсами обмена) могут обеспечить выкуп лишь одного товара. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 20:28 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
atrsameuser, Я думаю, проблема из-за того, что курс не должен быть атрибутом сущности "сделка" - Ваш пример это адекватно показывает. Т.е. есть операция "конвертация" - у нее есть курс, и есть операция "сделка" - она происходит уже в целевой валюте, и курса у нее нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 21:13 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
sameuserВопрос: как следует подойти к решению вопроса об указании курса данной сделки? Что должно быть вписано в поле "курс"? То, что предписывает налоговый кодекс. Иначе как только бизнес перестанет быть сферическим, Вас загонят туда, где и Ходорковский не бывал. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 21:53 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, интересует ответ на вопрос с точки зрения технической реализации в первую очередь. :) В дополнение - в данном случае суммы совершенно не сопоставимы... ) С суммами транзакций вышеназванного господина) Речь о выкупе товаров с онлайн-магазинов вроде ебей и т.п., тут большим цифрам браться неоткуда.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 22:01 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
sameuserDimitry Sibiryakov, интересует ответ на вопрос с точки зрения технической реализации в первую очередь. :) В дополнение - в данном случае суммы совершенно не сопоставимы... ) С суммами транзакций вышеназванного господина) Речь о выкупе товаров с онлайн-магазинов вроде ебей и т.п., тут большим цифрам браться неоткуда.. Верно тебе ответили. Курс - свойство конвертации. У покупки курса нет!! Единственное, что у меня большие сомнения в том что вы реально меняете клиентские рубли на валюту до оплаты за товар. То есть бизнес-процесс у вас скорее всего неверно описан, и на счету у клиента таки рубли висят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 12:14 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинatrsameuser, Я думаю, проблема из-за того, что курс не должен быть атрибутом сущности "сделка" - Ваш пример это адекватно показывает. Т.е. есть операция "конвертация" - у нее есть курс, и есть операция "сделка" - она происходит уже в целевой валюте, и курса у нее нет. В таком случае теряется определенная точность.. Хотелось бы, конечно, контролировать данные полностью. Мысль вчера пришла. Возможно, не самая лучшая.. Возможно я что-то упустил. Но все же хотел обсудить.. Если.. Создать таблицу принадлежности транзакций примерно такой структуры: Код: html 1. 2. 3. 4. 5. 6. При осуществлении фактической оплаты товаров оператором напротив каждой оплачиваемой товарной позиции расположить выпадающий список с возможностью множественного селекта.. Состав списка - транзакции данного конкретного клиента.. Код: html 1. 2. 3. 4. 5. 6. Что-то вроде того. Конечно, подобный механизм будет оправдан в первую очередь для позиций со смешанным курсом.. В остальных случаях (коих, слава богу, большинство) выпадающий список транзакций будет содержать практически всегда одну транзакцию, а не 2, как в случае с тем клиентом, который решил отложить денежку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 13:19 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
авторЕдинственное, что у меня большие сомнения в том что вы реально меняете клиентские рубли на валюту до оплаты за товар. К счастью или к сожалению, именно так и выстроен бизнес-процесс. Переделывание не представляется возможным (пока что). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 13:30 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
[quot Если... Что-то вроде того..[/quot] Этот изобретенный велосипед называется партионный учет себестоимости, класически бывает по методу FIFO или LIFO и совершенно не нужен вам!!!! Контролирость данные полностью - это как раз и есть введение операции "конвертация" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 14:24 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
sameuserавторЕдинственное, что у меня большие сомнения в том что вы реально меняете клиентские рубли на валюту до оплаты за товар. К счастью или к сожалению, именно так и выстроен бизнес-процесс. Переделывание не представляется возможным (пока что). Как так?? Меняются рубли на валюту сразу при зачислении?? Ну так вообще какие проблемы?? Тогда весь учет и баланс клиента ведите и отображайте ему в валюте!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 14:26 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
авторМеняются рубли на валюту сразу при зачислении?? Не сразу, процесс требует время. За которое, кстати, иногда курс меняется. Это другая головная боль.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 01:29 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
sameuserавторМеняются рубли на валюту сразу при зачислении?? Не сразу, процесс требует время. За которое, кстати, иногда курс меняется. Это другая головная боль.. тем более в операцциях клиент должен видеть операцию "конвертации" - с реальной датой этой конвертации. Тогда у него не будет вопроса "шозанах". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 10:37 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
автортем более в операцциях клиент должен видеть операцию "конвертации" - с реальной датой этой конвертации. Тогда у него не будет вопроса "шозанах". Разумеется. Предполагается детальный учет транзакций обмена валюты с указанием даты, суммы списания рублей, суммы зачисления долларов, курса обмена (ожидаемого и фактического, по которому состоялась процедура обмена). авторЭтот изобретенный велосипед называется партионный учет себестоимости, класически бывает по методу FIFO или LIFO и совершенно не нужен вам!!!! Очень бы не хотелось отказываться от полной детализации, так скажем. Про партионный учет почитал немного, спасибо. Знал бы раньше - не потратил 2 дня на размышления. Изобретение велосипедов отнимает время.. Потому, наверное, и решил на форум зайти )) Бывает, что заказ клиента может состоять всего из одной позиции (одной строки в личном кабинете). Например, какая-то дорогая вещь или же наоборот, множество мелких и дешевых (1 action-камера или 20 пар перчаток). И может быть так (я на предыдущей странице акцентировал внимание), что эта самая одна позиция для своей оплаты будет требовать доллары не с одной, а сразу с двух транзакций по обмену валюты (напр., если от предыдущих покупок осталось 100 долларов на счете, клиент докидывает еще 100 (совсем по другому курсу), а затем оплачивает одну позицию на 200 долларов. > Верно тебе ответили. Курс - свойство конвертации. У покупки курса нет!! Клиент спросит: скажи мне, любезный, во сколько мне обошлась вот эта вот вещь, когда я ее покупал, в рублях? Какие есть варианты? а) отказаться и забить - не хотелось бы.. б) считать по действовавшему на ту дату курсу обмена валют - возможны неточности (см. пример с оставшимися 100$ на счете) в) считать по курсу обмена ближайшей к дате покупки товара транзакции - сработает в большинстве случаев (но не во всех, см. тот же пример) г) ввести партионный учет - сложновато, лишний код, лишняя нагрузка на оператора, не исключены ошибки того же оператора Причем если 1 раз у клиента остались средства с предыдущих покупок, то с большой долей вероятности в будущем в составе баланса также будут присутствовать доллары с разных транзакций (по 1-10 долларов или по несколько центов). Ну и возможность изменения курсов за время, требуемое для обмена, также подкидывает хаотичности процессу. Подобные случаи "смешанного" баланса, я так думаю, будут наблюдаться гораздо чаще, чем казалось изначально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 21:52 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
sameuserКлиент спросит: скажи мне, любезный, во сколько мне обошлась вот эта вот вещь, когда я ее покупал, в рублях? Какие есть варианты? а) отказаться и забить - не хотелось бы.. б) считать по действовавшему на ту дату курсу обмена валют - возможны неточности (см. пример с оставшимися 100$ на счете) в) считать по курсу обмена ближайшей к дате покупки товара транзакции - сработает в большинстве случаев (но не во всех, см. тот же пример) г) ввести партионный учет - сложновато, лишний код, лишняя нагрузка на оператора, не исключены ошибки того же оператора Нагрузка на оператора не нужна - Иван-Дурак упомянул же, что партионный учет обычно реализуется по методу LIFO или FIFO. Спрашивать оператора, какие именно доллары тратятся на покупку, купленные по 30 рублей или по 80 - бессмысленно, клиенту это неважно (если он не юрлицо - но тогда он эти расчеты ведет сам). Программа вполне может это решать сама, в соответствии с выбранной логикой учета. Но вообще мультивалютный учет - непростая вещь и для нужд обычного инет-магазина довольно избыточная. Вот Вы хотите сообщать клиенту, во сколько в рублях ему обойдется покупка. А если клиент скажет "нет, чего-то в рублях выходит дофига - не буду покупать, давайте-ка мне лучше эти рубли назад"? Выйдет неловко. Проблема даже не в технической реализации (она хоть и непростая, но вполне изжеванная) - а в том, что придется прописывать кучу всего в регламенты, в оферту для клиента, чтобы в случае чего успешно решать такие вопросы в судах. Так что на Вашем месте я бы собрал бухгалтера, юриста и директора и спросил у них "А мы все-таки точно хотим вести учет клиентской позиции в нескольких валютах сразу?" ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 08:40 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
sameuserКлиент спросит: скажи мне, любезный, во сколько мне обошлась вот эта вот вещь, когда я ее покупал, в рублях? Какие есть варианты? Правильный вариант только один. Ответить - эта вещь обошлась вам в 100$. Так как мы потратили на нее именно 100$ а не рубли. И эти 100$ взяли из вашего кошелька. А Как и по какому курсу попали 100$ в ваш кошелек - смотрте историю конвертаций. Это самый правильный и честный ответ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 12:36 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Ничего более полезного я придумать не смог по вопросам, разбиравшимся выше. Возьму предложенные способы в работу :) Далее приходится задумываться о хранении записей движения средств (транзакций). Предполагается наличие в системе нескольких внутренних счетов (напр., рублёвый_банк1, рублевый_киви, рублевый_вебмани, долларовый и т.п.) Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. И tran_from_account, и tran_to_account могут быть null. Если NULL'ом является сущность tran_from_account, то предполагается, что средства поступили извне (ENUM № 1 - пополнение баланса клиентом), а если tran_to_account является типом NULL - то подразумевается вывод средств из системы (ENUM № 3 - возврат денег клиенту, например). Если же и tran_from_account и tran_to_account не являются NULL'ом - то это будет обмен валюты или перевод со счета на счет (ENUM - тип № 2) При таком раскладе в базе отсутствуют сущности, отвечающие за определение направления входа и выхода средств (точнее, поступления и вывода). Вместо них используется NULL, т.к. зачисление может осуществляться разными способами, как и вывод может быть произведен на разные кошельки или счета в разных банках. Была мысль вместо NULL использовать ноль, но тогда бы пришлось создать системный счёт account_id=0, который выступал бы как свалка для описанных выше задач. От этой мысли я отказался. Баланс клиента user_id № 150 в рублях будет считаться примерно так (подсчетом суммы поступлений и последующим вычитанием из нее всех возможных расходов).. Я, возможно,чуть напутал с синтаксисом, но .. Суть передать смогу. :) SELECT ( SUM(tran_amount) in transaction_table WHERE tran_owner=150 AND tran_type=1 AND tran_from_account IS NULL ) - // выше вычислили сумму всех поступлений ......SELECT ( SUM(tran_amount) in tran_table WHERE tran_owner=150 AND tran_type=2 AND tran_from_account IS NOT NULL AND tran_to_account IS NOT NULL ) - ......// вычитаем сумму всех списаний по обмену валюты ............SELECT ( SUM(tran_amount) in tran_table WHERE tran_owner=150 AND tran_type=3 AND tran_to_account IS NULL ) ............// вычитаем сумму всех выплат клиенту (возвратов средств) Возможно, конечно, удастся ограничиться в запросах выше лишь указанием типа транзакций (tran_type) без последующей логической проверки (напр., AND tran_from_account IS NOT NULL AND tran_to_account IS NOT NULL ). Я пока еще не могу точно определить, потребуются ли эти условия для обеспечения целостности расчетов, исключая возможность ошибки где-то.. Или же послужат лишней нагрузкой. Вероятно, ответ придет позднее (в процессе дальнейшей разработки и проектировки). Готов к критике. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2016, 12:18 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Будем считать, что возражений не поступило. И на том спасибо! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2016, 01:30 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
У тебя на три типа операции - три селекта. А когда типов будет 100 ??? Баланс должен собиратьс простой суммой всех! операций по нему. Операции себе заведи с + приход, с - уход. То есть сумируешь ВСЕ по счету, а там уже автоматом приходы прибавляются, уходы отнимаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 09:37 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
А, да. Этот велосипед называется "двойная запись", тоже давно изобретен, погугли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2016, 09:39 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
авторУ тебя на три типа операции - три селекта. А когда типов будет 100 ??? Баланс должен собиратьс простой суммой всех! операций по нему. Операции себе заведи с + приход, с - уход. То есть сумируешь ВСЕ по счету, а там уже автоматом приходы прибавляются, уходы отнимаются. Спасибо за ваш отзыв. Думаю, едва ли этих типов наберется более 5-6... И т.к. биллинг бивалютный, одним селектом все равно, видимо, не отделаешься.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 00:46 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Забыл добавить - валютный баланс тоже предполагается подсчитывать именно как сумму поступлений на валютный счет от клиента ID=XXX, за вычетом всех списаний и за вычетом всех товаров. Ибо сумма за каждый конкретный товар собирается из множества мелких расходов вроде страховки, цен на доставку по регионам, разных комиссий и прочая-прочая, что невозможно собрать в единый тарифный план или еще как-то структурировать (да и не нужно оно, т.к. значения всех этих страховок, доставок и пр. регулярно меняются на лету). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 14:30 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
mini.weblab, а каким образом привязать конвертацию к ежедневному изменению курса доллара? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 12:57 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Дмитрий Рюриковmini.weblab, а каким образом привязать конвертацию к ежедневному изменению курса доллара? вычеркните слово "изменению", добавьте слово "дату" перед словом "конвертации" перечитайте вопрос и поймете ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 14:01 |
|
||
|
конвертация валют
|
|||
|---|---|---|---|
|
#18+
Дмитрий Рюриков, 1) можно использовать формулу, т.е на основе имеющихся данных пересчитать сколько стоит доллар (или любая другая интересующая валюта) в различных валютах 2) если вы будете работать с долларами, то вам имеет смысл хранить стоимость доллара (а не евро) в различных валютах 3) если вы работаете с форексом, то вам схема не подойдет: нужно рассматривать не валюты, а валютные пары 4) приведенная схема использовалась для конкретной уже работающей базы, поэтому она выглядит не совсем стандартно, это нужно учитывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2016, 14:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540331]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 521ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...