Skill Factory
Lista post > Ricominciamo ... dal linguaggio SQL Lezione 7
Ricominciamo ... dal linguaggio SQL Lezione 7
Gino Visciano |
Skill Factory - 25/03/2016 13:21:50 | in Tutorials
Benvenuti alla settima lezione, nella lezione precedente avete implementato il Database per gestire libri dati in prestito, utlizzando i comandi DDL del Linguaggio SQL, in questa lezione vedrete come si creano gli indici per rendere più performanti le riceche e gli ordinamenti e come si applicano i vincoli per evitare errori durante l'inserimento dei dati.
In genere gli indici usati per le ricerche sono associati ad una sola colonna e si chiamano semplici, mentre quelli per gli ordinamenti possono essere anche formati da più colonne e si chiamano composti.
Con il Linguaggio SQL per fare le ricerche si usano le Query (comandi DQL), ad esempio la Query seguente visualizza solo i lettori di Roma:
SELECT COGNOME, NOME FROM LETTORI WHERE CITTA='ROMA';
Se la colonna CITTA è indicizzata la risposta è più performante.
Le Query si usano anche per ordinare i dati delle tabelle, la Query seguente visualizza i libri ordinati per EDITORE:
SELECT EDITORE, TITOLO, AUTORE FROM LIBRI ORDER BY EDITORE';
Se la colonna EDITORE è indicizzata l'ordinamento viene fatto più velocemente.
Gli indici sono particolari tabelle formate da chiavi associate ai valori contenuti nelle colonne indicizzate, quando si fa una ricerca in una colonna a cui non è stato collegato un indice, la ricerca avviene in modo sequenziale, controllando uno ad uno tutti valori della colonna. Se invece alla colonna è associato un indice, la ricerca viene fatta molto velocemente nella tabella corrispondente all'indice, quando viene trovata la chiave associata al valore cercato, si ottiene il risultato.
Attenzione le tabelle degli indici occupano spazio nel Database e si aggiornano ogni volta che si aggiungono o modificano i dati delle tabelle a cui sono collegate. Per non stressare il DBMS dovete indicizzare solo le colonne interessate ad operazioni di ricerca oppure ordinamento.
Particolari tipi di indici, molto veloci, sono quelli cluster. In una tabella può esistere un solo indice di tipo cluster, perché in presenza di un indice di questo tipo i dati della tabella si organizzano in base alle chiavi dell'indice, mentre per quelli non cluster ciò non accade, come mostra l'immagine seguente:
Un indice si crea con il seguente comando DDL:
CREATE INDEX NOME_INDICE ON NOME_TABELLA (NOME_COLONNA);
Attenzione, per evitare di assegnare agli indici nomi già esistenti, componente il nome utlizzando il prefisso idx, seguito dal nome della colonna e da quello della tabella a cui deve essere associato.
Ad esempio per associare un indice alla colonna cognome della tabella lettori potete utilizzare il comando seguente:
CREATE INDEX IDX_COGNOME_LETTORI ON LETTORI (COGNOME);
Invece per creare un indice composto per ordinare velocemente la tabella lettori per cognome e nome, potete utilizzare il comando seguente:
CREATE INDEX IDX_COGNOME_NOME_LETTORI ON LETTORI (COGNOME, NOME);
I vincoli sono particolari controlli che si possono associare alle colonne, servono per evitare operazioni incongruenti. Come avete già visto nelle lezioni precedenti i vincoli sono 5:
1) UNIQUE
2) PRIMARY KEY
3) FOREIGN KEY
4) NOT NULL
5) CHECK
alcuni di questi sono veri e propri indici, come ad esempio UNIQUE (indice unico) le PRIMARY KEY (chiavi primarie) e le FOREIGN KEY (chiavi esterne).
Con il comando seguente associate un indice unico di nome UNQ_CODICE_FISCALE_LETTORI alla colonna CODICE_FISCALE della tabella LETTORI, in questo modo nella colonna non si potranno inserire valori duplicati.
ALTER TABLE LETTORI ADD CONSTRAINT UNQ_CODICE_FISCALE_LETTORI UNIQUE(CODICE_FISCALE);
Adesso potete provare l'indice unico associato alla colonna CODICE_FISCALE della tabella LETTORI con l'esempio seguente:
1) Inserite nella tabella LETTORI un lettore con il comando SQL:
INSERT INTO LETTORI ( NOME, COGNOME, ETA, CODICE_FISCALE, TITOLO_DI_STUDIO, CITTA, SESSO)
VALUES ( 'MARIO', 'ROSSI', 30, 'MRIRSS86T30L345A', 'LAUREA','ROMA', 1 );
Per visulalizzare il contenuto della tabella LETTORI, usate il comando SQL:
SELECT * FROM LETTORI;
2) Adesso provate ad inserire nella tabella LETTORI un lettore, con lo stesso CODICE_FISCALE del LETTORE inserito al punto 1, con il comando SQL:
INSERT INTO LETTORI ( NOME, COGNOME, ETA, CODICE_FISCALE, TITOLO_DI_STUDIO, CITTA, SESSO)
VALUES ( 'FULVIO', 'GIALLI', 38, 'FLVGLL78F14L345H', 'DIPLOMA','NAPOLI', 1 );
Con il comando seguete associate un vincolo check di nome CHK_CODICE_ISBN_LIBRI alla colonna CODICE_ISBN della tabella LIBRI, in questo modo il codice ISBN inserito nella colonna dovrà essere obbligatoriamente di 10 caratteri.
ALTER TABLE LIBRI ADD CONSTRAINT CHK_CODICE_ISBN_LIBRI CHECK(LENGTH(CODICE_ISBN)=10);
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I