Modelo Base de Datos de Sistema Escolar

El sistema escolar Xoolar Lite cuenta con un modelo de base de datos y las tablas necesarios para llevar el control de grupos, alumnos, asistencia, calificaciones y mas.

El modelo de base de datos tambien incluye el manejo de usuarios que seria los profesores que tienen acceso al sistema y la gestion de conducta y calificaciones por bloques.

Este modelo de base de datos es parte de mi Directorio Maestro de Modelos de Bases de Datos.

A continuacion les muestro el diagrama Entidad -Relacion de las tablas del modelo usando MySQL Workbench.

El modelo de base de datos del sistema escolar cuenta con las siguientes tablas.

  • Usuarios: user – para gestionar los usuarios que tienen acceso al sistema.
  • Alumnos: alumn – los alumnos del sistema y tienen asignado el user_id para el profesor asignado
  • Grupos: team – grupos del profesor
  • Asignacion de Grupo: alumn_team – se asignan los usuarios a los grupos, alumno puede estar en varios grupos
  • Asistencias: assistance – se registra el id del alumno, fecha y tipo de asistencia para saber la asistencia, justificacion o falta del alumno
  • Conducta o comportamiento: behavior – llevar el control de la conducta del alumno por fecha, buena, mala o llamadas de atencion
  • Bloques de Calificacion: block – son los espacios(bimestral, semestral) donde se van a insertar las calificaciones de los alumnos
  • Calificaciones: Registra las calificacciones de los alumnos y lo relaciona con un bloque.

Tabla de Usuarios (user)

La tabla user sirve para almacenar los usuarios administradores, profesores o personal administrativo que tienen acceso al sistema para gestionar la información.

  • id: Llave primaria autoincrementable.
  • username: Nombre de usuario único para iniciar sesión.
  • name: Nombre real del usuario.
  • lastname: Apellido del usuario.
  • email: Correo electrónico de contacto.
  • password: Contraseña encriptada de acceso.
  • is_active: Valor booleano para identificar si el usuario está activo o inactivo (por defecto 1 / Activo).
  • is_admin: Valor booleano para identificar si el usuario es administrador (1) o un usuario estándar (0).
  • created_at: Fecha y hora de creación del usuario.

Tabla de Grupos o Equipos (team)

La tabla team permite registrar los diferentes grupos, grados o secciones escolares disponibles en el sistema. Cada grupo está asociado al usuario que lo gestiona o registra.

  • id: Llave primaria.
  • name: Nombre o código del grupo (ej. “Primero A”, “Matemáticas Avanzadas”).
  • is_favorite: Valor booleano para marcar grupos destacados o favoritos en el panel del usuario.
  • user_id: Llave foránea que conecta con el usuario (user) encargado o creador del grupo.

Tabla de Alumnos (alumn)

Esta tabla almacena el expediente completo de los estudiantes. Además de sus datos personales, incluye campos específicos (c1_ y c2_) para registrar la información de hasta dos contactos de emergencia o tutores (Nombre, dirección, teléfono y notas particulares).

  • id: Llave primaria.
  • image: Ruta o nombre de la foto de perfil del alumno.
  • name: Nombre del estudiante.
  • lastname: Apellido del estudiante.
  • email: Correo electrónico del alumno (o del tutor).
  • address: Dirección de residencia.
  • phone: Teléfono de contacto.
  • c1_fullname, c1_address, c1_phone, c1_note: Datos completos y observaciones del primer contacto de emergencia.
  • c2_fullname, c2_address, c2_phone, c2_note: Datos completos y observaciones del segundo contacto de emergencia.
  • is_active: Estado del alumno (1 para activo, 0 para baja o suspendido).
  • created_at: Fecha de alta en el sistema.
  • user_id: ID del usuario que registró al alumno.

Tabla de Relación de Alumnos y Grupos (alumn_team)

Una tabla intermedia que sirve para romper la relación de muchos a muchos entre alumnos y grupos. Permite inscribir a un alumno en uno o varios grupos específicos.

  • id: Llave primaria.
  • alumn_id: ID del alumno inscrito.
  • team_id: ID del grupo al que se asigna el alumno.

Tabla de Asistencias (assistance)

Sirve para llevar el control diario de asistencia de los alumnos dentro de un grupo específico.

  • id: Llave primaria.
  • kind_id: Identificador numérico del tipo de asistencia:
    • 1 = Asistencia
    • 2 = Falta
    • 3 = Retardo
    • 4 = Justificación
  • date_at: Fecha en la que se toma la asistencia.
  • alumn_id: ID del alumno evaluado.
  • team_id: ID del grupo al que corresponde la lista.

Tabla de Conducta (behavior)

