NHibernate - 货币类型 - 表中的多个字段

时间:2010-11-03 23:50:51

标签: c# sql nhibernate

我正在尝试使用NHibernate将金融交易保存到数据库,并且发现了一些建议使用 Money Type 的博客帖子,其中金额存储为双倍且货币为存储为字符串 - 即数据库中将有两个字段。

就我的目的而言,我将在同一张表中有多个财务记录 - 例如单价,美元税,美元储蓄等。上述方法可行,但会产生重复数据,因为每个(在本例3中)字段的货币类型都有一列。这是不必要的,因为货币对于储蓄和价格等都是一样的 - 如果它是1美元,那么对于另一个来说它将是美元......

有没有人遇到类似的问题,如果有的话,你能告诉我你最终解决的问题吗?

由于

JP

1 个答案:

答案 0 :(得分:0)

我也见过很多地方同样的事情,到目前为止我还没有看到原因。它有什么用?这不是人们开展业务或逻辑系统如何运作的方式。如果我从美国开展国际业务,我的系统仍将拥有美元的内部基础。

货币作为事件的边界条件非常重要,您需要汇率。即使是国际银行。我目前把我所有的药物钱,美元,发给我可以获得我的钱的Caymans也以美元计算。也许你的是欧元。所以他们得到它,他们所做的就是将它们转换为内部使用的任何货币,海贝壳。现在他们必须跟上这些东西,但他们在任何时候必须知道的是美元/海贝壳之间的汇率,以了解它们对我的影响,以及海贝壳/欧元知道他们有多少是你的意思。这个小小的东西不会为他们蹲下,要么它是一个有价值的对象,怎么可能呢?在这种情况下,货币将固定在帐户级别,而不是一堆这些东西浮动。

一般来说,货币将由其他东西修正,就像你观察到的那样。一行数据是相关的,您应该能够对货币值进行数学计算,在这种情况下,连续货币必须是相同的。也许我在欧洲做生意,不得不用欧元报价。我可能想要为历史目的记录报价与两种货币的付款。我怀疑这是否是单行设计,但如果我决定它,你描述的Money对象是一个带有两个组件的单个值对象。它应该被认为是一个单一的实体,我认为我在这里所描述的与“Money”对象在语义上是不同的,并且可能由十进制/货币列明确地描述,我们不会尝试将其合成为一个单一的; e Money价值是因为无法对它们进行比较或对它们进行数学计算。

我不会走这条路,因为会导致混淆语义中的细微不一致,并且可能不会增加任何内容。你真的要去哪里使用它,行货币不会给你同样的东西,通常以更合理的方式?

但是如果经理坚持你做的事情基本上没有意义或者更糟,就NHibernate来说,你已经宣布了一个原子实体,Money恰好有两个组件,一个十进制和一个字符串。因为Money现在是一个单独的原子单元,所以每个钱都必须有两列,没有避免重复列的解决方法。