CodeGym /Corsi /SQL SELF /Creazione della tabella students e la sua r...

Creazione della tabella students e la sua relazione con la tabella courses

SQL SELF
Livello 20 , Lezione 0
Disponibile

Dai, dedichiamo un attimo e ripassiamo quello che abbiamo già visto. Facciamo proprio passo dopo passo tutto quello che succede. Più avanti ci sarà un sacco di roba che si basa su questi concetti, quindi meglio capirli alla perfezione, no?

Riprendiamo il nostro esempio con studenti e corsi. Proprio dall’inizio. Dalla creazione delle tabelle, fino a capire cosa succede in ogni fase. Pronti?

Adesso creiamo la tabella students, che servirà per salvare le info sugli studenti, e la colleghiamo alla tabella courses usando una foreign key. Così vediamo come si usano le foreign key per modellare le relazioni tra le entità.

Creazione della tabella students

La tabella students conterrà le info sugli studenti: il loro identificatore unico, il nome e la data di nascita. La creiamo con il comando CREATE TABLE.

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY, -- Chiave unica per ogni record
    name TEXT NOT NULL,            -- Nome dello studente (campo obbligatorio)
    birth_date DATE                -- Data di nascita dello studente
);

Cosa succede qui?

  1. student_id SERIAL PRIMARY KEY: Questo è l’identificatore unico per ogni studente. Il tipo SERIAL crea un campo auto-incrementato, e PRIMARY KEY garantisce che l’id sia unico per ogni riga.
  2. name TEXT NOT NULL: Campo per il nome dello studente. Abbiamo messo NOT NULL così nessun record può essere inserito senza nome.
  3. birth_date DATE: Campo per la data di nascita. Il tipo DATE ci aiuta a gestire le date.

Se la tabella fosse una persona, student_id sarebbe il suo passaporto, name il nome ovvio, e birth_date quella cosa che a volte nascondiamo, ma per il database è fondamentale.

Creazione della tabella courses

Ora creiamo una tabella che conterrà le info sui corsi. Avrà l’id del corso, il titolo e la descrizione.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Identificatore unico del corso
    title TEXT NOT NULL,           -- Titolo del corso (campo obbligatorio)
    description TEXT               -- Descrizione del corso
);

Cosa succede qui?

  1. course_id SERIAL PRIMARY KEY: Anche qui, campo auto-incrementato che crea un id unico per ogni corso.
  2. title TEXT NOT NULL: Campo per il titolo del corso. Abbiamo messo NOT NULL perché ogni corso deve avere un nome, ovvio.
  3. description TEXT: Campo per una breve descrizione del corso. Questo è opzionale, può anche essere vuoto (senza NOT NULL).

Un corso senza titolo è come un libro senza copertina. Ma il database non lo permetterà!

Collegare la tabella students con la tabella courses

Immaginiamo ora che ogni studente possa essere iscritto solo a un corso. Per fare questo aggiungiamo una foreign key nella tabella courses, che farà riferimento all’id dello studente dalla tabella students.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Identificatore unico del corso
    title TEXT NOT NULL,           -- Titolo del corso (campo obbligatorio)
    description TEXT,              -- Descrizione del corso
    student_id INT REFERENCES students(student_id) -- Foreign key che collega alla tabella students
);

Cosa fa student_id INT REFERENCES students(student_id)?

  1. Creiamo il campo student_id, che sarà un riferimento all’id unico dello studente (student_id) dalla tabella students.
  2. La relazione tra le tabelle è gestita dalla parola chiave REFERENCES.
  3. Questo significa che ogni volta che inseriamo dati in courses, il valore di student_id deve già esistere nella tabella students. Se, per esempio, provi a iscrivere a un corso uno studente con un student_id che non esiste, ti becchi un errore.

Inserire dati nelle tabelle

Ora che le tabelle ci sono, aggiungiamo qualche studente e corso. Dai, stare in un’aula vuota è noioso, giusto?

Aggiungiamo studenti

INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');

Aggiungiamo corsi

INSERT INTO courses (title, description, student_id) VALUES
('Basi di SQL', 'Studio della sintassi base di SQL', 1),
('Basi di dati relazionali', 'Comprensione dei modelli relazionali', 2),
('PostgreSQL per principianti', 'Installazione e configurazione di PostgreSQL', 3);

Abbiamo indicato lo student_id per ogni corso, collegandolo all’id dello studente nella tabella students.

Verificare la relazione tra le tabelle

Adesso vediamo se le nostre tabelle sono davvero collegate. Facciamo una query che mostra le info sui corsi insieme ai nomi degli studenti.

SELECT
    courses.title AS course_title,
    courses.description AS course_description,
    students.name AS student_name
FROM 
    courses
JOIN 
    students ON courses.student_id = students.student_id;

Esempio di risultato: Risultato della query:

course_title course_description student_name
Basi di SQL Studio della sintassi base di SQL Alex Lin
Basi di dati relazionali Comprensione dei modelli relazionali Maria Chi
PostgreSQL per principianti Installazione e configurazione di PostgreSQL Otto Song

Abbiamo collegato i corsi agli studenti tramite la foreign key — e ora possiamo ottenere i dati collegati con una sola query. Ecco come funziona il modello relazionale!

Riepilogo

Spero che tutto quello che abbiamo appena visto sia stato chiaro e semplice. Perché tra poco andiamo avanti, e sarebbe bello che tu fossi sicuro delle tue conoscenze.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION