Comunidad de diseño web y desarrollo en internet online

Control de calificaciones ¿Cómo optimizar la BD?

Citar            
MensajeEscrito el 16 Ene 2010 07:45 pm
Hace mucho que no posteo en Cristalab, así que aprovecho para saludarlos.

Y a continuación les comento mi problema.

Estoy modelando una Base de Datos para una universidad. El alcance de la aplicación es jodidamente amplio por lo que lo he separado en módulos. Uno de esos módulos contempla todo el proceso del manejo de calificaciones.

Si me pongo estricto con las reglas de normalización, al final, la tabla de calificaciones debería almacenar una calificación (un valor) por registro, y mediante las claves externas se sabría a qué alumno pertenece, en que materia, que evaluación es, que periodo, que carrera, etc, etc,.

No lo represento con un ejemplo porque mi duda es más bien general sobre qué hacer en estos casos. Si creo la tabla a como se supone debe ser creada (aplicando normalización), esa tabla almacenaría demasiado valores, (calificacion X total de unidades X total de alumnos X total de grupos X total de carreras X total de peridos X todos los ciclos... etc).

La anterior base de datos (la que ya estaba cuando yo llegué) tenía una tabla de calificaciones para cada alumno, a manera de "boleta" es decir, no había normalización y los campos, por tanto eran repetitivos:

calif1_parcial1, calif2_parcial1... calif1_parcial3, califN_parcialN...

¿Cómo ven? ¿de cual forma me recomiendan modelar esa BD?

El manejador que utilizaré es SQLServer 2008.

Un saludo.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 16 Ene 2010 10:24 pm
Sho creo que tienes que jugar con las reglas de normalización y el sentido común(esto nunca lo dicen en la escuela, se aprende).

Yo crearía una tabla como esta.

------------------
Calificaciones
------------------
AlumnoID
ParcialID
MateriaID
Calificacion

Y listo.


saludos ^^

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 16 Ene 2010 10:44 pm

Dano escribió:

Sho creo que tienes que jugar con las reglas de normalización y el sentido común(esto nunca lo dicen en la escuela, se aprende).

Yo crearía una tabla como esta.

------------------
Calificaciones
------------------
AlumnoID
ParcialID
MateriaID
Calificacion

Y listo.


saludos ^^


Yap, mi duda es que si al hacerlo de esa manera, los registros es la tabla calificación crecerían desmesuradamente. Realmente desconozco los límites de SQLServer pero me imagino que en algún momento el rendimiento se mermaría y es lo que no quiero.

Por ejemplo: Guardaría un registro por cada calificación individual del alumno. Haciendo cálculos:

1 valor x 5 criterios (los criterios forman la calificacion final) = 5
x 8 unidades temáticas = 40
x 4 evaluaciones parciales = 160
x 1,5000 alumnos = 240 000
x 3 cuatrimestres 720,000

Y me estoy llendo bajo...

Aproximadamente esos registros se insertarían por año en la tabla. Lo que temo, es que a la hora de armar la boleta de calificaciones, donde se tiene que calcular promedios, agrupar datos, generar reportes estadísticos el tiempo de respuesta sea lento.

¿Cómo ves?

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

chrome
Citar            
MensajeEscrito el 16 Ene 2010 10:48 pm

Darel escribió:

Dano escribió:

Sho creo que tienes que jugar con las reglas de normalización y el sentido común(esto nunca lo dicen en la escuela, se aprende).

Yo crearía una tabla como esta.

------------------
Calificaciones
------------------
AlumnoID
ParcialID
MateriaID
Calificacion

Y listo.


saludos ^^


Yap, mi duda es que si al hacerlo de esa manera, los registros es la tabla calificación crecerían desmesuradamente. Realmente desconozco los límites de SQLServer pero me imagino que en algún momento el rendimiento se mermaría y es lo que no quiero.

Por ejemplo: Guardaría un registro por cada calificación individual del alumno. Haciendo cálculos:

1 valor x 5 criterios (los criterios forman la calificacion final) = 5
x 8 unidades temáticas = 40
x 4 evaluaciones parciales = 160
x 1,5000 alumnos = 240 000
x 3 cuatrimestres 720,000

Y me estoy llendo bajo...

Aproximadamente esos registros se insertarían por año en la tabla. Lo que temo, es que a la hora de armar la boleta de calificaciones, donde se tiene que calcular promedios, agrupar datos, generar reportes estadísticos el tiempo de respuesta sea lento.

¿Cómo ves?


No creo que sea lento. Mientras manejes bien los índices(super importante para que un query sea rápido) no veo mayor problema. Es cierto muchos registros, pero mucho mas liviando el peso en disco, que esa pichurrienta tabla que tenían.

saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 16 Ene 2010 10:56 pm
Ok, gracias por la orientación Dano.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

chrome
Citar            
MensajeEscrito el 18 Ene 2010 08:13 am
Y si le creas un tabla para cada año?
Mejor aún, si creas una tabla por cuatrimestre por cada año?

Al fin que debes saber el cuatrimestre de cada alumno (supongo), de allí partes para saber cual tabla le corresponde.

Espero te sirva mi opinión.
:)

Saludos.

Por elmaick123

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Ene 2010 05:00 pm

elmaick123 escribió:

Y si le creas un tabla para cada año?
Mejor aún, si creas una tabla por cuatrimestre por cada año?

Al fin que debes saber el cuatrimestre de cada alumno (supongo), de allí partes para saber cual tabla le corresponde.

Espero te sirva mi opinión.
:)

Saludos.


Esa no es una buena práctica elmaick123, va en contra de las reglas de normalización. Mi objetivo es optimizar la BD y esta opción sin duda complicaría más las cosas.

De todas maneras gracias por tu opinión.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.