Soy bastante nuevo para trabajar con bases de datos relacionales, pero he leído algunos libros y conozco los conceptos básicos del buen diseño.mySQL Efficiency Issue - ¿Cómo encontrar el equilibrio correcto de normalización ...?
Estoy ante una decisión de diseño, y no estoy seguro de cómo continuar. Aquí hay una versión muy simplificada de lo que estoy construyendo: las personas pueden calificar las fotos de 1 a 5, y necesito mostrar los votos promedio en la imagen mientras hago un seguimiento de los votos individuales. Por ejemplo, 12 personas votaron 1, 7 personas votaron 2, etc, etc
El monstruo de la normalización de mí inicialmente diseñada la estructura de tabla como esta:
Table pictures
id* | picture | userID |
Table ratings
id* | pictureID | userID | rating
Con todas las restricciones de clave externa y todo lo establecido como deberían ser. Cada vez que alguien califica una imagen, simplemente inserto un nuevo registro en las calificaciones y termino con eso.
Para encontrar la calificación promedio de una imagen, que acababa de ejecutar algo como esto:
SELECT AVG(rating) FROM ratings WHERE pictureID = '5' GROUP by pictureID
Tenerlo configuración de esta manera me permite ejecutar mis estadísticas de fantasía para. Puedo encontrar fácilmente quién calificó una cierta imagen en 3, y qué no.
Ahora estoy pensando si hay un montón de valoraciones (que es muy posible en lo que estoy realmente diseñando), encontrar el promedio será muy caro y doloroso.
El uso de una versión no normalizada parece ser más eficiente. e.g .:
Table picture
id | picture | userID | ratingOne | ratingTwo | ratingThree | ratingFour | ratingFive
Para calcular el promedio, solo tendría que seleccionar una sola fila. Parece mucho más eficiente, pero mucho más feo.
¿Puede alguien señalarme en la dirección correcta de qué hacer? Mi investigación inicial muestra que tengo que "encontrar el equilibrio correcto", pero ¿cómo hago para encontrar ese equilibrio? También se agradecerá cualquier artículo o información adicional de lectura.
Gracias.
¿Ha topado con problemas de rendimiento o simplemente pedir? – Pentium10
Aún no me he encontrado con problemas de rendimiento. Simplemente no quiero diseñar algo que se pandee bajo una carga potencialmente alta. – Foo