Мы разрабатываем приложение для торговли акциями и обсуждаем, следует ли вводить тип данных для валюты.
Предлагаемый тип данных Currency
содержит сумму и тип валюты (например, USD, EUR, JPY).
Я против этого в данный момент, потому что мы использовали бы это и для типа свойства постоянных bean-компонентов.
Во-первых, он будет содержать избыточные данные. Возьмите, например, класс StockQuote
, который содержит OHLC (цены открытия, максимума, минимума и закрытия) данной акции. Если бы каждый из них был представлен экземпляром Currency
, тогда все OHLC имели бы ссылки на один и тот же тип валюты (например, USD). В финансовых приложениях валютные значения используются повсеместно, а не просто котировки акций, поэтому мы говорим о большой избыточности.
Во-вторых, экземпляр Currency
представляет собой комбинацию из двух значений (сумма и тип валюты), поэтому вы либо полностью отбрасываете тип валюты и сохраняете только поле суммы в таблице базы данных, либо создаете тип валюты столбец в таблице для каждого свойства Currency
, которое будет избыточным в таблице и нарушит 2-ую нормальную форму. В любом случае, чтение записи из таблицы обратно в объект StockQuote
было бы невозможно с JPA, а в лучшем случае - с Hibernate.
Кто-нибудь сталкивался с подобными проблемами раньше? Это нормально для финансовых приложений иметь пользовательский класс валюты? Если да, то как вы реализовали это с JPA / Hibernate?