Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Estructura de una BD

Estas en el tema de Estructura de una BD en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/04/2010, 14:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 87
Antigüedad: 15 años, 6 meses
Puntos: 0
Estructura de una BD

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, tendré 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 a nivel de estructura de la BD? ¿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. Este es el problema de ser autodidacta, que los libros no contestan dudas.

Gracias¡¡¡

Etiquetas: bd, estructura
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:20.