Programmazione Web » Sql » Implementare relazioni tra le tabelle di un database
Implementare relazioni tra le tabelle di un database
Difficoltà:
Scritto da Michele Sassi
Sito Web: http://www.comefaccio.net ![]()
Questo tutorial è stato letto 1123 volte
Il vantaggio che otteniamo usando le relazioni è quello di non dover ripetere tutti i dati principali per tutti i record, il che comporterebbe una ridondanza dei dati e un faticoso lavoro di aggiornamento nel caso in cui, per esempio, un utente registrato nel nostro database cambiasse il suo 'indirizzo'.
Innanzitutto cerchiamo di capire cosa sono le chiavi: una chiave primaria è un campo del database grazie al quale ogni record viene identificato univocamente; una chiave esterna (o foreign key) viene utilizzata in un' altra tabella dello stesso database per essere messa in relazione con la chiave primaria della prima tabella.
In pratica una chiave primaria (vedi 'id_prodotto' della tabella 'prodotti') è univoca e non può ripetersi; non ci possono essere infatti più record con lo stesso 'id_prodotto'. Una chiave esterna invece può anche ripetersi.
Vediamo un esempio... creiamo due tabelle chiamate rispettivamente 'prodotti' e 'clienti':
| id_prodotto | prodotto | prezzo | id_acquirente |
| 1 | monitor | 200 |
2 |
| 2 | pc portatile | 1000 |
1 |
| 3 | mouse | 15 |
3 |
| id_cliente | nome | cognome | indirizzo |
| 1 | Luca | Rossi |
Via Piave 24 |
| 2 | Antonio | Bianchi |
Via Roma 32 |
| 3 | Mario | Verdi |
Via Milano 234 |
| 4 | Marco | Gialli |
Via Torino 439 |
Abbiamo creato due tabelle, ognuna con scopi diversi: la prima conterrà l'elenco dei prodotti e la sua chiave primaria sarà 'id_prodotto', la seconda tabella conterrà le informazioni dei clienti e avrà come chiave primaria 'id_cliente'.
Come possiamo notare la tabella 'acquisti' contiene il campo 'id_acquirente' che funge da join (o connessione) per la relazione tra le due tabelle. E' proprio grazie a quel campo (chiave esterna) che capiremo che il 'prodotto' monitor con 'id_prodotto' ugale a 1 è stato venduto all'acquirente con 'id_acquirente' uguale a 2. Colui che risulta essere l' 'id_acquirente' uguale a 2, guardando la tabella 'clienti' è Antonio Bianchi.
In poche parole il monitor del costo di 200 euro è stato venduto ad Antonio Bianchi.
Vediamo ora come realizzare una query usando il join:
SELECT *
FROM prodotti, clienti
WHERE id_acquirente = id_cliente AND id_prodotto = '1';
Vediamo di chiarire due concetti che vi possono tornare utili:
Parliamo di equijoin quando la condizione che mette in relazione le due tabelle è un = (uguale).
Parliamo invece di notazione a punti (o dot notation) quando vogliamo specificare la tabella a cui un campo appartiene; per esempio, se volessimo indicare il campo 'id_cliente' della tabelle 'clienti' con la dot notation scriveremo: 'clienti.id_cliente'. Questo sistema, anche se più faticoso e a volte del tutto inutile, può servire a risolvere problemi di ambiguità nel caso in cui si abbiano due campi con lo stesso nome in tabelle differenti. Nel nostro caso la dot notation risulterebbe inutile in quanto abbiamo usato nomi differenti per ognuno dei campi.

