Мне нужна таблица для хранения состояния финансовой транзакции.
Состояние этой транзакции может быть примерно смоделировано этим классом.
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
)
Существуют ли альтернативные конструкции?
Спасибо, лентяйка.