A fronte del difficile compito sql che potete leggere nella sa consegna nell’immagine:
- Ho estratto il testo dell’immagine con uno dei numerosi estrattori gratuiti online
- Ho passato il testo a chatGPT aggiungendo:
crea un db sql e popolalo - Mi sono fidato, ho copiato il testo in un file.sql ed usando xampp con il comando source l’ho fatto caricare
- Primo errore: il database non era stato creato
- Secondo errore (più complesso): ERROR 1005 (HY000) at line 34 in file: ‘\mio\db\VHS\CREATETABLEFilm.sql’: Can’t create table
vhs
.noleggio
(errno: 150 “Foreign key constraint is incorrectly formed”)
RISOLUZIONE del Complesso Errore: ho passato il tutto a chatGPT ed ho chiesto che analizzasse l’errore. Al primo punto nella sua risposta:
Assicurati che la tabella a cui si fa riferimento nella chiave esterna esista già nel database. In questo caso, verifica che la tabella “Cliente” sia stata creata prima della tabella “Noleggio”.
Ho quindi come suggerito invertito gli ordini e tutto è filato liscio.
- Ho quindi inserito nel db il file del popolamento costruito da chatGPT
- Ora sono pronto per le interrogazioni
ESERCIZIO FINITO
Di seguito il file di creazione DB
DROP DATABASE VHS
;
CREATE DATABASE VHS
USE VHS
;
DROP TABLE IF EXISTS Film
;
DROP TABLE IF EXISTS Cassetta
;
DROP TABLE IF EXISTS Noleggio
;
DROP TABLE IF EXISTS Cliente
;
CREATE TABLE Film (
CodiceVHS INT PRIMARY KEY,
Titolo VARCHAR(100),
Regista VARCHAR(100),
AttoriPrincipali VARCHAR(200),
Nazionalita VARCHAR(50),
PersonaggioInterpretato VARCHAR(100),
AnnoProduzione INT,
LinguaOriginale VARCHAR(50),
Sottotitolato BOOLEAN
);
CREATE TABLE Cassetta (
Collocazione VARCHAR(50) PRIMARY KEY,
CodiceVHS INT,
FOREIGN KEY (CodiceVHS) REFERENCES Film(CodiceVHS)
);
CREATE TABLE Cliente (
CodiceCliente INT PRIMARY KEY,
Cognome VARCHAR(100),
Nome VARCHAR(100),
Indirizzo VARCHAR(200),
Telefono VARCHAR(20)
);
CREATE TABLE Noleggio (
CollocazioneCassetta VARCHAR(50),
CodiceCliente INT,
DataNoleggio DATE,
FOREIGN KEY (CollocazioneCassetta) REFERENCES Cassetta(Collocazione),
FOREIGN KEY (CodiceCliente) REFERENCES Cliente(CodiceCliente)
);
Per quanto riguarda il popolamento aveva “poca voglia di lavorare” ed ho dovuto insitere più volte ma ogni volta mi ha dato solo due campi suggerendomi di completare
INSERT INTO Film (CodiceVHS, Titolo, Regista, AttoriPrincipali, Nazionalita, PersonaggioInterpretato, AnnoProduzione, LinguaOriginale, Sottotitolato)
VALUES (1, ‘Il Padrino’, ‘Francis Ford Coppola’, ‘Marlon Brando, Al Pacino’, ‘USA’, ‘Vito Corleone, Michael Corleone’, 1972, ‘Inglese’, TRUE);
INSERT INTO Film (CodiceVHS, Titolo, Regista, AttoriPrincipali, Nazionalita, PersonaggioInterpretato, AnnoProduzione, LinguaOriginale, Sottotitolato)
VALUES (2, ‘La vita è bella’, ‘Roberto Benigni’, ‘Roberto Benigni, Nicoletta Braschi’, ‘Italia’, ‘Guido, Dora’, 1997, ‘Italiano’, FALSE);
INSERT INTO Cassetta (Collocazione, CodiceVHS)
VALUES (‘A1’, 1);
INSERT INTO Cassetta (Collocazione, CodiceVHS)
VALUES (‘B2’, 2);
INSERT INTO Cliente (CodiceCliente, Cognome, Nome, Indirizzo, Telefono)
VALUES (1, ‘Rossi’, ‘Mario’, ‘Via Roma 123’, ‘1234567890’);
INSERT INTO Cliente (CodiceCliente, Cognome, Nome, Indirizzo, Telefono)
VALUES (2, ‘Verdi’, ‘Laura’, ‘Via Milano 456’, ‘9876543210’);
INSERT INTO Noleggio (CollocazioneCassetta, CodiceCliente, DataNoleggio)
VALUES (‘A1’, 1, ‘2023-05-28’);
INSERT INTO Noleggio (CollocazioneCassetta, CodiceCliente, DataNoleggio)
VALUES (‘B2’, 2, ‘2023-05-29’);
INSERT INTO Film (CodiceVHS, Titolo, Regista, AttoriPrincipali, Nazionalita, PersonaggioInterpretato, AnnoProduzione, LinguaOriginale, Sottotitolato)
VALUES (3, ‘Forrest Gump’, ‘Robert Zemeckis’, ‘Tom Hanks, Robin Wright’, ‘USA’, ‘Forrest Gump, Jenny Curran’, 1994, ‘Inglese’, TRUE);
INSERT INTO Film (CodiceVHS, Titolo, Regista, AttoriPrincipali, Nazionalita, PersonaggioInterpretato, AnnoProduzione, LinguaOriginale, Sottotitolato)
VALUES (4, ‘C\’era una volta in America’, ‘Sergio Leone’, ‘Robert De Niro, James Woods’, ‘USA’, ‘David “Noodles” Aaronson, Maximilian “Max” Bercovicz’, 1984, ‘Inglese’, FALSE);
INSERT INTO Cassetta (Collocazione, CodiceVHS)
VALUES (‘C3’, 3);
INSERT INTO Cassetta (Collocazione, CodiceVHS)
VALUES (‘D4’, 4);
INSERT INTO Cliente (CodiceCliente, Cognome, Nome, Indirizzo, Telefono)
VALUES (3, ‘Bianchi’, ‘Giulia’, ‘Via Venezia 789’, ‘5678901234’);
INSERT INTO Cliente (CodiceCliente, Cognome, Nome, Indirizzo, Telefono)
VALUES (4, ‘Russo’, ‘Antonio’, ‘Via Firenze 234’, ‘4321098765’);
INSERT INTO Noleggio (CollocazioneCassetta, CodiceCliente, DataNoleggio)
VALUES (‘C3’, 3, ‘2023-05-30’);
INSERT INTO Noleggio (CollocazioneCassetta, CodiceCliente, DataNoleggio)
VALUES (‘D4’, 4, ‘2023-05-29’);
INSERT INTO Film (CodiceVHS, Titolo, Regista, AttoriPrincipali, Nazionalita, PersonaggioInterpretato, AnnoProduzione, LinguaOriginale, Sottotitolato)
VALUES (5, ‘Pulp Fiction’, ‘Quentin Tarantino’, ‘John Travolta, Uma Thurman’, ‘USA’, ‘Vincent Vega, Mia Wallace’, 1994, ‘Inglese’, TRUE);
INSERT INTO Film (CodiceVHS, Titolo, Regista, AttoriPrincipali, Nazionalita, PersonaggioInterpretato, AnnoProduzione, LinguaOriginale, Sottotitolato)
VALUES (6, ‘La dolce vita’, ‘Federico Fellini’, ‘Marcello Mastroianni, Anita Ekberg’, ‘Italia’, ‘Marcello Rubini, Sylvia’, 1960, ‘Italiano’, FALSE);
INSERT INTO Cassetta (Collocazione, CodiceVHS)
VALUES (‘E5’, 5);
INSERT INTO Cassetta (Collocazione, CodiceVHS)
VALUES (‘F6’, 6);
INSERT INTO Cliente (CodiceCliente, Cognome, Nome, Indirizzo, Telefono)
VALUES (5, ‘Gialli’, ‘Carlo’, ‘Via Napoli 567’, ‘3456789012’);
INSERT INTO Cliente (CodiceCliente, Cognome, Nome, Indirizzo, Telefono)
VALUES (6, ‘Marroni’, ‘Francesca’, ‘Via Palermo 678’, ‘6789012345’);
INSERT INTO Noleggio (CollocazioneCassetta, CodiceCliente, DataNoleggio)
VALUES (‘E5’, 5, ‘2023-05-30’);
INSERT INTO Noleggio (CollocazioneCassetta, CodiceCliente, DataNoleggio)
VALUES (‘F6’, 6, ‘2023-05-29’);