Io creerei le seguenti tabelle:
codice:
materie { id, nome }
studenti { id, nome }
sessioni { id, id_materia, data, ora, max utenti }
prenotazioni { id_studente, id_sessione }
Poi....
Amministrazione deve poter visualizzare quanti studenti per materia/giorno/ora si sono iscritti
codice:
SELECT m.nome AS "materia", data, ora, max_utenti, tot_studenti_sessione
FROM sessioni s
JOIN materie m ON m.id = s.id_materia
JOIN (
SELECT id_sessione, COUNT(*) AS tot_studenti_sessione
FROM prenotazioni
GROUP BY id_sessione
) AS utenti_sessione su ON us.id_sessione = s.id
codice:
SELECT m.nome AS "materia", data, ora, stu.nome AS "studente"
FROM sessioni s
JOIN materie m ON m.id = s.id_materia
JOIN prenotazioni p ON p.id_sessione = s.id
JOIN studenti stu ON stu.id = p.id_studente
WHERE s.id = ...
Lo studente deve poter vedere a che esami è iscritto e in quale orario.
codice:
SELECT stu.nome AS "studente", m.nome AS "materia", data, ora
FROM studenti stu
JOIN prenotazioni p on p.id_studente = stu.id
JOIN sessioni s ON s.id = p.id_sessione
JOIN materie m ON m.id = s.id_materia
where stu.id = ...