Я должен внести некоторые изменения в систему электронной коммерции, чтобы добавить дополнительную информацию, и хотел воспользоваться возможностью, чтобы сделать некоторые улучшения и сделать ее более гибкой. Когда клиент размещает заказ, мы должны хранить несколько элементов информации с каждым упорядоченным предметом; например, цена продукта, цена доставки, собранный налог, любые корректировки, которые были сделаны.
Я обсуждаю, должны ли эти поля храниться дискретно, например (упрощенный пример):
ORDER_LINE_ITEM
OrderLineItemID
ProductID
Qty
Price
Shipping
Handling
SalesTax
Adjustment
Например, я мог рассчитать общую цену, которую заплатил клиент:
SELECT Qty*(Price+Shipping+Handling+SalesTax) As TotalCollected FROM ORDER_LINE_ITEM
Или, если я должен использовать более непрямую структуру:
ORDER_LINE_ITEM
OrderLineItemID
ProductID
Qty
ORDER_LINE_ITEM_ENTRIES
OrderLineItemEntryID
OrderLineItemID
EntryType
Value
Например:
1 | 1 | Price | $10
2 | 1 | Shipping | $5
3 | 1 | Handling | $1
4 | 1 | SalesTax | $1
5 | 1 | Adjustment | -$3.50
Преимущество этого заключается в том, что я могу хранить дополнительную информацию позже без изменения схемы таблицы. Однако получение информации и выполнение отчетов становится более сложным и медленным.
Существует ли наилучшая практика для хранения этой информации в базах данных заказа/счета?
Спасибо заранее,
Dan