Baze de date, E-commerce Gestiunea categoriilor dinamice in comenrtul online
Articol_SQL image couverture

Baze de date, E-commerce

Gestiunea categoriilor dinamice in comenrtul online

Tematica : Introducerea datelor redundante in vederea favorizarii vitezei in SQL

O data cu dezvoltarea comertului on-line si aparitia noilor dispozitive de unde putem accesa internetul, viteza de incarcare a paginilor pentru magazinele on-line a devenit critica. Pierderile datorate utilizatorilor care parasesc site-ul pentru ca paginile se incarca lent este dificil de masurat.
Iar in cazul site-urilor de e-comert, cateva secunde de intarziere in descarcarea de informatii se reflecta direct prin scaderea numarului de consumatori si implicit prin comenzi mai putine. In aplicatiile care au in spate baze de date, primul criteriu de eficacitate este viteza cu care aducem datele de la serverul SQL, fie el Oracle, SQL Server sau MySql.

Daca pentru pagina de prezentare a unui produs lucrurile sunt relativ simple, avand de executat o interogare pe tabela de produse, dupa ID produs plus cateva legaturi, lucrurile devin mult mai complicate cand vine vorba de categoriile create dinamic.
Categoriile create dinamic sunt un produs cartezian intre categorii si produse. O categorie contine mai multe produse, un produs apartine mai multor categorii.

De exemplu, urmatorul caz :
– tabela de categorii – ID categorie si informatiile specifice categoriei
– tabela de produse – ID produs si informatiile specifice produsului
– tabela de etichete – ID eticheta si informatiile aferente
– tabela de legatura intre produse si etichete (relatie multi la multi)
– tabela de legatura intre categorii si etichete (relatie multi la multi)

Iata cum arata tabelele (versiunea simplificata) :

Etichete

ro01etichete

Categorii

ro02categorii

Produse

ro03produse

Legaturile dintre tabele :

Liaisons entre les tables

Chiar si in modul cel mai simplu, pentru a obtine lista de produse aferenta unei categorii avem nevoie de o interogare pe cinci tabele. Lucrurile se complica si mai mult cand punem si ordonarea produselor in categorie dupa pret, cele mai vandute, notele acordate de cumparatori, cele mai noi produse.

De exemplu, ordonarea dupa « cele mai vandute » se face in functie de fiecare categorie. Pentru categoria « Cadouri pentru barbati personalizate cu poza » vom tine cont de vanzarile din ultimele 90 de zile (de exemplu). Pentru categoria « Valentine’s Day : Cadouri pentru femei » in schimb, trebuie sa luam in considerare vanzarile din perioada dinaintea Valentine’s Day. Altfel, ordornarea nu ar avea nici o relevanta.

Nu e greu de intuit ca la interogarea noastra va trebui sa adaugam legaturile cu tabelele de comenzi. Daca categoriile si produsele sunt putine cantitativ (produsele de ordinul miilor, categoriile de ordinul zecilor), comenzile si detaliile lor pot atinge ordinul sutelor de mii.

O solutie pe care am aplicat-o pentru un client a fost creearea unei tabele precalculate care sa contina legatura directa dinte categorii si produse, plus alte informatii utile : ordinea dupa pret, vanzari, note, noutati. Conform teoriei bazelor de date relationale, informatiile din tabela respectiva sunt redundante (se pot obtine din tabelele existente).

Diagrama devine :

Le diagramme devient

Astfel interogarea noastra din 7-10 tabele devine o interogare simpla pe doua tabele : produse si categorii_produse :

select P.ID_Product, P.Description_Product
from Products P
inner join Categories_Products CP on P.ID_Product = CP.ID_Product
Where CP.ID_Category = 24011
order by CP.Sales_Rnk

Ca viteza de executie pe o baza de date din productie avantajul este evident :

ro04interogare

Singurul dezavantaj este ca atunci cand se adauga/eticheteaza un produs el nu va aparea pe paginile de categorii aferente pana nu rulam procedura stocata ce aduce la zi datele din tabela categorii_produse. Este in inconvenient minor pentru cei care lucreaza cu Back Office-ul site-ului (trebuie sa dea un click in plus pentru actualizarea datelor) fata de viteza castigata la afisarea paginii pentru clienti.
Actualizarea datelor din tabela precalculata se poate face si automat cu un job SQL care sa ruleze la o ora prestabilita.

Atunci cand viteza de incarcare a datelor este critica putem sa ne abatem de la normalizarea bazelor de date relationale pentru a obtine rezultatul dorit.

Cu siguranta ca exista si alte metode de a micsora timpul de executie al interogarilor.
De fapt, trebuie sa alegem solutia cea mai eficienta din punctul de vedere al utilizatorilor ei, in functie de specificul si paticularitatile aplicatiei pe care o dezvoltam.

Nu exista o reteta universala care sa dea aceleasi rezultate pentru orice tip de aplicatie.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

Poți folosi aceste etichete și atribute HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Facebook
Google+
http://blog.beleringenierie.com/ro/2016/08/25/la-gestion-des-categories-dynamiques-dans-le-e-commerce/">
Twitter