Estoy desarrollando un programa de seguimiento de estudiantes donde necesito almacenar 15 marcas de examen.
Puedo almacenar las marcas como una cadena y dividirlas cuando sea necesario, para fines como realizar operaciones aritméticas. Sin embargo, necesito el mayor rendimiento posible.
¿Cual es mejor? ¿Un solo campo de cadena o 15 campos int individuales?
Respuestas:
Si ya está hablando de división y computación, no almacene esto como una matriz.
Independientemente de la teoría relacional y las reglas tradicionales de normalización y el dogma, es simplemente un diseño que le brinda una flexibilidad MÍNIMA.
Haga que cada resultado del examen sea una fila.
No estoy tratando de anticipar todo, pero hay una gran cantidad de cosas que este diseño más granular (y, sí, normalizado) y solo un poco más costoso en espacio facilita lo que puede o no necesitar ahora y puede o no Puede que no necesite en el futuro:
¿Tirando el resultado más alto y más bajo? Tendrás que cortar tu matriz y ordenarla.
Promediando? Tendrás que cortarlo y totalizarlo
¿Análisis del resultado del examen por examen entre los estudiantes? Tendrás que cortar y girar
¿Ordenando para contar (o instancia GCSE británica, donde podría ser 7 As y 2Bs)? Tendrás que cortar y ordenar
Tenga en cuenta que todo este corte y clasificación viene muy barato en un diseño indexado y normalizado.
fuente
Para los puntajes, en cuanto al rendimiento, el claro ganador lo está almacenando numéricamente algo así;
Es fácil de consultar, fácil de actualizar y agregar, y súper fácil y rápido para realizar agregados. Dada la opción de "almacenar esta información como una cadena que tengo que dividir" o "almacenar en una columna" ... el ganador casi siempre será "almacenar en una columna" para la mayoría de los casos de uso en un RDBMS.
fuente
siempre que use tiny int (0 a 255) usando un char (15) o 15 tinyint es lo mismo (tamaño). Entonces, desde una perspectiva de rendimiento, elija los 15 tinyints ya que ahorra en la extracción y el manejo de la cadena.
ACTUALIZAR
si las marcas son de dos dígitos, necesitará CHAR (30) y eso es dos veces el tamaño de 15 veces un minúsculo.
fuente