金融取引の状態を保存するためのテーブルが必要です。このトランザクションの状態は、このクラスで大まかにモデル化できます。
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)
)
2つのことが私を心配しています:
- 各トランザクションは、1つの通貨に基づいて発生します。複数の通貨で発生する可能性のある取引をサポートする必要があるかどうかについては、十分に考えていません。それが変わらないと仮定すると、それなら、1つの通貨列を維持するだけの方がスペース効率が良いのではないでしょうか。この単純な解決策を後悔しますか?
- 各Moneyアイテムは値オブジェクトなので、代わりにすべてのMoneyオブジェクトを個別のMoneyテーブルに保存し、元のテーブルでMoneyテーブルの外部キーとしてmoneyIdsを使用する必要がありますか?
あれは、
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
)
代替デザインはありますか?
lazywebに感謝します。