SQL
SQL: linguaggio dichiarativo diventato standard per gestire i database relazionali (interrogazioni, DLL / DML)
I diversi DBMS offrono implementazioni diverse di SQL e interfacce grafiche
Elementi SQL: istruzioni maiuscole/minuscole è uguale, finiscono con punto e virgola.
Parentesi quadre [ ] elemento opzionale, simbolo | per alternative tra più valori, parentesi graffe { } valori in
alternativa tra loro ma uno deve esserci per forza.
NULL non è uguale a 0 né a stringa vuota, negli ordinamenti è posto all’inizio di sequenze.
Operazioni di definizione dei dati: DLL creazione e modifica tabelle, nei DBMS avvengono attraverso
interfaccia grafica.
Creazione tabella: CREATE TABLE nometabella (Attributo1 Tipo1…) per ogni attributo specifica nome e tipo
Vincoli Intrarelazionali Predefiniti: PRIMARY KEY, NOT NULL, UNIQUE, VALUE BETWEEN, VALUE IN
Vincoli Interrelazionali di integrità referenziale: REFERENCES, FOREIGN KEY, ON, ASSERZIONI
Modifica di tabelle: ALTER TABLE (ADD COLUMN, DROP COLUMN) si può RENAME TO / CHANGE / MODIFY
Manipolazione dei dati: DML inserimento dati nelle tabelle. Comandi INSERT INTO () VALUES () oppure
UPDATE SET / DELETE FROM () WHERE
Interrogazioni: query serve spiegare quali dati ci interessano. Comandi SELECT FROM WHERE
Where: selezione delle righe, Select: proiezione degli attributi, DISTINCT se non vuoi duplicati
Si può ridenominare con SELECT popolazione/superficie AS Densita FROM Nazioni
Condizioni di ricerca uguali = != >= <= Operatori Logici AND OR NOT
Ordinare: ORDER BY → SELECT nome FROM nazioni ORDER BY nome ASC (crescente) DESC (decrescente)
COUNT: conta il numero di righe → SELECT COUNT(*) oppure SELECT COUNT (DISTINCT nome) asterisco mai
perché son sempre tutte diverse
SUM: somma i valori NOT NULL AVG: calcola la media NOT NULL MIN() MAX() minimo, massimo
Raggruppamenti GROUP BY() permette di raggruppare le righe in base al valore di uno o + attributi
Con HAVING() puoi mettere delle condizioni ai gruppi → select nazione from citta group by nazione having…
OPERAZIONI DI JOIN: SELECT attributi FROM tab1, tab2 WHERE condizione (colonna1 = colonna2).
In caso di join naturale aggiungi TABELLA.NOME = TABELLA.NOME2
IN SQL2 si usa INNER JOIN ON
IL MODELLO CONCETTUALE
LO SCHEMA LOGICO
Dato lo schema ER o UML si ricava uno schema logico composto dalle relazioni.
Parametri Prestazioni:
- Costo di un’operazione: numero di istanze di entità e associazioni visitate mediamente per effettuare
le operazioni
- Occupazione di memoria: memorizzare i dati
È necessario conoscere il volume dei dati (numero di istanze di ogni entità e dimensioni di ogni attributo) e le
caratteristiche delle operazioni.
Ristrutturazione dello schema concettuale
Eliminare generalizzazione:
- Accorpamento delle figlie nel padre (aggiungi tipo nel padre)
- Accorpamento del padre nelle figlie (duplica attributi padre nelle figlie)
- Sostituzione con associazioni → risparmio di memoria ma incremento di accessi
Partizionamento ed accorpamento di entità
È utile separare attributi di uno stesso concetto utilizzati da operazioni diverse e raggruppare attributi di
concetti diversi ma utilizzati nelle stesse operazioni
Ridonzanze
Varie forme di ridondanza:
- Attributi derivabili da altri attributi della stessa entità
- Funzioni aggregative o conteggi derivate da attributi di altre entità o associazioni
Scelta degli identificatori principali
La scelta delle chiavi è importante perché stabiliscono legami tra dati in diverse relazioni e vengono costruiti
indici che rendono più efficiente reperire i dati. È preferibile usare:
- Identificatore con pochi attributi, che riduce le dimensioni (risparmio di memoria) utilizzato da +
operazioni
Dallo schema concettuale allo schema relazionale(logico)