estructura de BD
Publicado por Diana (3 intervenciones) el 29/04/2010 21:52:07
Buenas:
Estoy creando mi primera BD en MySQL y programada en PHP basándome en un caso práctico y tengo varias dudas. Tengo que guardar los datos de un alumno. Los alumnos pueden matricularse en un doctorado en periodo "Formativo" o "Tesis". Como máximo se matriculan 2 años en el doctorado (primero en periodo formativo y luego en Tesis) y como mínimo en 1 de los 2 periodos. Los alumnos que quieren impartir el doctorado (en cualquiera de los 2 periodos), se matriculan anualmente vía web, dejando sus nombre, y comentarios si es preciso, apellidos, mail, periodo (formativo o de tesis) y año de realización del curso. Además indicará en caso de estar en periodo “formativo” en que asignaturas desea matricularse (al menos 1). En periodo de Tesis no se matricula en ninguna asignatura. Una asignatura tendrá un código y un nombre.
PRIMERA opción de tablas: (estarian en 3FN)
Alumnos-asignaturas 0,N-0M
T1: alumnos (id_alumno, nombre, apellidos, mail)
T2: periodos(id_periodo,nombrePeriodo)
T3: asignaturas(id_asig, nombre, código)
Como tengo una relación M-N entre Alumnos-periodo ( 0M- 1N) entonces:
T4: alum_periodo(id_alum, ad_periodo,comentarios, año)
Como tengo una relación M-N entre Alumnos-asignaturas 0N- 0M, entonces:
T5: alum_asig(id_alum, id_asig)
SEGUNDA opción de tablas: (creo que no estaría ni en 2FN)
T1: alumno (id_alumno, nombre, apellidos, mail, periodo, comentarios, año )
T2: asignaturas(id_asig, nombre, código)
Como tengo una relación M-N entre Alumnos-asignaturas 0N- 0M, entonces:
T3: alum_asig(id_alum, id_asig)
(aquí como para un mismo alumno que se matricula en el 2009 y 2010 tendría 2 entradas independientes con id distintos (como máx sólo se matriculará 2 veces):
Ej: (campo "periodo" es del tipo enum("Formativo","Tesis")
0001, Pepe, Garcia Lopez,[email protected], "formativo","",2009
0002, Pepe, Garcia Lopez,[email protected], "Tesis","",2010
Mis dudas son:
1.¿Es más correcta la opción 1 verdad? Además si no quiero que se matriculen más de una vez por periodo lo puedo controlar por programación PHP.
2.Para evitar datos mal intencionados por parte de los alumnos que se matriculan via Web, tengo en la web un acceso privado solo para administradores y serán ellos los que vean las solicitudes vía web y las acepten como alumnos finalmente o las descarten. ¿Qué tengo que hacer para ello? ¿Sería correcto crear una tabla Prealumnos que recogiera todos los datos, y sólo cuando el administrador lo acepte como alumno oficial, actualice las tablas reales con sus datos borrándola de la tabla Prealumnos? ¿hay una forma mejor?
Los campos de dicha tabla debería contener todos los datos:
NombreAlum, apellidosAlum, mailAlum. Año, Periodo, asignaturas en la que se matricula)
El último campo de asignaturas en la que se matricula, podría ser una cadena con los id_asig separados por comas.
¿Es esto muy cutre? ¿Cómo podría hacerlo?
Muchas gracias por la ayuda.
Estoy creando mi primera BD en MySQL y programada en PHP basándome en un caso práctico y tengo varias dudas. Tengo que guardar los datos de un alumno. Los alumnos pueden matricularse en un doctorado en periodo "Formativo" o "Tesis". Como máximo se matriculan 2 años en el doctorado (primero en periodo formativo y luego en Tesis) y como mínimo en 1 de los 2 periodos. Los alumnos que quieren impartir el doctorado (en cualquiera de los 2 periodos), se matriculan anualmente vía web, dejando sus nombre, y comentarios si es preciso, apellidos, mail, periodo (formativo o de tesis) y año de realización del curso. Además indicará en caso de estar en periodo “formativo” en que asignaturas desea matricularse (al menos 1). En periodo de Tesis no se matricula en ninguna asignatura. Una asignatura tendrá un código y un nombre.
PRIMERA opción de tablas: (estarian en 3FN)
Alumnos-asignaturas 0,N-0M
T1: alumnos (id_alumno, nombre, apellidos, mail)
T2: periodos(id_periodo,nombrePeriodo)
T3: asignaturas(id_asig, nombre, código)
Como tengo una relación M-N entre Alumnos-periodo ( 0M- 1N) entonces:
T4: alum_periodo(id_alum, ad_periodo,comentarios, año)
Como tengo una relación M-N entre Alumnos-asignaturas 0N- 0M, entonces:
T5: alum_asig(id_alum, id_asig)
SEGUNDA opción de tablas: (creo que no estaría ni en 2FN)
T1: alumno (id_alumno, nombre, apellidos, mail, periodo, comentarios, año )
T2: asignaturas(id_asig, nombre, código)
Como tengo una relación M-N entre Alumnos-asignaturas 0N- 0M, entonces:
T3: alum_asig(id_alum, id_asig)
(aquí como para un mismo alumno que se matricula en el 2009 y 2010 tendría 2 entradas independientes con id distintos (como máx sólo se matriculará 2 veces):
Ej: (campo "periodo" es del tipo enum("Formativo","Tesis")
0001, Pepe, Garcia Lopez,[email protected], "formativo","",2009
0002, Pepe, Garcia Lopez,[email protected], "Tesis","",2010
Mis dudas son:
1.¿Es más correcta la opción 1 verdad? Además si no quiero que se matriculen más de una vez por periodo lo puedo controlar por programación PHP.
2.Para evitar datos mal intencionados por parte de los alumnos que se matriculan via Web, tengo en la web un acceso privado solo para administradores y serán ellos los que vean las solicitudes vía web y las acepten como alumnos finalmente o las descarten. ¿Qué tengo que hacer para ello? ¿Sería correcto crear una tabla Prealumnos que recogiera todos los datos, y sólo cuando el administrador lo acepte como alumno oficial, actualice las tablas reales con sus datos borrándola de la tabla Prealumnos? ¿hay una forma mejor?
Los campos de dicha tabla debería contener todos los datos:
NombreAlum, apellidosAlum, mailAlum. Año, Periodo, asignaturas en la que se matricula)
El último campo de asignaturas en la que se matricula, podría ser una cadena con los id_asig separados por comas.
¿Es esto muy cutre? ¿Cómo podría hacerlo?
Muchas gracias por la ayuda.
Valora esta pregunta
0