Modellare un blog: utenti, post e commenti
Disegni un diagramma ER, identifichi entità e relazioni e le traduca in uno schema SQL normalizzato
Modellare un blog: utenti, post e commenti è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Il dominio
Un blog semplice: gli utenti scrivono post e altri utenti commentano i post. Trasformiamo tutto in uno schema.
Entità
Tre concetti fondamentali:
- Utente — id, email, nome
- Post — id, autore, titolo, corpo, timestamp di pubblicazione
- Commento — id, autore, post a cui appartiene, corpo
Relazioni
Cardinalità:
- Utente 1 ── ∞ Post (un utente scrive molti post)
- Utente 1 ── ∞ Commento
- Post 1 ── ∞ Commento
Tabella users
Iniziamo da users: le altre tabelle vi fanno riferimento:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
full_name VARCHAR(100) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Tabella posts
FK verso users:
CREATE TABLE posts (
id BIGSERIAL PRIMARY KEY,
author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
title VARCHAR(200) NOT NULL,
body TEXT NOT NULL,
published_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Tabella comments
Due FK:
CREATE TABLE comments (
id BIGSERIAL PRIMARY KEY,
post_id BIGINT NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
body TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Perché ON DELETE CASCADE sui commenti?
Se un post viene eliminato, i suoi commenti non hanno più significato: lasci che sia il database a eliminarli automaticamente.
Perché ON DELETE RESTRICT sull'autore?
Non elimini silenziosamente i contenuti quando un utente scompare. Obblighi l'applicazione a eseguire il soft delete dell'utente o a riassegnare prima i contenuti.
Estensione con i tag (molti-a-molti)
Aggiunga i tag tramite una tabella di giunzione:
CREATE TABLE tags (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE post_tags (
post_id BIGINT REFERENCES posts(id) ON DELETE CASCADE,
tag_id BIGINT REFERENCES tags(id) ON DELETE CASCADE,
PRIMARY KEY (post_id, tag_id)
);Commenti nidificati
Commenti con riferimento a se stessi per le risposte:
ALTER TABLE comments
ADD COLUMN parent_id BIGINT REFERENCES comments(id) ON DELETE CASCADE;Eliminazione logica vs eliminazione fisica
Per un blog, spesso è preferibile eliminare logicamente i post: i link non funzionanti non compromettono la cronologia dell'utente. Aggiunga deleted_at TIMESTAMPTZ e applichi WHERE deleted_at IS NULL in ogni query.
Diagramma ER a parole
users (1) -< (∞) posts (1) -< (∞) comments
Inoltre: users (1) -< (∞) comments, posts (∞) >-< (∞) tags.
Riepilogo
La progettazione di uno schema inizia da entità, relazioni e cardinalità.
- PK surrogata in ogni tabella
- Le FK dichiarano le relazioni
- Cascade e Restrict rispecchiano l'intento di business
- Molti-a-molti = tabella di giunzione
Verifica rapida
Dove si trova la chiave esterna in una relazione uno-a-molti tra post e commenti?
Domande Frequenti
La lezione «Modellare un blog: utenti, post e commenti» è gratuita?
Sì — il testo completo di «Modellare un blog: utenti, post e commenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Modellare un blog: utenti, post e commenti»?
Disegni un diagramma ER, identifichi entità e relazioni e le traduca in uno schema SQL normalizzato Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Modellare un blog: utenti, post e commenti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Modellare un blog: utenti, post e commenti
- Scegliere chiavi e tipi
- Indici per le query più comuni
- Popolare il database con dati di test