Base de données University (MariaDB) : schéma, tables et exercices SQL
University est une base d'exemple MariaDB sur une université : départements, enseignants, étudiants, cours, groupes, inscriptions, notes et recherche.
Sur SQLtest.online, vous l'interrogez directement dans le navigateur : vous résolvez des exercices corrigés automatiquement et exécutez vos propres requêtes dans le bac à sable, sans rien installer.
University est une base d'exemple moderne pour MariaDB 11, conçue comme une alternative plus riche à la classique Sakila. Elle est normalisée jusqu'à la troisième forme normale et utilise de nombreux types de données MariaDB : JSON, ENUM et SET, index FULLTEXT et colonnes VECTOR pour les embeddings.
Les données suffisent pour une vraie analyse : environ 25 000 inscriptions, 300 000 notes et un journal d'audit de plus d'un demi-million de lignes. Le sujet reste familier à quiconque a fait des études supérieures.
Diagramme ER
Le diagramme montre les tables de University et les clés étrangères qui les relient. Cliquez pour l'ouvrir en taille réelle.
Contenu de la base
Les tables se répartissent en trois groupes.
Personnes et structure
departments (un arbre), faculty, students et rooms.
Enseignement
courses avec course_prerequisites, semesters, sections, enrollments et grade_events.
Recherche et bourses
research_projects, project_members, publications, scholarships et student_scholarships, ainsi que audit_log.
L'essentiel à retenir : l'étudiant s'inscrit à un groupe, une session précise d'un cours dans un semestre, et non au cours lui-même. Le chemin de l'étudiant au cours est donc enrollments → sections → courses. Sept vues, comme v_student_gpa et v_course_pass_rate, contiennent des rapports tout prêts.
Volume de données des tables :
Table
Lignes
Contenu
students
2 000
étudiants
faculty
250
enseignants
departments
25
départements
courses
116
cours
course_prerequisites
49
prérequis des cours
semesters
20
semestres
sections
1 715
groupes d'un cours dans un semestre
rooms
48
salles
enrollments
24 981
inscriptions aux groupes
grade_events
307 081
notes des devoirs et examens
research_projects
200
projets de recherche
project_members
876
membres des projets
publications
500
publications
scholarships
20
bourses
student_scholarships
773
bourses attribuées aux étudiants
audit_log
664 124
journal des modifications
Structure des tables
Cliquez sur une table pour voir ses colonnes, une ligne d'exemple et ses clés.
Liste des tables
semesters - table des semestres académiques.
semester_ididentifiant unique de l'enregistrement (PK, TINYINT)
termtype de période : Fall, Spring ou Summer (ENUM)
academic_yearannée académique (type YEAR)
namenom du semestre (ex. 'Fall 2024')
start_datepremier jour du semestre
end_datedernier jour du semestre
enroll_deadlinedernière date pour l'inscription des étudiants
is_activeindique si le semestre est actuellement en cours (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 - salles de cours et laboratoires du campus.
room_ididentifiant unique de l'enregistrement (PK, SMALLINT)
buildingnom du bâtiment
room_numbernuméro ou étiquette de la salle
capacitynombre maximum de places (SMALLINT)
room_typetype de salle : lecture, seminar, lab, computer_lab ou online (ENUM)
has_projectorindique si la salle est équipée d'un projecteur (BOOLEAN)
has_videoindique si la salle est équipée d'un système de vidéoconférence (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 - bourses disponibles.
scholarship_ididentifiant unique de l'enregistrement (PK, SMALLINT)
namenom de la bourse
amountmontant de la récompense (DECIMAL)
frequencyfréquence d'attribution : one-time, annual ou per-semester (ENUM)
eligibilitycritères d'éligibilité au format JSON — ex. {"min_gpa": 3.5, "need_based": true}
is_activeindique si la bourse est actuellement proposée (BOOLEAN)
publications - publications de recherche avec prise en charge de la recherche plein texte.
publication_ididentifiant unique de l'enregistrement (PK, INT)
project_idprojet de recherche associé (FK, nullable)
titletitre de la publication
abstractrésumé de la publication (MEDIUMTEXT, index FULLTEXT avec title)
pub_yearannée de publication (YEAR)
venuenom du journal ou de la conférence (nullable)
doiidentifiant numérique d'objet DOI (nullable)
keywordsmots-clés — une ou plusieurs valeurs parmi : AI, ML, Data Science, Networking, Security, Algorithms, Databases, HCI, Theory, Bioinformatics, Systems, Mathematics, Physics, Chemistry, Biology (SET)
citation_countnombre de citations reçues (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 - historique des modifications généré par déclencheurs (~60 000 lignes).
log_ididentifiant unique de l'enregistrement (PK, BIGINT)
table_namenom de la table modifiée
record_idclé primaire de l'enregistrement modifié (BIGINT)
actiontype de modification : INSERT, UPDATE ou DELETE (ENUM)
changed_atdate et heure de la modification (TIMESTAMP)
changed_byutilisateur de la base de données ou contexte applicatif (nullable)
old_valuesvaleurs précédentes des colonnes au format JSON (null pour INSERT)
new_valuesnouvelles valeurs des colonnes au format JSON (null pour 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)
Vues
v_student_gpa - moyenne pondérée par étudiant et par semestre.
student_ididentifiant de l'étudiant
student_numbernuméro d'étudiant unique
first_nameprénom de l'étudiant
last_namenom de famille de l'étudiant
semester_ididentifiant du semestre
semester_namenom du semestre
semester_gpamoyenne pondérée du semestre
credits_earnedcrédits obtenus au cours du 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 - étudiants inscrits avec coordonnées par groupe de cours.
section_ididentifiant du groupe
course_codecode du cours
course_titleintitulé du cours
semester_namenom du semestre
student_ididentifiant de l'étudiant
student_numbernuméro d'étudiant unique
first_nameprénom de l'étudiant
last_namenom de famille de l'étudiant
emailadresse e-mail de l'étudiant
statusstatut d'inscription
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 - taux de réussite/échec historique et score moyen par cours.
course_ididentifiant du cours
codecode du cours
titleintitulé du cours
semester_ididentifiant du semestre
semester_namenom du semestre
total_enrollednombre total d'étudiants inscrits
passednombre d'étudiants ayant réussi
pass_ratetaux de réussite en pourcentage
avg_scorescore final moyen
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 - groupes enseignés et taux de remplissage par enseignant et par semestre.
faculty_ididentifiant du membre du corps enseignant
first_nameprénom du membre du corps enseignant
last_namenom de famille du membre du corps enseignant
semester_ididentifiant du semestre
semester_namenom du semestre
sections_taughtnombre de groupes enseignés
total_capacitycapacité totale en places sur tous les groupes
total_enrollednombre total d'étudiants inscrits
fill_ratetaux de remplissage en pourcentage
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 - étudiants classés par montant total de bourses reçues.
rank_positionclassement par montant total de bourses
student_ididentifiant de l'étudiant
student_numbernuméro d'étudiant unique
first_nameprénom de l'étudiant
last_namenom de famille de l'étudiant
total_scholarshipsnombre de bourses attribuées
total_amountmontant total de amount_awarded sur toutes les bourses
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 - nombre d'articles et citations par département et par année.
department_ididentifiant du département
department_namenom du département
pub_yearannée de publication
paper_countnombre d'articles publiés
total_citationsnombre total de citations sur tous les articles
department_id
department_name
pub_year
paper_count
total_citations
3
Computer Science
2024
12
87
v_prerequisite_tree - prérequis directs pour chaque cours.
course_ididentifiant du cours
course_codecode du cours
course_titleintitulé du cours
prerequisite_ididentifiant du cours prérequis
prerequisite_codecode du cours prérequis
prerequisite_titleintitulé du cours prérequis
is_mandatoryindique si le prérequis est obligatoire ou recommandé
course_id
course_code
course_title
prerequisite_id
prerequisite_code
prerequisite_title
is_mandatory
5
CS401
Advanced Database Systems
1
CS301
Database Systems
1
Exemples de requêtes
Ces requêtes montrent comment les données sont reliées. Copiez-en une et exécutez-la dans le bac à sable.
Un étudiant, un cours et une note : de l'inscription au cours et au semestre en passant par le groupe.
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
Heures de permanence en JSON : une valeur lue dans une colonne JSON avec 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
Exercices SQL par thème
La base University compte pour l'instant 5 exercices, et d'autres sont en préparation. Les solutions sont vérifiées automatiquement sur un vrai serveur MariaDB.
Le nombre à droite indique combien d'exercices compte le thème ; les points colorés montrent la plage de difficulté.
Faut-il installer MariaDB pour utiliser University ?
Non. Les exercices et le bac à sable de SQLtest.online exécutent les requêtes sur nos serveurs : un navigateur suffit. Dans le bac à sable, University est disponible sous MariaDB 11.8.
Quelles fonctionnalités de MariaDB utilise-t-elle ?
Des colonnes JSON, les types ENUM et SET, des index FULLTEXT, des colonnes VECTOR pour les embeddings, des vues et une hiérarchie de départements pour les requêtes récursives.
Peut-on modifier les données ?
Dans le bac à sable, la base est en lecture seule pour que tout le monde voie les mêmes données. Pour pratiquer INSERT, UPDATE et DELETE sur vos propres tables, choisissez une version ordinaire de MariaDB dans le bac à sable.