Ver Mensaje Individual
  #8 (permalink)  
Antiguo 26/04/2008, 05:16
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: Y en este otro tema q opinan?

No soy técnico, pero te diré lo que opino.
Dices -y es cierto- que en el código del alumno ya tienes el código de colegio y de ugel, y seguramente puedes recuperar el ugel y el colegio de un alumno sin tener por qué contar con un campo FK para el colegio en la tabla de alumno y con otro FK para el ugel en la tabla de colegios, ya que podrías utilizar como FK de colegio y como FK de ugel dos substring de código alumno (imagino que es eso). Cierto que ahorras en almacenamiento, pero en cualquier caso tendrías que poner en relación ese con el código ugel y con el código colegio mediante INNER JOIN .. ON o WHERE = , para mostrar los datos concretos del colegio. Por lo demás, si lo hicieras como dices, ello te obligaría a hacer las selecciones siempre con substring y sobre un campo ordenado del que tomas una parte, en la que no sé cómo afectaría el orden (me refiero al contenido del substring en relación con el código de colegio o ugel). Y tampoco sé qué ocurriría (tiempo que tardaría en hacerlo comparado con el tiempo si usas la otra estructura) si por ejemplo tienes que sacar la media de los alumnos por colegios si tienes que agrupar por substring().
Por otra parte, no sé por qué tienes que almacenar en las 20 tablas de los alumnos el código del colegio y el ugel. Te bastará tener almacenado el código del colegio en una tabla, la tabla donde aparecen los datos más significativos del alumno, pues por él podrás llegar al colegio y por el colegio sacarás el ugel (en la tabla colegio tendrás el ugel correspondiente como FK) de cada alumno. Si tienes otras 19 tablas referidas al alumno, tendrás un campo en el que incluirás el código del alumno, porque, si no, no podrás establecer la relación, y con él también podrás llegar siempre al colegio a través de la tabla donde tienes los datos significativos del alumno, y por el colegio al ugel.
La pregunta la deberán responder los técnicos, pero cuando tengas muchos datos, creo que te irá mejor una relación bien establecida con índices adecuados que te ayude a recuperar los datos que hacerlo trayéndote ugel y colegio desde el código de alumno. Imagina una consulta más o menos simple sobre diferencia de las calificaciones de los alumnos varones de un grupo sobre la media del colegio, y todo eso teniendo que usar un where substring(alumno.codigo,-9,6) = ugel.códigocolegio, o un group by substring(alumno.codigo,-9,6) sin poder, según creo, aprovechar el uso de los índices adecuadamente (tendrías que hacer dos índices y sobre una parte distinta de la cadena del código del alumno, y además de derecha a izquierda y no de principio a parte), en lugar de recurrir a un INNER JOIN que se aproveche bien de los índices y te deje más claro el código por lo que a la consulta se refiere.
Y si trataras el nombre del colegio y de ugel como meras etiquetas, no habría tanto problema e incluso yo pensaría en que es mejor sacar todo desde el código del alumno, pero agrupaciones para extraer datos estadísticos sobre grupos (ugel y colegio) quizás te hagan repensar tu primera idea.

Como ves, no tengo muchas respuestas concretas, sino preguntas que me hago a mí mismo para las que yo no tengo respuesta técnica.
Saludos.

Última edición por jurena; 27/04/2008 a las 04:43