🗄️ Schema completo, nell'ordine corretto
Ordine: profili (referenzia utenti) → preferenze (referenzia profili) → interessi_espressi (referenzia profili due volte) → messaggi_privati, blocchi, segnalazioni (indipendenti tra loro, referenziano solo profili).
CREATE TABLE profili (
id INT AUTO_INCREMENT PRIMARY KEY,
utente_id INT UNIQUE,
età TINYINT,
città VARCHAR(100),
bio TEXT,
visibile BOOLEAN DEFAULT TRUE
);
CREATE TABLE preferenze (
profilo_id INT PRIMARY KEY,
età_minima TINYINT,
età_massima TINYINT,
città_preferita VARCHAR(100),
FOREIGN KEY (profilo_id) REFERENCES profili(id)
);
CREATE TABLE interessi_espressi (
id INT AUTO_INCREMENT PRIMARY KEY,
da_profilo_id INT,
verso_profilo_id INT,
creato_il TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY un_interesse (da_profilo_id, verso_profilo_id)
);
CREATE TABLE messaggi_privati (
id INT AUTO_INCREMENT PRIMARY KEY,
mittente_id INT,
destinatario_id INT,
contenuto TEXT NOT NULL,
inviato_il TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE blocchi (
id INT AUTO_INCREMENT PRIMARY KEY,
profilo_bloccante_id INT,
profilo_bloccato_id INT
);
CREATE TABLE segnalazioni (
id INT AUTO_INCREMENT PRIMARY KEY,
profilo_segnalante_id INT,
profilo_segnalato_id INT,
motivo TEXT,
stato ENUM('in_attesa', 'revisionata') DEFAULT 'in_attesa'
);
💡 UNIQUE KEY (da_profilo_id, verso_profilo_id) impedisce che uno stesso profilo esprima interesse due volte verso lo stesso altro profilo — un vincolo di unicità su DUE colonne insieme, diverso dal vincolo su singola colonna già visto nella guida MySQL Basi.
✅ Checkpoint — a questo punto hai
6 tabelle pronte, che modellano profili, preferenze, interesse reciproco, messaggistica e sicurezza (blocchi/segnalazioni) — nessun dato ancora.