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= Asistencia2= Falta3= Retardo4= 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= Normal1= Buena2= Excelente3= Mala4= 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
doublepara 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.