Banco de dados University (MariaDB): esquema, tabelas e exercícios de SQL
University é um banco de exemplo do MariaDB sobre uma universidade: departamentos, professores, alunos, cursos, turmas, matrículas, notas e pesquisa.
No SQLtest.online você consulta o banco direto no navegador: resolve exercícios com correção automática e executa suas próprias consultas no playground, sem instalar nada.
University é um banco de exemplo moderno para o MariaDB 11, pensado como uma alternativa mais rica ao clássico Sakila. Ele está normalizado até a terceira forma normal e usa muitos tipos de dados do MariaDB: JSON, ENUM e SET, índices FULLTEXT e colunas VECTOR para embeddings.
Há dados suficientes para análises reais: cerca de 25 mil matrículas, 300 mil notas e um log de auditoria com mais de meio milhão de linhas. Ao mesmo tempo, o tema é familiar para quem já estudou em uma universidade.
Diagrama ER
O diagrama mostra as tabelas do University e as chaves estrangeiras entre elas. Clique para abrir em tamanho real.
O que há no banco
As tabelas se dividem em três grupos.
Pessoas e estrutura
departments (uma árvore), faculty, students e rooms.
Ensino
courses com course_prerequisites, semesters, sections, enrollments e grade_events.
Pesquisa e bolsas
research_projects, project_members, publications, scholarships e student_scholarships, além de audit_log.
O ponto principal: o aluno se matricula em uma turma, uma oferta específica do curso no semestre, e não no curso em si. Por isso o caminho do aluno até o curso é enrollments → sections → courses. Sete views, como v_student_gpa e v_course_pass_rate, trazem relatórios prontos.
Quantos dados há nas tabelas:
Tabela
Linhas
Conteúdo
students
2.000
alunos
faculty
250
professores
departments
25
departamentos
courses
116
cursos
course_prerequisites
49
pré-requisitos dos cursos
semesters
20
semestres
sections
1.715
turmas de um curso no semestre
rooms
48
salas
enrollments
24.981
matrículas nas turmas
grade_events
307.081
notas de trabalhos e provas
research_projects
200
projetos de pesquisa
project_members
876
membros dos projetos
publications
500
publicações
scholarships
20
bolsas
student_scholarships
773
bolsas concedidas aos alunos
audit_log
664.124
log de alterações
Estrutura das tabelas
Clique em uma tabela para ver suas colunas, uma linha de exemplo e as chaves.
Lista de Tabelas
semesters - tabela de semestres acadêmicos.
semester_ididentificador único do registro (PK, TINYINT)
termtipo de período: Fall, Spring ou Summer (ENUM)
academic_yearano letivo (tipo YEAR)
namenome do semestre (ex.: 'Fall 2024')
start_dateprimeiro dia do semestre
end_dateúltimo dia do semestre
enroll_deadlineúltimo dia para matrícula de estudantes
is_activeindica se o semestre está ativo no momento (BOOLEAN)
semester_id
term
academic_year
name
start_date
end_date
enroll_deadline
is_active
1
Fall
2024
Fall 2024
2024-09-02
2024-12-20
2024-09-13
1
PRIMARY KEY, btree (semester_id)
UNIQUE KEY (term, academic_year)
rooms - salas de aula e laboratórios do campus.
room_ididentificador único do registro (PK, SMALLINT)
buildingnome do edifício
room_numbernúmero ou identificação da sala
capacitynúmero máximo de lugares (SMALLINT)
room_typetipo de sala: lecture, seminar, lab, computer_lab ou online (ENUM)
has_projectorindica se a sala possui projetor (BOOLEAN)
has_videoindica se a sala possui equipamento de videoconferência (BOOLEAN)
room_id
building
room_number
capacity
room_type
has_projector
has_video
1
Science Hall
101
120
lecture
1
0
PRIMARY KEY, btree (room_id)
UNIQUE KEY (building, room_number)
scholarships - bolsas de estudo disponíveis.
scholarship_ididentificador único do registro (PK, SMALLINT)
namenome da bolsa de estudo
amountvalor da bolsa (DECIMAL)
frequencyfrequência de concessão: one-time, annual ou per-semester (ENUM)
eligibilitycritérios de elegibilidade em JSON — ex.: {"min_gpa": 3.5, "need_based": true}
is_activeindica se a bolsa está sendo oferecida no momento (BOOLEAN)
audit_log - histórico de alterações gerado por triggers (~60 000 linhas).
log_ididentificador único do registro (PK, BIGINT)
table_namenome da tabela modificada
record_idchave primária do registro modificado (BIGINT)
actiontipo de alteração: INSERT, UPDATE ou DELETE (ENUM)
changed_atdata e hora da alteração (TIMESTAMP)
changed_byusuário do banco de dados ou contexto da aplicação (nulável)
old_valuesvalores anteriores das colunas em JSON (null para INSERT)
new_valuesnovos valores das colunas em 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}
PRIMARY KEY, btree (log_id)
Visões
v_student_gpa - GPA ponderado por estudante por semestre.
student_ididentificador do estudante
student_numbernúmero de matrícula único do estudante
first_nameprimeiro nome do estudante
last_namesobrenome do estudante
semester_ididentificador do semestre
semester_namenome do semestre
semester_gpaGPA ponderado do semestre
credits_earnedcréditos obtidos no 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 - estudantes matriculados com informações de contato por turma.
section_ididentificador da turma
course_codecódigo da disciplina
course_titletítulo da disciplina
semester_namenome do semestre
student_ididentificador do estudante
student_numbernúmero de matrícula único do estudante
first_nameprimeiro nome do estudante
last_namesobrenome do estudante
emailendereço de e-mail do estudante
statussituação da matrícula
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 - percentual histórico de aprovação/reprovação e nota média por disciplina.
course_ididentificador da disciplina
codecódigo da disciplina
titletítulo da disciplina
semester_ididentificador do semestre
semester_namenome do semestre
total_enrolledtotal de estudantes matriculados
passednúmero de estudantes aprovados
pass_ratetaxa de aprovação em percentual
avg_scorenota final média
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 - turmas ministradas e taxa de ocupação por docente por semestre.
faculty_ididentificador do docente
first_nameprimeiro nome do docente
last_namesobrenome do docente
semester_ididentificador do semestre
semester_namenome do semestre
sections_taughtnúmero de turmas ministradas
total_capacitycapacidade total de vagas em todas as turmas
total_enrolledtotal de estudantes matriculados
fill_ratetaxa de ocupação em percentual
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 - estudantes classificados pelo total de bolsas recebidas.
rank_positionposição no ranking por valor total de bolsas
student_ididentificador do estudante
student_numbernúmero de matrícula único do estudante
first_nameprimeiro nome do estudante
last_namesobrenome do estudante
total_scholarshipsnúmero de bolsas concedidas
total_amountvalor total de amount_awarded em todas as bolsas
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 - contagem de artigos e citações por departamento por ano.
department_ididentificador do departamento
department_namenome do departamento
pub_yearano de publicação
paper_countnúmero de artigos publicados
total_citationstotal de citações de todos os artigos
department_id
department_name
pub_year
paper_count
total_citations
3
Computer Science
2024
12
87
v_prerequisite_tree - pré-requisitos diretos de cada disciplina.
course_ididentificador da disciplina
course_codecódigo da disciplina
course_titletítulo da disciplina
prerequisite_ididentificador da disciplina pré-requisito
prerequisite_codecódigo da disciplina pré-requisito
prerequisite_titletítulo da disciplina pré-requisito
is_mandatoryindica se o pré-requisito é obrigatório ou 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
Exemplos de consultas
Estas consultas mostram como os dados se relacionam. Copie qualquer uma e execute no playground.
Aluno, curso e nota: da matrícula, passando pela turma, até o curso e o 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
Horário de atendimento em JSON: um valor lido de uma coluna JSON com 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
Exercícios de SQL por tema
Por enquanto há 5 exercícios no banco University, e novos estão sendo adicionados. As soluções são verificadas automaticamente em um MariaDB real.
O número à direita é a quantidade de exercícios do tema; os pontos coloridos mostram a faixa de dificuldade.
Preciso instalar o MariaDB para usar o University?
Não. Os exercícios e o playground do SQLtest.online executam as consultas nos nossos servidores, então basta um navegador. No playground, o University está disponível no MariaDB 11.8.
Quais recursos do MariaDB ele usa?
Colunas JSON, tipos ENUM e SET, índices FULLTEXT, colunas VECTOR para embeddings, views e uma hierarquia de departamentos para consultas recursivas.
Posso alterar os dados?
No playground o banco é somente leitura, para que todos vejam os mesmos dados. Para praticar INSERT, UPDATE e DELETE nas suas próprias tabelas, escolha uma versão comum do MariaDB no playground.