Innodb problema tabelle

di il
2 risposte

Innodb problema tabelle

Salve a tutti!
Stò cercando di fare un comparatore prezzi senza farmi aiutare dagli scripts.
La realizzazione non è di tipo speculare, ma senza profitto, diciamo un servizio hai consumatori pulito e onesto, quindi senza prendere soldi da parte dei commercianti.

Detto questo dovrebbe essere qualcosa che funzioni bene, piano piano ci stò provando, ma mi sono intoppato su un problema che non riesco a ottimizzare o proprio non ci arrivo:
il DB è mysql 5.6 in innodb
cè la tabella prodotti, categorie ecc...
un comparatore prezzi ha anche le specifiche di ogni prodotto es. cpu: mhz, socket, cores ecc....monitor: pollici, risoluzione, entrate, pannello ecc
Ecco qui casca l'asino(almeno per me) cosa faccio?
Una tabella prodotti con tutte le colonne delle specifiche di tutti i prodotti?(secondo me assurda)
Creo una tabella per tipologia prodotto? es. cpu, monitor, hdd ecc e li collego con id_prodotto?
una tabella dove creo le specifiche? es.
id_specifiche|id_prodotto|campo|descrizione
dentro campo ci scriverei: Mhz e dentro descrizione: 3200
tutto aggacianto al id_prodotto però così creerei tra i 10 e 30 record per ogni prodotto...e se ci sono 10.000 prodotti?
Forse la soluzione è facilissima...ma proprio non ci arrivo.
Vi prego di aiutarmi
GRAZIE!

2 Risposte

  • Re: Innodb problema tabelle

    Ciao, puoi fare diverse cose ma devi considerare l'enorme mole di dati che andrai a gestire...


    Una soluzione (se ne possono adottare diverse) potrebbe essere creare una tabella dei template delle schede (dove stabilisci come deve essere una scheda per cellulare piuttosto che una per televisore). Il template lo metterei dentro un campo testo in formato XML.

    Nella tabella prodotti, inserirei un campo "scheda" che si rifà al template di riferimento e in cui vai a mettere i dati del prodotto.
  • Re: Innodb problema tabelle

    Credo di aver già letto la tua domanda (e risposto) su un altro forum, ma non sono sicuro fossi tu.

    Quello che consiglio è di utilizzare MariaDB invece di MySQL, perché ha una funzionalità che fa al caso tuo che sono le tabelle dinamiche:
    https://kb.askmonty.org/en/dynamic-columns

    Se invece vuoi/devi usare MySQL, in teoria esistono vari approcci e ognuno si porta dietro una serie di seccature. In genere di fa una tabella prodotti, che contiene le caratteristiche che riguardano tutti i prodotti (id, prezzo, descrizione...). E poi una serie di tabelle, una per ogni tipo di prodotto, che contengono l'id specifico del prodotto per la relazione.

    Un altro approccio, che non mi piace, è fare una tabella per ogni tipo di prodotto ma senza una tabella comune. Il problema è che, se devi fare una query su tutti i tipi di prodotti, dovrai fare una serie di UNION e non hai un indice che velocizzerebbe l'operazione. Per semplificare la sintassi della query puoi almeno fare una vista che è una UNION tra tutte le tabelle e contiene tutte le colonne in comune.

    Oppure puoi fare uno star database, o un ibrido tra uno star database e la prima soluzione. Ma non te lo consiglio perché comlichi tutte le query e molto probabilmente per la tua applicazione non ne vale la pena.
Devi accedere o registrarti per scrivere nel forum
2 risposte