Bases de Datos - estructura de BD

   
Vista:

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,peep@asd.es, "formativo","",2009
0002, Pepe, Garcia Lopez,peep@asd.es, "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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Bases de Datos
- Cursos de Bases de Datos
- Temas de Bases de Datos
información
Cursos y Temas de Bases de Datos
- Manual básico de SQL DB2
- Auditoría de bases de datos
- Apuntes de Bases de Datos

RE:estructura de BD

Publicado por Juan Manuel Castañeda (20 intervenciones) el 21/05/2010 23:16:43
Haga Clave Principal (IdAlumno,IdAsignatura,Anio) con IdAlumno como FK de Alumnos y IdAsignatura como FK de Asignaturas.
Para evitar información mal intencionada valide la dirección de email(por medio de un web service que puede encontrar en www.methods.com) aceptando(o no) la solucitud segun si la direccion de email es válida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar