Progettazione del sistema per l'utilizzo del calcolo del credito

1

Stiamo implementando un sistema in cui un utente può acquistare "crediti" da spendere in due elementi. Sto sperando in suggerimenti su come implementare un tale sistema. Abbiamo due modi per utilizzare i crediti: ItemA e ItemB.

Quando acquisti crediti, l'utente può acquistare crediti in blocco che riduce il costo di un credito, ad esempio (questo non è vero costo ma solo un esempio):

Cost     | Cost ItemA (each)  | Cost ItemB (each)
-----------------------------------------------
$400     | 16c                | 10c 
$800     | 12c                | 8c
$1200    | 8c                 | 4c

Uno scenario di esempio:

Un utente ha prelevato $ 400 di crediti e poi la settimana prossima ha acquistato $ 1200 di crediti. Ciò significa che possono avere $ 400 di crediti a 16c (ItemA) e 10c (ItemB) ciascuno e anche $ 1200 di crediti a 8c (ItemA) e 4c (ItemB) nel sistema.

Tutti gli utenti vedranno nel sistema che hanno un totale di $ 1600 di crediti (1200 + 400) disponibili, quando passano il credito ridurranno il totale di quanto spendono, ad esempio:

- Spend 2000 of ItemA 
  Reduce by $320 (16c each), $80 remaining of first credit buy

$1280 overall remaining

- Spend 2000 of ItemB 
  Reduce by $80 (10c each) 800 credits
  Reduce by $48 (4c each) 1200 credits

Abbiamo un database per archiviare i crediti, che saranno distribuiti sotto forma di una chiave che contiene la quantità di crediti che contiene così come i controlli di convalida. Gli articoli che la spesa, ad esempio ItemA o ItemB, verranno archiviati nel database.

Come implementeresti quanto sopra riguardo alla struttura e alla logica della tabella del database per calcolare i crediti rimanenti e spesi?

    
posta user1653400 17.07.2018 - 03:58
fonte

1 risposta

1

Ciò di cui hai bisogno è una tabella con gli articoli e il loro prezzo base, e poi accoppiare quella con una tabella delle quantità e degli sconti alla quantità specificata.

La formula diventa: Prezzo rettificato = Prezzo base - Sconto per una data quantità

Una tabella "Articoli" di esempio:

+------------------------+
| Items                  |
+----+------+------------+
| Id | Name | Base Price |
| 1  | A    | 16         |
| 2  | B    | 10         |
+----+------+------------+

E una tabella utilizzata per calcolare gli sconti:

+-------------------------------+
| Item Discounts                |
+---------+----------+----------+
| Item ID | Quantity | Discount |
| 1       | 25       | 0        |
| 1       | 67       | 4        |
| 1       | 150      | 8        |
| 2       | 40       | 0        |
| 2       | 100      | 2        |
| 2       | 300      | 6        |
+---------+----------+----------+

Questo ti dà molta flessibilità nella definizione degli sconti e nella ridefinizione degli sconti - senza ridisegnare l'applicazione. Gli sconti diventano guidati dai dati.

Crea una vista del database per appiattire questi due tavoli e calcola il prezzo scontato per semplificare il tuo lavoro a livello di applicazione:

+-------------------------------------------------------------+
| Item Discounts View                                         |
+---------+----------+----------+------------+----------------+
| Item ID | Quantity | Discount | Base Price | Discount Price |
| 1       | 25       | 0        | 16         | 16             |
| 1       | 67       | 4        | 16         | 12             |
| 1       | 150      | 8        | 16         | 8              |
| 2       | 40       | 0        | 10         | 10             |
| 2       | 100      | 2        | 10         | 8              |
| 2       | 300      | 6        | 10         | 4              |
+---------+----------+----------+------------+----------------+

Il "Prezzo scontato" è la differenza tra il prezzo base dell'articolo e lo sconto corrente in ogni riga. Questo può essere calcolato automaticamente nella vista del database e l'interrogazione per il prezzo può essere semplice come:

SELECT "Discount Price"
FROM "Item Discounts View"
WHERE "Item ID" = 1
  AND "Quantity" <= <QuantityRequestedByShopper>
ORDER BY "Quantity" DESC
LIMIT 1;

Poiché questo è normalizzato correttamente, la regolazione del prezzo di base di un oggetto si sovrapporrà alla vista e tutti i prezzi (inclusi gli sconti) verranno immediatamente adattati. Ti dà anche un set di dati di riferimento quando dividi la transazione (i primi 25 sono 16c, i successivi 67 sono 12c, ecc.).

Questo tipo di visualizzazione del database ha il vantaggio di essere l'origine dei dati da mostrare agli acquirenti informandoli degli sconti che possono ottenere prima di effettuare una transazione. Il reparto marketing probabilmente lo apprezzerebbe.

    
risposta data 17.07.2018 - 17:23
fonte

Leggi altre domande sui tag