我需要一张表来存储金融交易的状态。这个事务的状态可以用这个类来粗略的建模。
class FinancialTransaction
{
Integer txId,
Money oldLimit,
Money newLimit,
Money oldBalance,
Money newBalance,
Date txDate
}
class Money
{
Currency curr,
BigDecimal amount
}
我最初的架构设计如下所示:
CREATE TABLE tx
(
txId bigint(20) unsigned NOT NULL,
oldlimit_currency varchar(3) NULL,
oldlimit_amount decimal(7,5) default 0.00,
newlimit_currency varchar(3) NULL,
newlimit_amount decimal(7,5) default 0.00,
----snipped----
PRIMARY KEY (txId)
)
我担心两件事:
- 每笔交易都基于一种货币进行。关于是否需要支持可能以多种货币发生的交易,我还没有想得足够多。假设它没有改变;那么只维护一个货币栏不是更节省空间吗?我会后悔这个简单的解决方案吗?
- 由于每个 Money 项目都是一个值对象,我是否应该将所有 Money 对象保存到单独的 Money 表中,并让原始表使用 moneyIds 作为 Money 表的外键?
那是,
CREATE TABLE tx
(
txId bigint(20) unsigned NOT NULL,
oldlimit_money_id int NOT NULL,
newlimit_money_id int NOT NULL,
----snipped----
PRIMARY KEY (txId),
FOREIGN KEY (oldlimit_money_id) REFERENCES MONEY(id) ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY (newlimit_money_id) REFERENCES MONEY(id) ON DELETE NO ACTION ON UPDATE NO ACTION
)
有替代设计吗?
谢谢懒人网。