Sono abbastanza nuovo a lavorare con database relazionali, ma ho letto alcuni libri e conosco le basi del buon design.Problema di efficienza mySQL - Come trovare il giusto equilibrio di normalizzazione ...?
Sono di fronte a una decisione di progettazione, e non sono sicuro di come continuare. Ecco una versione molto più semplificata di ciò che sto costruendo: le persone possono valutare le foto 1-5 e ho bisogno di visualizzare i voti medi sull'immagine tenendo traccia dei voti individuali. Ad esempio, 12 persone hanno votato 1, 7 persone hanno votato 2, etc. etc.
il freak normalizzazione di me inizialmente progettato la struttura della tabella come questa:
Table pictures
id* | picture | userID |
Table ratings
id* | pictureID | userID | rating
Con tutti i vincoli di chiave esterna e tutto il set come dovrebbero essere. Ogni volta che qualcuno valuta una foto, inserisco semplicemente un nuovo record in valutazioni e lo faccio.
Per trovare la valutazione media di una foto, che avevo appena eseguito qualcosa di simile:
SELECT AVG(rating) FROM ratings WHERE pictureID = '5' GROUP by pictureID
Averlo configurazione in questo modo mi permette di scorrere le statistiche di fantasia per. Posso facilmente trovare chi ha valutato una certa immagine a 3, e cosa no.
Ora penso che se c'è un crapload di valutazioni (che è molto possibile in quello che sto realmente progettando), trovare la media diventerà molto costoso e doloroso.
L'utilizzo di una versione non normalizzata sembra più efficiente. ad esempio
Table picture
id | picture | userID | ratingOne | ratingTwo | ratingThree | ratingFour | ratingFive
Per calcolare la media, dovrei solo selezionare una singola riga. Sembra molto più efficiente, ma molto più brutto.
Qualcuno può indicarmi la direzione giusta di cosa fare? La mia ricerca iniziale mostra che devo "trovare il giusto equilibrio", ma come faccio a trovare questo equilibrio? Qualsiasi articolo o ulteriore informazione di lettura sarebbe apprezzato anche.
Grazie.
Avete incorrere in problemi di prestazioni o semplicemente chiedere? – Pentium10
Non ho ancora riscontrato problemi di prestazioni. Non voglio progettare qualcosa che si piegherà sotto carico potenzialmente elevato. – Foo