Devo apportare alcune modifiche a un sistema di e-commerce per aggiungere alcune informazioni aggiuntive e ho voluto cogliere l'opportunità per apportare alcuni miglioramenti e renderlo più flessibile. Quando un cliente effettua un ordine, dobbiamo memorizzare diverse voci di informazioni con ogni articolo ordinato; ad esempio, il prezzo del prodotto, il prezzo di spedizione, l'imposta riscossa, eventuali rettifiche apportate.Qual è lo schema del database suggerito per le informazioni su ordini/fatture?
sto discutendo se questi campi devono essere conservati in modo discreto, come ad esempio (esempio semplificato):
ORDER_LINE_ITEM
OrderLineItemID
ProductID
Qty
Price
Shipping
Handling
SalesTax
Adjustment
Per esempio, ho potuto quindi calcolare il prezzo complessivo del cliente ha pagato:
SELECT Qty*(Price+Shipping+Handling+SalesTax) As TotalCollected FROM ORDER_LINE_ITEM
O se dovrei usare una struttura più indiretta:
ORDER_LINE_ITEM
OrderLineItemID
ProductID
Qty
ORDER_LINE_ITEM_ENTRIES
OrderLineItemEntryID
OrderLineItemID
EntryType
Value
Ad esempio:
1 | 1 | Price | $10
2 | 1 | Shipping | $5
3 | 1 | Handling | $1
4 | 1 | SalesTax | $1
5 | 1 | Adjustment | -$3.50
Il vantaggio con questo è che posso memorizzare ulteriori informazioni in seguito senza alterare lo schema della tabella. Tuttavia, il recupero delle informazioni e l'esecuzione dei report diventano più complicati e lenti.
Esiste una buona pratica per archiviare queste informazioni nei database di ordini/fatture?
Grazie in anticipo,
Dan
Cosa hai scelto? –
Ho finito per eseguire la struttura denormalizzata in cui ho il prezzo, la spedizione, la gestione, ecc. Come parte di ciascun elemento pubblicitario e TotalPrice, TotalShipping, TotalHandling, ecc. Come parte dell'odore. I totali dell'ordine vengono ricalcolati dal livello aziendale ogni volta che viene modificato qualsiasi valore (che è raro). Ciò rende molto facile e veloce il recupero dei report (cosa che accade spesso) senza che i consumatori dei dati debbano conoscere la struttura. –