Permite registrar reportes sobre el comportamiento del estudiante en un día específico dentro de su grupo.

  • id: Llave primaria.
  • kind_id: Identificador numérico que define el tipo de conducta:
    • Null = Normal
    • 1 = Buena
    • 2 = Excelente
    • 3 = Mala
    • 4 = Muy Mala
  • date_at: Fecha del registro de conducta.
  • alumn_id: ID del alumno.
  • team_id: ID del grupo.

Tabla de Bloques (block)

La tabla block ayuda a organizar el ciclo escolar en diferentes periodos, bimestres, trimestres o unidades de evaluación para un grupo determinado.

  • id: Llave primaria.
  • name: Nombre del periodo de evaluación (ej. “Primer Bimestre”, “Unidad 1”).
  • team_id: ID del grupo al que se le aplica este bloque de evaluación.

Tabla de Calificaciones (calification)

Esta tabla relaciona las evaluaciones y almacena las notas finales obtenidas por los alumnos en cada bloque específico.

  • id: Llave primaria.
  • val: Valor numérico de la calificación obtenida (tipo double para soportar decimales).
  • alumn_id: ID del alumno calificado.
  • block_id: ID del bloque o periodo evaluado.

Este esquema es una base sólida y expandible para cualquier sistema escolar que busque un control total de sus aulas de forma estructurada.

Codigo

A continuacion el codigo SQL completo del modelo de base de datos para un sistema escolar.

create database xoolar;
use xoolar; 
/* tabla de usuarios*/
create table user (
	id int not null auto_increment primary key,
	username varchar(50) ,
	name varchar(50) ,
	lastname varchar(50) ,
	email varchar(255) ,
	password varchar(60) ,
	is_active boolean not null default 1,
	is_admin boolean not null default 0,
	created_at datetime
);

insert into user (username,password,is_admin,created_at) value ("admin",sha1(md5("admin")),1,NOW());

/* tabla de grupos*/
create table team(
	id int not null auto_increment primary key,
	name varchar(50),
	is_favorite boolean not null,
	user_id int not null,
	foreign key (user_id) references user(id)
);

/* tabla de alumnos*/
create table alumn(
	id int not null auto_increment primary key,
	image varchar(50) ,
	name varchar(50) ,
	lastname varchar(50) ,
	email varchar(255) ,
	address varchar(60) ,
	phone varchar(60) ,
	c1_fullname varchar(100),
	c1_address varchar(100),
	c1_phone varchar(100),
	c1_note varchar(100),
	c2_fullname varchar(100),
	c2_address varchar(100),
	c2_phone varchar(100),
	c2_note varchar(100),
	is_active boolean not null default 1,
	created_at datetime,
	user_id int not null,
	foreign key (user_id) references user(id)
);

/* tabla de relacion entre alumnos y grupos*/
create table alumn_team(
	id int not null auto_increment primary key,
	alumn_id int not null,
	foreign key (alumn_id) references alumn(id),
	team_id int not null,
	foreign key (team_id) references team(id)
);
/* 1.- Asistencia, 2.- Falta, 3.- Retardo, 4.- Justificacion */
create table assistance(
	id int not null auto_increment primary key,
	kind_id int,
	date_at date not null,
	alumn_id int not null,
	foreign key (alumn_id) references alumn(id),
	team_id int not null,
	foreign key (team_id) references team(id)
);
/* Null Normal, 1.- Buena, 2.- Exelente, 3.- Mala, 4.- Muy Mala */

create table behavior(
	id int not null auto_increment primary key,
	kind_id int,
	date_at date not null,
	alumn_id int not null,
	foreign key (alumn_id) references alumn(id),
	team_id int not null,
	foreign key (team_id) references team(id)
);

create table block(
	id int not null auto_increment primary key,
	name varchar(100),
	team_id int not null,
	foreign key (team_id) references team(id)
);

create table calification(
	id int not null auto_increment primary key,
	val double,
	alumn_id int not null,
	foreign key (alumn_id) references alumn(id),
	block_id int not null,
	foreign key (block_id) references block(id)
);

Conclusión

Diseñar una base de datos escolar eficiente es el pilar fundamental para construir un software educativo rápido y confiable. Como pudiste ver en este modelo, estructurar correctamente las relaciones entre grupos, alumnos y evaluaciones evita la duplicación de datos y garantiza que las calificaciones o asistencias se procesen en milisegundos. Esta arquitectura es escalable, limpia y está lista para ser adaptada a las necesidades reales de cualquier institución.

Conoce Xoolar Max Pro

Si en lugar de programar todo desde cero buscas una plataforma profesional, robusta y completamente lista para implementar, tienes que conocer Xoolar Max.

Este sistema escolar lleva la lógica de este tutorial al siguiente nivel, ofreciendo una interfaz intuitiva para directores, profesores y alumnos, optimizada para soportar miles de registros sin perder velocidad.

¡No reinventes la rueda! Profesionaliza la administración educativa hoy mismo.

Ver Xoolar Max: Sistema Escolar Profesional

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Evilnapsis

Subscribe now to keep reading and get access to the full archive.

Continue reading