|
Lo scopo delle Chiavi appena discusse e' quella di correlare i dati
attraverso le tabelle, senza dover in questo modo ripetere su tutte le tabelle i
dati più frequenti, il che e' il vero scopo e la sostanziale differenza tra i
database relazionali ed altri tipi di database.
Per esempio possiamo trovare i
nomi di coloro che hanno comprato una sedia senza dover mettere il nome ed il
cognome dell' acquirente nella tabella antichità. possiamo infatti ottenerne il
nome mettendo in relazione coloro che hanno comprato una sedia con la lista di
tutti i nomi degli antiquari della tabella Antiquari attraverso l' utilizzo
dell' IDAcquirente, che mette in relazione i dati nelle due tabelle. per trovare
i nomi di chi ha comprato una sedia possiamo , in pratica, utilizzare la seguente
query:
SELECT CognomeAntiquario, NomeAntiquario FROM Antiquari,
Antichita WHERE IdAcquirente = IDAntiquario AND Oggetto = 'Sedia';
Iniziamo ad analizzare le particolarità di questa query. la prima che balza
all' occhio subito e' che ENTRAMBE le tabelle sono coinvolte nella query e
citate di fianco alla clausola FROM. la seconda cosa e' che nella clausola WHERE
le due chiavi delle due tabelle sono messe in relazione tramite l' uso della
condizione
IdAcquirente = IDAntiquario
e quindi ristretto tramite la condizione
Oggetto = 'Sedia'
a coloro che hanno acquistato una sedia.
La condizione che mette in collegamento le due tabelle (IDAcquirente=IDAntiquario)
e' il nostro Join (in italiano connessione). Visto che la condizione che
crea il join e' un uguale, questo tipo di join e' chiamato un equijoin.
Il risultato di questa query saranno due nomi: Smith, Bob e Fowler,
Sam. La notazione a punti (Dot notation) permette di
specificare il nome della tabella a cui si riferisce il campo , evitando così possibili
ambiguità. pur essendo più "faticosa" e' nettamente
preferibile visto che migliora notevolmente la leggibilità della query e riduce
la possibilità di errori.
La nostra query precedente in dot notation sarebbe così:
SELECT Antiquari.CognomeAntiquario, Antiquari.NomeAntiquario FROM
Antiquari, Antichita WHERE Antichita.IdAcquirente =
Antiquari.IDAntiquario AND Antichita.Oggetto = 'Sedia';
Questa notazione non sarebbe (e non e') necessaria se i nomi di tutti i campi di ogni
tabella differissero l' uno dall' altro, ma e' comunque un' ottima abitudine da
prendere e diventa fondamentale appena la struttura del database cresce a
sufficienza da non essere più verificabile a colpo d'occhio
di
|