Base de datos University (MariaDB): esquema, tablas y ejercicios de SQL
University es una base de ejemplo de MariaDB sobre una universidad: departamentos, profesores, estudiantes, cursos, grupos, matrículas, calificaciones e investigación.
En SQLtest.online puedes consultarla directamente en el navegador: resolver ejercicios con corrección automática y ejecutar tus propias consultas en el playground, sin instalar nada.
University es una base de ejemplo moderna para MariaDB 11, pensada como una alternativa más rica a la clásica Sakila. Está normalizada hasta la tercera forma normal y usa muchos tipos de datos de MariaDB: JSON, ENUM y SET, índices FULLTEXT y columnas VECTOR para embeddings.
Hay datos suficientes para análisis reales: unas 25 000 matrículas, 300 000 calificaciones y un registro de auditoría de más de medio millón de filas. Y el tema resulta familiar para cualquiera que haya estudiado en la universidad.
Diagrama ER
El diagrama muestra las tablas de University y las claves foráneas que las unen. Haz clic para abrirlo a tamaño completo.
Qué contiene la base
Las tablas se agrupan en tres bloques.
Personas y estructura
departments (un árbol), faculty, students y rooms.
Docencia
courses con course_prerequisites, semesters, sections, enrollments y grade_events.
Investigación y becas
research_projects, project_members, publications, scholarships y student_scholarships, además de audit_log.
Lo principal: el estudiante se matricula en un grupo, una edición concreta del curso en un semestre, no en el curso en sí. Por eso el camino del estudiante al curso es enrollments → sections → courses. Siete vistas, como v_student_gpa y v_course_pass_rate, contienen informes ya preparados.
Cuántos datos hay en las tablas:
Tabla
Filas
Contenido
students
2000
estudiantes
faculty
250
profesores
departments
25
departamentos
courses
116
cursos
course_prerequisites
49
requisitos previos de los cursos
semesters
20
semestres
sections
1715
grupos de un curso en el semestre
rooms
48
aulas
enrollments
24 981
matrículas en grupos
grade_events
307 081
calificaciones de tareas y exámenes
research_projects
200
proyectos de investigación
project_members
876
miembros de los proyectos
publications
500
publicaciones
scholarships
20
becas
student_scholarships
773
becas concedidas a estudiantes
audit_log
664 124
registro de cambios
Estructura de las tablas
Haz clic en una tabla para ver sus columnas, una fila de ejemplo y sus claves.
La lista de tablas
semesters - tabla de semestres académicos.
semester_ididentificador único del registro (PK, TINYINT)
termtipo de término: Otoño, Primavera, o Verano (ENUM)
academic_yearaño académico (YEAR)
namenombre del semestre (por ejemplo, 'Otoño 2024')
start_dateprimer día del semestre
end_dateúltimo día del semestre
enroll_deadlineúltima fecha para la inscripción de estudiantes
is_activesi el semestre está actualmente activo (BOOLEAN)
semester_id
term
academic_year
name
start_date
end_date
enroll_deadline
is_active
1
Otoño
2024
Otoño 2024
2024-09-02
2024-12-20
2024-09-13
1
CLAVE PRIMARIA, btree (semester_id)
CLAVE ÚNICA (term, academic_year)
rooms - aulas y laboratorios del campus.
room_ididentificador único del registro (PK, SMALLINT)
buildingnombre del edificio
room_numbernúmero o etiqueta de la sala
capacitynúmero máximo de asientos (SMALLINT)
room_typetipo de sala: conferencia, seminario, laboratorio, laboratorio de computación, o en línea (ENUM)
has_projectorsi la sala tiene proyector (BOOLEAN)
has_videosi la sala tiene equipo de videoconferencia (BOOLEAN)
room_id
building
room_number
capacity
room_type
has_projector
has_video
1
Salón de Ciencias
101
120
conferencia
1
0
CLAVE PRIMARIA, btree (room_id)
CLAVE ÚNICA (building, room_number)
scholarships - becas y subvenciones disponibles.
scholarship_ididentificador único del registro (PK, SMALLINT)
namenombre de la beca
amountmonto de la beca (DECIMAL)
frequencyfrecuencia de la beca: única, anual, o por semestre (ENUM)
eligibilitycriterios de elegibilidad como JSON - por ejemplo, {"min_gpa": 3.5, "need_based": true}
is_activesi la beca se ofrece actualmente (BOOLEAN)
publications - artículos de investigación con búsqueda de texto completo.
publication_ididentificador único del registro (PK, INT)
project_idproyecto de investigación asociado (FK, admite NULL)
titletítulo de la publicación
abstractresumen de la publicación (MEDIUMTEXT, índice FULLTEXT junto con title)
pub_yearaño de publicación (YEAR)
venuerevista o congreso (admite NULL)
doiDigital Object Identifier, DOI (admite NULL)
keywordspalabras clave, una o varias de: AI, ML, Data Science, Networking, Security, Algorithms, Databases, HCI, Theory, Bioinformatics, Systems, Mathematics, Physics, Chemistry, Biology (SET)
citation_countnúmero de citas recibidas (INT)
publication_id
project_id
title
abstract
pub_year
venue
doi
keywords
citation_count
1
1
Deep Learning for Molecular Screening
We present a transformer-based architecture for virtual screening...
audit_log - historial de cambios por fila generado por triggers (~60 000 filas).
log_ididentificador único del registro (PK, BIGINT)
table_namenombre de la tabla modificada
record_idclave primaria del registro modificado (BIGINT)
actiontipo de cambio: INSERT, UPDATE o DELETE (ENUM)
changed_atfecha y hora del cambio (TIMESTAMP)
changed_byusuario de la base de datos o contexto de la aplicación (admite NULL)
old_valuesvalores anteriores de las columnas en JSON (NULL para INSERT)
new_valuesvalores nuevos de las columnas en JSON (NULL para DELETE)
log_id
table_name
record_id
action
changed_at
changed_by
old_values
new_values
1
enrollments
1
UPDATE
2024-12-21 09:05:33
app_user
{"status":"enrolled","final_score":null}
{"status":"completed","final_score":93.50}
CLAVE PRIMARIA, btree (log_id)
Vistas
v_student_gpa - GPA ponderado de cada estudiante por semestre.
student_ididentificador del estudiante
student_numbernúmero de identificación único del estudiante
first_namenombre del estudiante
last_nameapellido del estudiante
semester_ididentificador del semestre
semester_namenombre del semestre
semester_gpaGPA ponderado del semestre
credits_earnedcréditos obtenidos en el semestre
student_id
student_number
first_name
last_name
semester_id
semester_name
semester_gpa
credits_earned
1
S000123
James
Miller
1
Fall 2024
3.72
15
v_section_roster - estudiantes inscritos con datos de contacto por grupo.
section_ididentificador del grupo
course_codecódigo del curso
course_titletítulo del curso
semester_namenombre del semestre
student_ididentificador del estudiante
student_numbernúmero de identificación único del estudiante
first_namenombre del estudiante
last_nameapellido del estudiante
emailcorreo electrónico del estudiante
statusestado de la inscripción
section_id
course_code
course_title
semester_name
student_id
student_number
first_name
last_name
email
status
1
CS301
Database Systems
Fall 2024
1
S000123
James
Miller
j.miller@student.edu
enrolled
v_course_pass_rate - porcentaje histórico de aprobados y suspensos y puntuación media por curso.
course_ididentificador del curso
codecódigo del curso
titletítulo del curso
semester_ididentificador del semestre
semester_namenombre del semestre
total_enrollednúmero total de estudiantes inscritos
passednúmero de estudiantes aprobados
pass_rateporcentaje de aprobados
avg_scorepuntuación final media
course_id
code
title
semester_id
semester_name
total_enrolled
passed
pass_rate
avg_score
1
CS301
Database Systems
1
Fall 2024
28
25
89.29
81.40
v_faculty_workload - grupos impartidos y tasa de ocupación por profesor y semestre.
faculty_ididentificador del profesor
first_namenombre del profesor
last_nameapellido del profesor
semester_ididentificador del semestre
semester_namenombre del semestre
sections_taughtnúmero de grupos impartidos
total_capacitycapacidad total de plazas en todos los grupos
total_enrollednúmero total de estudiantes inscritos
fill_ratetasa de ocupación en porcentaje
faculty_id
first_name
last_name
semester_id
semester_name
sections_taught
total_capacity
total_enrolled
fill_rate
1
Alice
Carter
1
Fall 2024
3
90
82
91.11
v_top_scholars - estudiantes ordenados por el importe total de becas recibidas.
rank_positionposición según el importe total de becas
student_ididentificador del estudiante
student_numbernúmero de identificación único del estudiante
first_namenombre del estudiante
last_nameapellido del estudiante
total_scholarshipsnúmero de becas recibidas
total_amountsuma de amount_awarded de todas las becas
rank_position
student_id
student_number
first_name
last_name
total_scholarships
total_amount
1
1
S000123
James
Miller
2
8500.00
v_publication_stats - número de artículos y citas por departamento y año.
department_ididentificador del departamento
department_namenombre del departamento
pub_yearaño de publicación
paper_countnúmero de artículos publicados
total_citationsnúmero total de citas de todos los artículos
department_id
department_name
pub_year
paper_count
total_citations
3
Computer Science
2024
12
87
v_prerequisite_tree - requisitos previos directos de cada curso.
course_ididentificador del curso
course_codecódigo del curso
course_titletítulo del curso
prerequisite_ididentificador del curso requisito previo
prerequisite_codecódigo del curso requisito previo
prerequisite_titletítulo del curso requisito previo
is_mandatorysi el requisito previo es obligatorio o recomendado
course_id
course_code
course_title
prerequisite_id
prerequisite_code
prerequisite_title
is_mandatory
5
CS401
Advanced Database Systems
1
CS301
Database Systems
1
Consultas de ejemplo
Estas consultas muestran cómo se relacionan los datos. Copia cualquiera y ejecútala en el playground.
Un estudiante, un curso y una nota: de la matrícula, pasando por el grupo, al curso y el semestre.
SELECT s.first_name, s.last_name, c.code, sem.name AS semester, e.final_grade
FROM enrollments e
JOIN students s ON s.student_id = e.student_id
JOIN sections sec ON sec.section_id = e.section_id
JOIN courses c ON c.course_id = sec.course_id
JOIN semesters sem ON sem.semester_id = sec.semester_id
WHERE e.final_grade IS NOT NULL
ORDER BY e.enrollment_id
LIMIT 3;
first_name
last_name
code
semester
final_grade
Alexis
Collier
MATH111
Fall 2024
B+
Alexis
Collier
NURS102
Fall 2024
B
Alexis
Collier
MATH106
Summer 2024
B
Horario de tutorías en JSON: un valor leído de una columna JSON con JSON_VALUE.
SELECT first_name, last_name,
JSON_VALUE(office_hours, '$[0].day') AS day,
JSON_VALUE(office_hours, '$[0].start') AS starts_at
FROM faculty
ORDER BY faculty_id
LIMIT 3;
first_name
last_name
day
starts_at
Danielle
Johnson
Tue
09:00
Jason
Hahn
Fri
08:00
Kathleen
Cannon
Fri
08:00
Ejercicios de SQL por tema
Por ahora la base University tiene 7 ejercicios, y se están añadiendo más. Las soluciones se comprueban automáticamente en un MariaDB real.
El número de la derecha es la cantidad de ejercicios del tema; los puntos de color muestran el rango de dificultad.
No. Los ejercicios y el playground de SQLtest.online ejecutan las consultas en nuestros servidores, así que basta con un navegador. En el playground, University está disponible en MariaDB 11.8.
¿Qué funciones de MariaDB usa?
Columnas JSON, tipos ENUM y SET, índices FULLTEXT, columnas VECTOR para embeddings, vistas y una jerarquía de departamentos para consultas recursivas.
¿Se pueden modificar los datos?
En el playground la base es de solo lectura, para que todos vean los mismos datos. Para practicar INSERT, UPDATE y DELETE en tus propias tablas, elige una versión normal de MariaDB en el playground.