Esquema de base de datos escolar
Estoy trabajando en un sistema escolar simple que maneja el registro y el horario de los estudiantes. Además, el sistema debe manejar diferentes tipos de escuelas como jardín de infantes, primaria, secundaria y preparatoria (preescolar y k12).
Im no un experto en el diseño de base de datos , pero todavía sigue lo que pueda de lo que aprenden a través de la lectura y la práctica.
- Estudiante
- Padre
- Student_parent (si hay más de un padre que quiere estar en el sistema)
- Escuela (donde el sistema puede verificar que el estudiante pertenece a qué nivel (primaria o secundaria, etc.))
- Asignatura (Todas las asignaturas de las escuelas)
- Clase (Básicamente horario-horario)
- Aula (cada aula y laboratorio de la escuela (básicamente instalaciones de la escuela))
- Asistencia (todavía no)
- Marcas (todavía no)
¿Son suficientes las relaciones de las tablas o es necesario rediseñarlas? ¿Algún problema con este esquema básico? ¿Es suficiente para el sistema? ¿Cómo implementar términos (semestre 1 y semestre 2) así como años? ¿Qué pasa cuando termina el año? ¿Cómo transferir estudiantes a un nuevo año (cómo implementar esto)?
Espero obtener algunos puntos sobre mejoras o problemas con el esquema antes de comenzar a programarlo.
Gracias
. . Editar: implementación de sugerencias de John Herbert . . .
La implementación de John apunta a excepción del último porque no hay departamentos en la escuela y el número de alumnos es realmente subjetivo al año.
- cambió los nombres de las tablas con prefijos para agruparlos.
- Se modificaron pocos campos según lo sugerido por John para una mejor búsqueda y agrupación
- Se agregó el término de la tabla y lo conectó con la escuela (KG, primaria, secundaria, etc.)
- Tamaños de campo modificados de Int (11) a algo más pequeño según sea necesario
Esquema de base de datos después de editar
después de implementar estas cosas, alguien no puede evitar divagar. ¿Necesitaré agregar índices de rendimiento en el futuro? ¿Dónde se necesitarán posiblemente los índices?
Espero que esto pueda beneficiar a alguien que esté interesado en el diseño de bases de datos.
Respuestas
Considerándolo todo, creo que sus Relaciones Clave son lo suficientemente directas y claras como para que pueda encontrar fácilmente mi camino. Probablemente encontrará algunos lugares para cambiar a medida que realiza la maqueta y, finalmente, codifica sus procedimientos almacenados y otros procesos. Aquí están mis pensamientos mientras lo miraba.
- Reemplace el padre con algo más genérico, como tutor. Este uso del lenguaje abre la puerta a otras figuras de autoridad para el estudiante, como abuelos y padres adoptivos, además de permitir una bandera que indique que la persona es un contacto de emergencia o que puede recoger al niño.
- Separe el campo [Full_Name] en dos campos; [Given_Name] y [Apellidos]. Esto ayuda al ordenar por nombre durante la programación. (Es mejor que las dos hermanas Williams aparezcan juntas en un informe que todas las Mary's de la escuela agrupadas).
- Sugiera mover el campo [término] debajo de la tabla [asunto] a la tabla [clase]. Este campo se puede usar para indicar si Bobby Tables estuvo en esa clase durante la primavera de 2010 o el otoño de 2009, con ese maestro específico en un salón específico. Tendría otra tabla que tuviera los rangos de fechas para esos términos. (Como nota al margen, INT (11) puede ser un poco exagerado para él. Cien años de términos de una semana solo resultarían realmente en 5000 términos, con solo se necesitaría INT (4))
- En el tema de promover a los estudiantes al próximo año, se podría hacer con un nuevo campo debajo de la tabla [estudiante], con un simple INT (2) para indicar el año de su educación. Un procedimiento almacenado que se ejecuta al final del año escolar podría verificar los créditos obtenidos y subirlos.
- También se puede considerar incluir en las tablas de [asignatura] y [maestro] sería un departamento, como Matemáticas, Ciencias o Inglés. Esto podría usarse para ayudar a agrupar a todos los profesores de Ciencias, o mostrar todas las clases de Historia que están disponibles ese trimestre, especialmente si la escuela es lo suficientemente grande como para tener más de una sesión de una clase en particular.