0Pricing
SQL Academy · Lezione

Chiavi primarie e unicità

Comprenda le chiavi primarie, le differenze tra chiavi surrogate e naturali, le chiavi composte e perché ogni riga ha bisogno di un identificatore univoco affidabile

Chiavi primarie e unicità è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Perché ogni riga ha bisogno di un ID univoco

Per aggiornare o eliminare una riga specifica in sicurezza, è necessario poterla identificare senza ambiguità.

  • Possono esistere due utenti chiamati "Alice Adams"
  • Ma NON possono esistere due utenti con id = 42
  • L'identificatore univoco è chiamato chiave primaria

Dichiarare una chiave primaria

Una colonna viene contrassegnata come chiave primaria quando si crea la tabella:

CREATE TABLE products (
  id    BIGSERIAL PRIMARY KEY,
  sku   VARCHAR(50) NOT NULL,
  name  VARCHAR(200) NOT NULL,
  price NUMERIC(10,2) NOT NULL
);

Chiave primaria = NOT NULL + UNIQUE

Una PRIMARY KEY applica automaticamente:

  • NOT NULL: i valori della chiave primaria non possono mancare
  • UNIQUE: nessuna riga può condividere lo stesso valore della chiave primaria con un'altra riga

Il database crea inoltre un indice univoco sulla chiave primaria, quindi le ricerche tramite id sono rapide.

Chiavi surrogate e naturali

Per la chiave primaria sono disponibili due possibilità:

  • Surrogata: un ID sintetico generato dal database (BIGSERIAL, UUID). È la scelta più comune nelle applicazioni moderne.
  • Naturale: un identificatore del mondo reale (email, ISBN). È rischiosa: le persone cambiano indirizzo email.

Buona pratica: utilizzate un ID surrogato e aggiungete un vincolo UNIQUE alla chiave naturale.

BIGSERIAL: interi con incremento automatico

In PostgreSQL, BIGSERIAL crea una colonna a incremento automatico a 64 bit supportata da una sequenza.

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  total NUMERIC(10,2) NOT NULL
);

-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);

Chiavi primarie UUID

Un'alternativa è un UUID a 128 bit, utile quando gli ID devono essere univoci tra sistemi diversi o generati lato client.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE sessions (
  id    UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id BIGINT NOT NULL,
  ip    INET
);

Chiavi primarie composte

A volte l'identificatore naturale è una combinazione di colonne:

CREATE TABLE order_items (
  order_id  BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity  INT NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per order

Vincoli UNIQUE e chiave primaria

È possibile dichiarare univoche altre colonne senza renderle la chiave primaria:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob');  -- ERROR

Cosa accade quando si inserisce un duplicato

Se si tenta di inserire una chiave primaria duplicata, il database rifiuta l'intera istruzione:

ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(42) already exists.

È un comportamento utile: impedisce il danneggiamento silenzioso dei dati.

Cercare righe tramite la chiave primaria è rapido

L'indice univoco sulla chiave primaria consente ricerche O(log n), anche con miliardi di righe.

-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;

Non riutilizzate gli ID

Anche quando eliminate una riga, NON riutilizzate la sua chiave primaria. Altre tabelle o sistemi esterni potrebbero farvi ancora riferimento. Lasciate che la sequenza continui ad aumentare: gli ID costano poco.

Riepilogo

Le chiavi primarie forniscono a ogni riga un riferimento stabile e univoco.

  • Preferite chiavi surrogate (BIGSERIAL o UUID)
  • Utilizzate UNIQUE per le chiavi naturali che non devono duplicarsi
  • Le chiavi primarie composte rappresentano il requisito "questa coppia deve essere univoca"

Verifica rapida

Quale proprietà viene applicata implicitamente da una PRIMARY KEY?

Domande Frequenti

La lezione «Chiavi primarie e unicità» è gratuita?

Sì — il testo completo di «Chiavi primarie e unicità» è 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 «Chiavi primarie e unicità»?

Comprenda le chiavi primarie, le differenze tra chiavi surrogate e naturali, le chiavi composte e perché ogni riga ha bisogno di un identificatore univoco affidabile 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 2 di 4.

Quanto tempo richiede la lezione «Chiavi primarie e unicità»?

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

  1. Che cos’è un RDBMS e perché le tabelle sono importanti
  2. Chiavi primarie e unicità
  3. NULL: il terzo valore di verità
  4. Panoramica dei tipi di dati: INT VARCHAR DATE BOOLEAN
← Torna a SQL Academy