FASI DI PROGETTAZIONE BASE DATI – NEGOZIO DI VIDEO GIOCHI
Progettare una base di dati per un negozio di videogiochi implica la creazione di una struttura che possa gestire vari aspetti del business, come la gestione dei clienti, degli ordini, dei videogiochi, dei pagamenti e dei fornitori. Ecco un approccio dettagliato passo dopo passo per progettare la base di dati, dall'analisi dei requisiti fino alla creazione del modello entità-relazione (ER) e alla scrittura delle query SQL.
1. Analisi dei Requisiti
La prima fase di progettazione consiste nell'analizzare i requisiti del sistema. Dobbiamo capire che tipo di informazioni devono essere gestite e come il sistema dovrà funzionare. Ecco una lista di requisiti principali per il negozio di videogiochi:
Requisiti principali:
-
Clienti: I clienti devono essere identificati con informazioni come nome, indirizzo, telefono, email, e storico degli acquisti.
-
Videogiochi: Ogni videogioco ha un titolo, una descrizione, una piattaforma (es. PS5, Xbox, PC), un prezzo, un genere e una quantità disponibile in magazzino.
-
Ordini: Un ordine deve contenere informazioni su quale cliente ha fatto l'ordine, i videogiochi acquistati, la quantità, il prezzo totale e lo stato dell'ordine.
-
Pagamenti: Il sistema deve tenere traccia dei pagamenti effettuati, inclusi metodo di pagamento, data e importo.
-
Fornitori: I videogiochi vengono acquistati da fornitori, e dobbiamo registrare quali fornitori forniscono quali giochi e in quale quantità.
Domande da porsi:
-
Come vengono gestiti gli ordini? Un ordine può contenere più videogiochi?
-
Come gestiamo il pagamento degli ordini (metodo di pagamento, importo)?
-
Come registriamo la fornitura di nuovi giochi nel negozio? Ogni gioco può essere fornito da più fornitori?
2. Disegno Logico dei Dati
Il passo successivo consiste nel creare una rappresentazione logica dei dati, in cui identifichiamo le entità e le relazioni tra di esse. In questa fase definiremo le tabelle principali e i loro attributi.
Entità principali:
-
Cliente: Ogni cliente ha un identificativo unico (ID_cliente), nome, indirizzo, telefono e email.
-
Videogioco: Ogni videogioco ha un identificativo unico (ID_videogioco), un titolo, una descrizione, una piattaforma (PS5, Xbox, ecc.), un prezzo e una quantità disponibile in magazzino.
-
Ordine: Ogni ordine ha un identificativo unico (ID_ordine), una data, un ID_cliente e uno stato (ad esempio "In elaborazione", "Spedito").
-
Dettaglio Ordine: Un ordine può contenere più videogiochi, e ogni videogioco può essere associato a una quantità acquistata e al suo prezzo unitario.
-
Pagamento: Ogni pagamento ha un identificativo unico (ID_pagamento), è associato a un ordine, e include data, metodo di pagamento e importo.
-
Fornitore: I fornitori sono identificati da un ID_fornitore e contengono informazioni sul nome, contatti, e i videogiochi forniti.
-
Fornitura: La fornitura registra quali videogiochi sono forniti da ciascun fornitore, in quale quantità e quando.
Relazioni tra le entità:
-
Un Cliente può fare molti Ordini.
-
Un Ordine può contenere più Dettagli Ordine (ogni dettaglio rappresenta un videogioco acquistato in una determinata quantità).
-
Un Ordine è associato a un Pagamento (ogni ordine ha un pagamento associato).
-
Un Videogioco può essere acquistato in molti Ordini, e un Ordine può contenere molti Videogiochi.
-
Un Videogioco può essere fornito da più Fornitori.
-
Un Fornitore può fornire più Videogiochi.
3. Modello Entità-Relazione (ER)
In questa fase, creiamo un modello entità-relazione (ER) che rappresenta graficamente le entità, i loro attributi e le relazioni tra di esse. Questo diagramma è utile per visualizzare come i dati interagiscono tra loro.
Entità:
-
Cliente: ID_cliente, nome, indirizzo, telefono, email
-
Videogioco: ID_videogioco, titolo, descrizione, piattaforma, prezzo, quantità_disponibile
-
Ordine: ID_ordine, data_ordine, ID_cliente, stato_ordine
-
Dettaglio Ordine: ID_ordine, ID_videogioco, quantità, prezzo_unitario
-
Pagamento: ID_pagamento, ID_ordine, data_pagamento, metodo_pagamento, importo
-
Fornitore: ID_fornitore, nome_fornitore, contatti
-
Fornitura: ID_fornitore, ID_videogioco, quantità_fornita, data_fornitura
Relazioni:
-
Cliente 1:N Ordine: Un cliente può fare più ordini.
-
Ordine 1:N Dettaglio Ordine: Un ordine può contenere più dettagli (videogiochi).
-
Ordine 1:1 Pagamento: Ogni ordine ha un pagamento associato.
-
Videogioco N:M Dettaglio Ordine: Un videogioco può apparire in più ordini, e ogni ordine può contenere più videogiochi.
-
Fornitore N:M Videogioco: Un fornitore può fornire più videogiochi, e un videogioco può essere fornito da più fornitori.
4. Creazione del Modello Relazionale
In questa fase, traduciamo il modello ER in un modello relazionale, creando le tabelle che rappresentano le entità e le loro relazioni, usando chiavi primarie e chiavi esterne per collegarle.
Esempio di tabelle SQL:
CREATE TABLE Cliente (
ID_cliente INT PRIMARY KEY,
nome VARCHAR(100),
indirizzo VARCHAR(200),
telefono VARCHAR(15),
email VARCHAR(100)
);
CREATE TABLE Videogioco (
ID_videogioco INT PRIMARY KEY,
titolo VARCHAR(100),
descrizione TEXT,
piattaforma VARCHAR(50),
prezzo DECIMAL(10, 2),
quantità_disponibile INT
);
CREATE TABLE Ordine (
ID_ordine INT PRIMARY KEY,
data_ordine DATE,
ID_cliente INT,
stato_ordine VARCHAR(50),
FOREIGN KEY (ID_cliente) REFERENCES Cliente(ID_cliente)
);
CREATE TABLE Dettaglio_Ordine (
ID_ordine INT,
ID_videogioco INT,
quantità INT,
prezzo_unitario DECIMAL(10, 2),
PRIMARY KEY (ID_ordine, ID_videogioco),
FOREIGN KEY (ID_ordine) REFERENCES Ordine(ID_ordine),
FOREIGN KEY (ID_videogioco) REFERENCES Videogioco(ID_videogioco)
);
CREATE TABLE Pagamento (
ID_pagamento INT PRIMARY KEY,
ID_ordine INT,
data_pagamento DATE,
metodo_pagamento VARCHAR(50),
importo DECIMAL(10, 2),
FOREIGN KEY (ID_ordine) REFERENCES Ordine(ID_ordine)
);
CREATE TABLE Fornitore (
ID_fornitore INT PRIMARY KEY,
nome_fornitore VARCHAR(100),
contatti VARCHAR(200)
);
CREATE TABLE Fornitura (
ID_fornitore INT,
ID_videogioco INT,
quantità_fornita INT,
data_fornitura DATE,
PRIMARY KEY (ID_fornitore, ID_videogioco),
FOREIGN KEY (ID_fornitore) REFERENCES Fornitore(ID_fornitore),
FOREIGN KEY (ID_videogioco) REFERENCES Videogioco(ID_videogioco)
);
5. Popolamento e Test dei Dati
Ora che la struttura del database è pronta, possiamo inserire alcuni dati di esempio per testare il sistema e vedere se le query funzionano correttamente.
Esempio di inserimento di dati:
-- Inserimento di un cliente
INSERT INTO Cliente (ID_cliente, nome, indirizzo, telefono, email)
VALUES (1, 'Marco Verdi', 'Via Roma 15, Milano', '0231234567', Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.');
-- Inserimento di un videogioco
INSERT INTO Videogioco (ID_videogioco, titolo, descrizione, piattaforma, prezzo, quantità_disponibile)
VALUES (1, 'The Last of Us Part II', 'Gioco di avventura e azione', 'PS4', 59.99, 20);
-- Inserimento di un ordine
INSERT INTO Ordine (ID_ordine, data_ordine, ID_cliente, stato_ordine)
VALUES (1, '2025-04-09', 1, 'In elaborazione');
-- Inserimento di un dettaglio ordine
INSERT INTO Dettaglio_Ordine (ID_ordine, ID_videogioco, quantità, prezzo_unitario)
VALUES (1, 1, 1, 59.99);
-- Inserimento di un pagamento
INSERT INTO Pagamento (ID_pagamento, ID_ordine, data_pagamento, metodo_pagamento, importo)
VALUES (1, 1, '2025-04-09', 'Carta di credito', 59.99);
-- Inserimento di un fornitore
INSERT INTO Fornitore (ID_fornitore, nome_fornitore, contatti)
VALUES (1, 'Sony Interactive', 'Via Tokyo 1, Giappone');
-- Inserimento di una fornitura
INSERT INTO Fornitura (ID_fornitore, ID_videogioco, quantità_fornita, data_fornitura)
VALUES (1, 1, 50, '2025-03-30');
6. Test delle Query
A questo punto, possiamo testare alcune query per verificare il corretto funzionamento del sistema. Ad esempio, per ottenere tutti gli ordini di un cliente, possiamo usare una query simile a questa:
SELECT O.ID_ordine, O.data_ordine, V.titolo, DO.quantità, DO.prezzo_unitario
FROM Ordine O
JOIN Dettaglio_Ordine DO ON O.ID_ordine = DO.ID_ordine
JOIN Videogioco V ON DO.ID_videogioco = V.ID_videogioco
WHERE O.ID_cliente = 1;
Conclusione
Concludendo, le fasi di progettazione per una base di dati di un negozio di videogiochi includono la raccolta dei requisiti, la progettazione logica dei dati, la creazione del modello entità-relazione (ER), la traduzione in modello relazionale, e i test con dati di esempio. Queste fasi ti permetteranno di creare un sistema che può gestire clienti, ordini, videogiochi, pagamenti, fornitori e forniture in modo efficiente.