-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathschema.sql
84 lines (74 loc) · 2.72 KB
/
schema.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
CREATE SCHEMA GAMEDB;
CREATE TABLE GAMEDB.Produttore(
sigla CHAR(2) PRIMARY KEY,
logo VARCHAR(20),
nazionalita CHAR(2) NOT NULL,
nome VARCHAR(20) UNIQUE NOT NULL
);
CREATE TABLE GAMEDB.Categoria (
id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(15) UNIQUE NOT NULL
);
CREATE TABLE GAMEDB.Pegi (
id TINYINT UNSIGNED PRIMARY KEY,
icona VARCHAR(20),
descrizione VARCHAR(2024) NOT NULL
);
CREATE TABLE GAMEDB.Prodotto (
cod_prodotto INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
titolo VARCHAR(40) UNIQUE NOT NULL,
prezzo DECIMAL(5,2) UNSIGNED NOT NULL,
anno YEAR NOT NULL,
copie_disponibili INT DEFAULT 0 NOT NULL,
copie_vendute INT DEFAULT 0 NOT NULL,
cover VARCHAR(20) DEFAULT "default.png" NOT NULL,
descrizione VARCHAR(2048) NOT NULL,
tipo BIT(1) NOT NULL COMMENT "1->Videogioco 0->Pachetto aggiuntivo",
visualizzazioni INT DEFAULT 0 NOT NULL,
produttore CHAR(2),
pegi TINYINT UNSIGNED,
categoria TINYINT UNSIGNED,
FOREIGN KEY (pegi) REFERENCES Pegi(id) ON DELETE NO ACTION ON UPDATE CASCADE,
FOREIGN KEY (produttore) REFERENCES Produttore(sigla) ON DELETE NO ACTION ON UPDATE CASCADE,
FOREIGN KEY (categoria) REFERENCES Categoria(id) ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE GAMEDB.Lingua(
id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(40) NOT NULL
);
CREATE TABLE GAMEDB.Traduzione(
lingua TINYINT UNSIGNED,
prodotto INT UNSIGNED,
PRIMARY KEY(lingua, prodotto),
FOREIGN KEY (lingua) REFERENCES Lingua(id) ON DELETE NO ACTION ON UPDATE CASCADE,
FOREIGN KEY (prodotto) REFERENCES Prodotto(cod_prodotto) ON DELETE NO ACTION ON UPDATE CASCADE
);
CREATE TABLE GAMEDB.Cliente(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(20) NOT NULL,
cognome VARCHAR(20),
email VARCHAR(50) UNIQUE NOT NULL,
saldo DECIMAL(5,2) UNSIGNED DEFAULT 0 NOT NULL,
password CHAR(64),
family_id SMALLINT UNSIGNED DEFAULT 0 NOT NULL,
data_nascita DATE NOT NULL,
CHECK (year(curdate()-data_nascita)>=14)
);
CREATE TABLE GAMEDB.Acquisto(
cliente INT UNSIGNED,
prodotto INT UNSIGNED,
_data TIMESTAMP NOT NULL,
n_fattura INT UNSIGNED UNIQUE NOT NULL,
prezzo DECIMAL(5,2) UNSIGNED NOT NULL,
FOREIGN KEY (cliente) REFERENCES Cliente(id) ON DELETE NO ACTION ON UPDATE CASCADE,
FOREIGN KEY (prodotto) REFERENCES Prodotto(cod_prodotto) ON DELETE NO ACTION ON UPDATE CASCADE,
PRIMARY KEY (cliente,prodotto)
);
CREATE TABLE GAMEDB.Transazione(
cod_transazione INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
cliente INT UNSIGNED,
importo DECIMAL(5,2) UNSIGNED DEFAULT 0 NOT NULL,
metodo VARCHAR(100),
_data TIMESTAMP NOT NULL,
FOREIGN KEY (cliente) REFERENCES Cliente(id) ON DELETE CASCADE ON UPDATE CASCADE
);