Consigli pratici per lo schema mysql per il negozio eCommerce - Prodotti e attributi

3

Attualmente sto pianificando la mia prima applicazione eCommerce (mySQL e Laravel Framework).

Ho vari prodotti, che hanno tutti attributi diversi. Descrivendo i prodotti molto semplicemente, alcuni avranno un produttore, altri no, altri avranno un diametro, altri avranno larghezza, altezza, profondità e altri avranno un volume.

Opzione 1: creare una tabella di prodotti master e separare tabelle per tipi di prodotti specifici (relazioni polimorfiche). In questo modo, non avrò campi null inutili nella tabella prodotti.

Opzione 2: crea una tabella di prodotti, con tutti i campi possibili nonostante il fatto che ci saranno molte righe null

Opzione 3: Normalizza in modo che ogni tipo di attributo abbia la sua tabella.

Opzione 4: crea una tabella attributes , nonché una tabella attribute_values con il valore varchar indipendentemente dal tipo di dati effettivo. La tabella dei prodotti avrebbe molte: molte relazioni con la tabella degli attributi.

Opzione 5: attributi comuni a tutti o alla maggior parte dei prodotti inseriti nella tabella prodotti e attributi specifici a una particolare categoria di prodotti associata alla tabella delle categorie.

I miei pensieri sono che mi piacerebbe poter consentire un facile filtraggio dei prodotti con questi attributi e ordinamento. Vorrei anche che il frontend fosse veloce, meno preoccupante per le prestazioni di inserimento e aggiornamento dei record di prodotto.

Sono un po 'sopraffatto dalle vaste opzioni di implementazione e non riesco a trovare una risposta adeguata in termini del miglior metodo di approccio. Qualcuno potrebbe indicarmi la direzione giusta?

In un mondo ideale, vorrei offrire il seguente tipo di funzionalità - link al mio negozio eCommerce. Come si può vedere, nella barra laterale, è possibile selezionare un attributo gli occhiali per filtrarli. per esempio. maschio / femmina o plastica / metallo / titanio ecc ...

In alternativa, dovrei semplicemente scaricare l'idea del database relazionale mySql e imparare mongodb?

    
posta Gravy 15.01.2014 - 14:38
fonte

1 risposta

5

Penso che la cosa fondamentale qui sia la flessibilità. Dato che ci sono diversi tipi di prodotti con ciascuno un diverso insieme di attributi, sarebbe giusto presumere che il prodotto e il tipo di attributo cambieranno. Quindi non è molto comodo includere gli attributi nelle tabelle dei prodotti.

Ecco cosa potresti fare:

  1. ha una tabella di tipi di prodotto
  2. avere una tabella di prodotti con relazioni molte-a-uno alla tabella dei tipi di prodotto
  3. ha una tabella di tipi di attributi
  4. ha una tabella di relazioni (molti-a-molti) tra tipi di prodotto e tipi di attributi
  5. avere una tabella contenente il tipo di attributo, il valore dell'attributo, la chiave primaria del prodotto

Questo design consente un'enorme flessibilità. Le tabelle sono normalizzate, non c'è ridondanza, non è necessario modificare schemi di tabelle se la definizione di un prodotto cambia. Se il database è correttamente indicizzato e altre tecniche di ottimizzazione della ricerca sono implicite come suggerito da thorsten Müller, questa soluzione funzionerà.

    
risposta data 15.01.2014 - 15:22
fonte

Leggi altre domande sui tag