-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema_postgres.sql
More file actions
50 lines (45 loc) · 1.56 KB
/
Copy pathschema_postgres.sql
File metadata and controls
50 lines (45 loc) · 1.56 KB
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
-- CLASSI
CREATE TABLE IF NOT EXISTS classi (
id SERIAL PRIMARY KEY,
data DATE NOT NULL,
ora TIME NOT NULL,
max_posti INTEGER NOT NULL
);
-- UTENTI
CREATE TABLE IF NOT EXISTS utenti (
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
cognome TEXT NOT NULL,
data_nascita DATE NOT NULL,
luogo_nascita TEXT NOT NULL,
indirizzo TEXT NOT NULL,
citta TEXT NOT NULL,
comune TEXT NOT NULL,
cap TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
telefono TEXT,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
consenso_privacy BOOLEAN NOT NULL,
stato TEXT NOT NULL DEFAULT 'pending', -- pending | attivo | sospeso
reset_token TEXT,
reset_token_expiry TIMESTAMPTZ,
username_recovery_token TEXT,
username_recovery_expiry TIMESTAMPTZ
);
-- PRENOTAZIONI
CREATE TABLE IF NOT EXISTS prenotazioni (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES utenti(id) ON DELETE CASCADE,
classe_id INTEGER NOT NULL REFERENCES classi(id) ON DELETE CASCADE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Un utente non può prenotare due volte la stessa classe
CREATE UNIQUE INDEX IF NOT EXISTS idx_unique_booking ON prenotazioni(user_id, classe_id);
-- Esempi di lezioni
INSERT INTO classi (data, ora, max_posti) VALUES ('2025-10-15', '19:00', 20);
INSERT INTO classi (data, ora, max_posti) VALUES ('2025-10-17', '19:00', 15);
-- Abilita Row Level Security
ALTER TABLE utenti ENABLE ROW LEVEL SECURITY;
ALTER TABLE classi ENABLE ROW LEVEL SECURITY;
ALTER TABLE prenotazioni ENABLE ROW LEVEL SECURITY;