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.
- 16 tablas y 7 vistas
- 2000 estudiantes
- 24 981 matrículas
- 5 ejercicios de SQL
Qué es University
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
- 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)
- 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)
- 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)
| scholarship_id | name | amount | frequency | eligibility | is_active |
|---|---|---|---|---|---|
| 1 | Beca de Excelencia del Decano | 5000.00 | anual | {"min_gpa": 3.8, "need_based": false, "majors": ["CS","Math"]} | 1 |
- CLAVE PRIMARIA, btree (scholarship_id)
- department_ididentificador único del registro (PK, TINYINT)
- parent_ididentificador del departamento padre — FK autorreferencial (nullable)
- codecódigo corto del departamento (CHAR)
- namenombre del departamento
- levelnivel de jerarquía: 1 = Facultad, 2 = Departamento, 3 = Subdepartamento (TINYINT)
- head_faculty_ididentificador del jefe del departamento (FK, nullable)
- establishedaño en que se estableció el departamento (YEAR, nullable)
| department_id | parent_id | code | name | level | head_faculty_id | established |
|---|---|---|---|---|---|---|
| 1 | [null] | ENG | Facultad de Ingeniería | 1 | 1 | 1965 |
- CLAVE PRIMARIA, btree (department_id)
- CLAVE ÚNICA (code)
- CLAVE FORÁNEA (parent_id) REFERENCIAS departments(department_id)
- CLAVE FORÁNEA (head_faculty_id) REFERENCIAS faculty(faculty_id)
- faculty_ididentificador único del registro (PK, SMALLINT)
- department_ididentificador del departamento (FK)
- first_namenombre del miembro de la facultad
- last_nameapellido del miembro de la facultad
- emaildirección de correo electrónico institucional
- phonenúmero de teléfono de la oficina (nullable)
- rankrango académico: Instructor, Profesor Asistente, Profesor Asociado, Profesor, o Emérito (ENUM)
- hire_datefecha de contratación
- officenúmero o ubicación de la oficina (nullable)
- office_hourshorario de oficina semanal como arreglo JSON — por ejemplo,
[{"day":"Lun","start":"10:00","end":"12:00"}] - biotexto biográfico (TEXT, nullable)
- is_activesi el miembro de la facultad está actualmente activo (BOOLEAN)
| faculty_id | department_id | first_name | last_name | phone | rank | hire_date | office | office_hours | bio | is_active | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 3 | Alice | Carter | a.carter@university.edu | +15550100 | Profesor | 2010-08-15 | ENG-204 | [{"day":"Lun","start":"10:00","end":"12:00"}] | Experto en sistemas distribuidos. | 1 |
- CLAVE PRIMARIA, btree (faculty_id)
- CLAVE ÚNICA (email)
- CLAVE FORÁNEA (department_id) REFERENCIAS departments(department_id)
- student_ididentificador único del registro (PK, INT)
- department_ididentificador del departamento de origen (FK)
- student_numbernúmero de identificación único del estudiante (CHAR, por ejemplo, 'S000123')
- first_namenombre del estudiante
- last_nameapellido del estudiante
- emaildirección de correo electrónico del estudiante
- date_of_birthfecha de nacimiento del estudiante
- gendergénero: M, F, NB, Otro, o Prefiero no decir (ENUM, nullable)
- enrollment_datefecha en que el estudiante fue inscrito por primera vez
- expected_gradaño de graduación esperado (YEAR, nullable)
- statusestado de inscripción: activo, inactivo, graduado, suspendido, o retirado (ENUM)
- gpapromedio acumulativo de GPA 0.000–4.000, mantenido por trigger (DECIMAL, nullable)
- contactscontacto de emergencia y dirección como JSON — por ejemplo,
{"emergency":{"name":"Jane Doe","phone":"+1-555-0100"}}
| student_id | department_id | student_number | first_name | last_name | playground.
Un estudiante, un curso y una nota: de la matrícula, pasando por el grupo, al curso y el semestre.
Horario de tutorías en JSON: un valor leído de una columna JSON con JSON_VALUE.
Ejercicios de SQL por temaPor ahora la base University tiene 5 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.
Por dónde empezarLos primeros ejercicios de la base University:
Todos los ejercicios de University → Preguntas frecuentes¿Hay que instalar MariaDB para usar University?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. |
|---|