NHibernate - Тип денег - Несколько полей в таблице - PullRequest
1 голос
/ 04 ноября 2010

Я пытаюсь сохранить финансовые транзакции в базе данных, используя NHibernate, и наткнулся на несколько постов в блоге, предлагающих использовать Тип денег , при котором сумма сохраняется как двойная, а валюта сохраняется в виде строки - т.е. в базе данных будет два поля.

Для моих целей у меня будет несколько финансовых записей в одной таблице - например, Цена за единицу, налог в долларах, экономия в долларах и т. Д. Вышеописанный подход будет работать, но приведет к дублированию данных, поскольку для каждого из этих (в данном примере 3) полей будет столбец с типом валюты. В этом нет необходимости, поскольку валюта всегда будет одинаковой для сбережений, как для цены и т. Д. - если это доллары для одного, это будут доллары для другого ...

Кто-нибудь сталкивался с подобной проблемой, и если да, то можете ли вы сказать мне решение, которое вы выбрали?

Спасибо

JP

1 Ответ

0 голосов
/ 09 ноября 2010

Я видел то же самое во многих местах, так что пока я не видел объяснения, почему.Что хорошего в этом?Это не то, как люди ведут бизнес или как работает логическая система.Если я веду международный бизнес из США, мои системы по-прежнему будут иметь внутреннюю основу доллара.

Валюта важна как граничное условие для события, когда вам нужен обменный курс.Даже международный банк.В настоящее время я отправляю все свои деньги на лекарства, доллары США, на Кайманы, где мои деньги доступны мне, также в долларах.Может быть, у вас в евро.Таким образом, они получают это, и что они делают, так это конвертируют их в любую валюту, которую они используют внутри, морские раковины, что угодно.Теперь они должны идти в ногу с этим, но что они должны знать в любой момент времени, так это обменный курс между долларами / морскими раковинами, чтобы узнать, сколько они мне стоят, и морскими раковинами / евро, чтобы узнать, сколько онидля вас.Эта маленькая гадость не делает для них приседания и не является ценностным объектом, как это могло быть?Валюта в этом случае будет фиксированной на уровне счета, а не куча таких вещей.

Обычно валюта будет фиксироваться чем-то другим, как вы заметили, на уровне строки.Строка данных связана, вы должны быть в состоянии сделать математику с денежными значениями, и в этом случае валюта в строке должна быть одинаковой.Возможно, я занимаюсь бизнесом в Европе, и мне приходится цитировать в евроЯ мог бы захотеть записать для исторических целей котировку против оплаты в обеих валютах.Я подвергаю сомнению, является ли это проектом с одной строкой, но если бы я решил, что описываемый вами объект Money является объектом с одним значением и двумя компонентами.Его следует рассматривать как единое целое, и я думаю, что то, что я здесь описываю, семантически отличается от объекта «Деньги» и может также быть явно описано в столбцах десятичной дроби / валюты, которые мы не пытаемся объединять в единые деньги;значение, потому что они не могут быть сравнены или математические вычисления были сделаны на них.

Я бы просто не пошел этим путем, потому что это приводит к запутанным тонким несоответствиям в семантике и, вероятно, ничего не добавляет.Где вы когда-нибудь действительно будете использовать это, чтобы строчная валюта не давала вам того же, обычно более рациональным способом?

Но если менеджер настаивает на том, чтобы вы делали что-то, что в корне бессмысленно или хужеВ терминах NHibernate вы объявили одну атомарную сущность Money, в которой есть 2 компонента: десятичная дробь и строка.Поскольку деньги теперь представляют собой единичную атомную единицу, вы должны всегда иметь оба столбца для каждых денег, поэтому для избежания дублирования столбцов не существует обходного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...