— Tabella degli studenti
CREATE TABLE Studente (
ID_Studente INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100) NOT NULL,
Username VARCHAR(50) UNIQUE NOT NULL,
Password CHAR(60) NOT NULL
);
— Tabella delle classi virtuali
CREATE TABLE Classe (
ID_Classe INT PRIMARY KEY AUTO_INCREMENT
);
— Tabella delle materie
CREATE TABLE Materia (
ID_Materia INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100) NOT NULL
);
— Tabella di appartenenza Studente-Classe
CREATE TABLE Appartenenza (
ID_Studente INT,
ID_Classe INT,
PRIMARY KEY (ID_Studente, ID_Classe),
FOREIGN KEY (ID_Studente) REFERENCES Studente(ID_Studente),
FOREIGN KEY (ID_Classe) REFERENCES Classe(ID_Classe)
);
— Tabella dei docenti
CREATE TABLE Docente (
ID_Docente INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
Password CHAR(60) NOT NULL
);
— Tabella delle competenze Docente-Classe
CREATE TABLE Competenza (
ID_Comp INT PRIMARY KEY AUTO_INCREMENT,
ID_Docente INT,
ID_Classe INT,
FOREIGN KEY (ID_Docente) REFERENCES Docente(ID_Docente),
FOREIGN KEY (ID_Classe) REFERENCES Classe(ID_Classe)
);
— Tabella degli argomenti
CREATE TABLE Argomento (
ID_Argomento INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100) NOT NULL
);
— Tabella dei videogiochi educativi
CREATE TABLE VideoGioco (
ID_VideoGioco INT PRIMARY KEY AUTO_INCREMENT,
DescrBreve VARCHAR(255) NOT NULL,
DescrEstesa TEXT NOT NULL,
Immagine VARCHAR(255),
ID_Argomento INT,
FOREIGN KEY (ID_Argomento) REFERENCES Argomento(ID_Argomento)
);
— Tabella dei guadagni degli studenti nei videogiochi
CREATE TABLE Guadagno (
ID_Studente INT,
ID_VideoGioco INT,
Monete INT NOT NULL CHECK (Monete >= 0),
PRIMARY KEY (ID_Studente, ID_VideoGioco),
FOREIGN KEY (ID_Studente) REFERENCES Studente(ID_Studente),
FOREIGN KEY (ID_VideoGioco) REFERENCES VideoGioco(ID_VideoGioco)
);
— Tabella per i feedback degli studenti sui videogiochi
CREATE TABLE Feedback (
ID_Feedback INT PRIMARY KEY AUTO_INCREMENT,
ID_Studente INT,
ID_VideoGioco INT,
Punteggio INT CHECK (Punteggio BETWEEN 1 AND 5),
Descrizione VARCHAR(160),
FOREIGN KEY (ID_Studente) REFERENCES Studente(ID_Studente),
FOREIGN KEY (ID_VideoGioco) REFERENCES VideoGioco(ID_VideoGioco)
);
— #########################################################
— 2. INSERIMENTO DI DATI DI TEST
— #########################################################
— 1. Inserisci gli argomenti
INSERT INTO Argomento (Nome) VALUES
(‘Matematica’),
(‘Fisica’),
(‘Informatica’),
(‘Storia’),
(‘Geografia’);
— 2. Inserisci gli studenti
INSERT INTO Studente (Nome, Username, Password) VALUES
(‘Marco Rossi’, ‘marcor’, ‘password123’),
(‘Giulia Bianchi’, ‘giuliab’, ‘pass456’),
(‘Luca Verdi’, ‘lucav’, ‘secure789’),
(‘Elisa Neri’, ‘elisan’, ‘mypassword’),
(‘Davide Gialli’, ‘davideg’, ‘topsecret’);
— 3. Inserisci le classi
INSERT INTO Classe (ID_Classe) VALUES (101), (102), (103), (104), (105);
— 4. Inserisci le materie
INSERT INTO Materia (Nome) VALUES
(‘Matematica’),
(‘Fisica’),
(‘Informatica’),
(‘Storia’),
(‘Geografia’);
— 5. Inserisci l’appartenenza degli studenti alle classi
INSERT INTO Appartenenza (ID_Studente, ID_Classe) VALUES
(1, 101), (2, 102), (3, 103), (4, 104), (5, 105);
— 6. Inserisci i docenti
INSERT INTO Docente (Nome, Email, Password) VALUES
(‘Prof. Bianchi’, ‘bianchi@email.com’, ‘doc123’),
(‘Prof.ssa Neri’, ‘neri@email.com’, ‘teach456’),
(‘Prof. Verdi’, ‘verdi@email.com’, ‘edu789’),
(‘Prof.ssa Rossi’, ‘rossi@email.com’, ‘learningsafe’),
(‘Prof. Gialli’, ‘gialli@email.com’, ‘securepass’);
— 7. Inserisci i videogiochi educativi (assicurati che gli argomenti siano già inseriti)
INSERT INTO VideoGioco (DescrBreve, DescrEstesa, Immagine, ID_Argomento) VALUES
(‘Gioco di logica matematica’, ‘Un gioco sulla risoluzione di equazioni’, ‘img1.jpg’, 1),
(‘Simulazione di fisica’, ‘Studio della dinamica’, ‘img2.jpg’, 2),
(‘Coding Adventure’, ‘Imparare a programmare’, ‘img3.jpg’, 3),
(‘Storia Interattiva’, ‘Rivoluzione Francese’, ‘img4.jpg’, 4),
(‘GeoExplorer’, ‘Esplora continenti e oceani’, ‘img5.jpg’, 5);
— 8. Inserisci i guadagni degli studenti nei videogiochi
INSERT INTO Guadagno (ID_Studente, ID_VideoGioco, Monete) VALUES
(1, 1, 100),
(2, 2, 150),
(3, 3, 200),
(4, 4, 50),
(5, 5, 300);
— 9. Inserisci i feedback degli studenti sui videogiochi
INSERT INTO Feedback (ID_Studente, ID_VideoGioco, Punteggio, Descrizione) VALUES
(1, 1, 5, ‘Molto educativo e interessante!’),
(2, 2, 4, ‘Ben fatto, ma sarebbe utile più contenuti.’),
(3, 3, 5, ‘Fantastico per imparare a programmare!’),
(4, 4, 3, ‘Interessante, ma un po\’ difficile.’),
(5, 5, 4, ‘Ottimo, ma potrebbe essere più interattivo.’);
— 1. Inserisci le competenze dei docenti
INSERT INTO Competenza (ID_Docente, ID_Classe) VALUES
(1, 101), — Prof. Bianchi per la classe 101
(2, 102), — Prof.ssa Neri per la classe 102
(3, 103), — Prof. Verdi per la classe 103
(4, 104), — Prof.ssa Rossi per la classe 104
(5, 105); — Prof. Gialli per la classe 105
— #########################################################
— 3. QUERY RICHIESTE
— #########################################################
— a) Elenco alfabetico dei videogiochi per un argomento
SELECT DescrBreve
FROM VideoGioco
WHERE ID_Argomento = ?
ORDER BY DescrBreve ASC;
— b) Classifica degli studenti in base alle monete guadagnate per un videogioco
SELECT S.Nome, G.Monete
FROM Guadagno G
JOIN Studente S ON G.ID_Studente = S.ID_Studente
WHERE G.ID_VideoGioco = ?
ORDER BY G.Monete DESC, S.Nome ASC;
— c) Numero di classi in cui è utilizzato ciascun videogioco
SELECT V.DescrBreve, COUNT(DISTINCT A.ID_Classe) AS NumeroClassi
FROM VideoGioco V
JOIN Guadagno G ON V.ID_VideoGioco = G.ID_VideoGioco
JOIN Appartenenza A ON G.ID_Studente = A.ID_Studente
GROUP BY V.DescrBreve;