paolo@bimodesign.com | +34 608 61 64 10

E-Commerce

        

Couponic - Analisi della Base Dati (Parte I)

In questo primo articolo sulla Base Dati di Couponic, vedremo la struttura dei dati relativi ai coupons acquistati, ovvero il cuore dell'applicazione. In un successivo articolo illustrero' invece la gestione della localizzazione dei venditori, mentre per la struttura della base dati riguardante la fatturazione e la data di redeemed, potete far riferimento rispettivamente a questi due articoli: Generare Numeri Fattura ed Aggiugere data redeemed
Illustrando la struttura delle tabelle, non mi soffermero' nel dare giudizi sulle modalita' in cui e' stato pensato il DB, che, a titolo del tutto personale, considero avrebbe potuto essere definito meglio.

Iniziamo l'analisi del DB, dalla tabella dove vengono inseriti i coupons acquistati da un utente, per poi verificare le tabelle che presentano relazione con quest'ultima. (considerate che non sono presenti FK e che i nomi dei campi sono quindi gli identificatori delle relazioni stesse).
cpns_DealCoupon
La tabella presenta queste informazioni, oltre al campo Id autoincrementale.
- orderId
- dealId
- priceId
- userId
- status
- userStatus
- hash
- redemptionCode
- redeemLocationId
- redeemDate (aggiunto da me e che spieghero' in un successivo articolo)

Uno o piu' coupons fanno riferimento ad una promozione/Deal (DealId) e ad un prezzo (PriceId) ad esso assegnato. Se una promozione presenta piu' di un prezzo, definito dal venditore, questo si chiama in gergo tecnico multidealing ed in fase di acquisto, il compratore (userId) puo' scegliere tra varie opzioni relative alla stessa promozione. Queste sono quindi le informazioni di base per identificare l'appartenenza di un Coupon.

Nel dettaglio il DealId fa riferimento quindi alla tabella cpns_Deal dove troviamo varie informazioni sulla promozione tra le quali, in questo articolo, ci soffermeremo solo su una di queste: CompanyId. Questo identificatore non e' nient'altro che il venditore a cui appartiene la promozione, ed i cui dati li possiamo trovare nella tabella cpns_Company.
In quest'ultima, l'informazione che piu' ci interessa e' il campo userId ovvero l'utente che fa riferimento al Venditore e con il quale egli stesso accede al proprio pannello di controllo (questo sara' argomento di un successivo articolo).
La tabella degli utenti (cpns_User) presenta, oltre a varie informazioni quali la username, password, data creazione etc..., anche il Ruolo (campo role) dell'utente. Infatti in questa tabella troveremo questi 3 tipi di utenti:
- administrator (il super user. Possono essere presenti piu' utenti amministratori)
- company (l'utente venditore)
- user (l'utente compratore)

Nota: Anche se funzionalmente possibile, e' preferibile che un utente compratore sia solo quello che abbia come ruolo "user" e non quello di "company" o "Administrator". Questo per evitare problemi al momento di visualizzare nel pannello di controllo le informazioni dedicate all'utente normale e gli altri.

Vediamo ora come viene gestito il prezzo di una promozione.
Come ho scritto poco fa, una promozione puo' avere piu' prezzi (multidealing) e quindi avremo bisogno di queste informazioni nella tabella cpns_DealPrice: - DealId (ovvero il codice della promozione)
- Price (il prezzo finale al pubblico)
- Value (il valore di mercato)
- Main (se 1 e' il prezzo principale che verra' indicato al compratore)

Nota: Nel caso in cui una promozione presenti un solo prezzo, sara' comunque presente un record in questa tabella.

Ora vediamo come viene gestito l'ordine di acquisto (orderId).
Un compratore puo' acquistare nello stesso momento (ovvero nello stesso ordine d'acquisto) vari coupons di varie promozioni. Quindi nella tabella principale cpns_DealCoupon potremmo avere piu' record con lo stesso valore dell'OrderId.
La tabella degli ordini cpns_PaymentOrder, presenta varie informazioni tra cui i campi:
- status(lo stato dell'ordine. 0/1/2/3. Lo stato "0" e' l'unico che indica che l'ordine non e' stato ancora completato o che non e' andato a buon fine.)
- method(il tipo di pagamento utilizzato dal cliente. "Gateway" - CreditCard, "Paypal", "system" - acquisto effettuato con il credito assegnato dall'amministratore al compratore)

Un coupon presenta uno stato (campo status), riconducibile a questi valori.
- 1: Il coupon e' disponibile se la data di fine della promozione e' successiva a quella attuale. Altrimenti e' scaduto
- 2: Il coupon e' stato gia' usato
- 3: Il coupon e' scaduto (come nel caso 1b)
- 4 e 5: sono gli stati della fatturazione, che ho inserito io e che descrivero' in un successivo articolo.

Per concludere questo articolo, vediamo i due codici di sicurezza che identificano un coupon. Il codice del coupon (campo hash) ed il codice di redeemed (campo redemtionCode della tabella cpns_DealCoupon). Per evitare la possibilita' di falsificare un cupon (che arriva all'utente compratore via email), entrambi i codici lo identificano. Entrambi i codici possono essere sia generati automaticamente sia inviati dal venditore all'amministratore, prima di attivare la promozione.
Il RedeemedCode presenta una particolarita'. Viene infatti legato ad un altro codice, oldRedemptionCode della tabella cpns_JgredeemCodes, dove, nel caso quest'ultimo sia Null vuol dire che il coupon non e' stato ancora usato.

A questo link trovate lo Schema delle tabelle analizzate nell'articolo.