DBMS introduttivo
Sistema informativo
Il sistema informativo è un sistema preposto con il compito di gestire e rendere disponibili le informazioni. È costituito da strumenti, procedure e strutture.
Componenti di un sistema informativo
- Strumenti per la rappresentazione dell'informazione, mediante codifica
- Programmi applicativi e di sistema che realizzano funzioni per la gestione delle informazioni
Dati
Le informazioni nei sistemi informatici sono rappresentate sotto forma di dati, essi sono simboli grezzi che devono essere interpretati per fornire informazioni. Hanno perciò bisogno di un contesto interpretativo per estrarre le informazioni.
Caratteristiche
- Molto stabili nel tempo rispetto ai processi che li gestiscono
- Risorsa importante dell'organizzazione che li gestisce
Definizioni
Base di Dati (definizione generale): Collezione di dati tra loro correlati, utilizzati per rappresentare le informazioni in un SI.
Sistema di Gestione di Basi di Dati (DBMS): Sistema software che fornisce gli strumenti necessari a gestire le informazioni.
Base di Dati (definizione tecnica): Collezione di dati gestita da un DBMS.
Caratteristiche dei DBMS
- Dimensioni molto maggiori della memoria centrale disponibile
- Condivisione dei dati tra app e utenti
- Persistenza dei dati
- Affidabilità in caso di malfunzionamenti di hardware/software
- Sicurezza dei dati
- Efficienza (capacità di svolgere operazioni utilizzando insieme di risorse in tempo breve)
- Efficacia (capacità di rendere produttive le attività degli utenti)
Base di dati vs file system
I DBMS estendono le funzionalità dei file system fornendo più servizi in maniera integrata; il meccanismo fondamentale di un DBMS è lo schema logico. Lo schema logico descrive il contenuto della base di dati tramite un formalismo detto modello dei dati.
Modello di dati
Insieme di strumenti concettuali che consta di:
- Insieme di strutture dati
- Linguaggi per specificare, aggiornare, creare vincoli, manipolare strutture e dati
Modello relazionale
È il modello più diffuso, basato su una singola struttura dati (relazione). Una relazione può essere vista come una tabella con righe, dette tuple, e colonne contenenti dati del tipo specificato.
Schema e istanza
In un DBMS troviamo:
- Schema logico della base di dati - descrizione dei dati tramite il modello dati (cambia raramente)
- Istanza della base di dati - insieme dati presenti in un momento (cambia molto spesso nel tempo)
Il primo passo nello sviluppo di una base di dati è la definizione dello schema, successivamente vengono immessi i dati veri e propri.
Livelli di astrazione
Livello logico: Descrizione della base di dati mediante lo schema logico.
Livello fisico: Livello più basso in cui viene definito lo schema fisico precisando come i dati sono memorizzati negli appositi supporti.
Livello esterno (livello delle viste): Livello di astrazione più alto, descrive una porzione dell'intero schema logico della base di dati.
Indipendenza
- Fisica: utenti e applicazioni che accedono alla rappresentazione logica dei dati sono indipendenti da qualsiasi modifica a livello di rappresentazione fisica dei dati.
- Logica: la presenza delle viste permette di nascondere modifiche alla rappresentazione dei dati al livello logico alle applicazioni/utenti che vedono la rappresentazione esterna.
Cambiando le strutture di memorizzazione il livello logico non cambia. (per l'indipendenza fisica)
Modello relazionale
Caratteristiche del modello relazionale
- Basato su una semplice struttura dati (relazione)
- Caratterizzato da precise basi matematiche
Vantaggi
- Semplice rappresentazione dei dati (linguaggi dichiarativi)
- Facilità con cui possono essere espresse interrogazioni complesse
Si usano linguaggi dichiarativi perché sono semplici da usare e permettono possibilità di attuare strategie di ottimizzazione. Il modello relazionale possiede due linguaggi di interrogazione che hanno lo stesso potere espressivo e sono la base dalla quale è stato sviluppato SQL:
- Algebra relazionale (interrogazioni espresse applicando operatori specifici alle relazioni)
- Calcolo relazionale (interrogazioni espresse per mezzo di formule logiche che devono essere verificate dalle tuple)
Definizioni
Dominio: insieme anche infinito di valori
Prodotto cartesiano: D1×D2×...×Dk è definito come: {(v1, v2, ..., vk) | v1 ∈ D1, ..., vk ∈ Dk}. D1×D2×...×Dk ha valore k. Ogni elemento del prodotto cartesiano è detto tupla.
Relazione: Una relazione su D1, D2, ..., Dk è un sottoinsieme finito del prodotto cartesiano D1×D2×...×Dk. Una relazione ha grado k. Ogni tupla ha k componenti su cui è definita la relazione. La cardinalità è il numero di tuple appartenenti alla relazione.
Definizione: Una relazione è un insieme finito di tuple, ordinate al loro interno. Non è definito alcun ordinamento fra le tuple e sono distinte l'una dall'altra.
Notazione per nome
Ad ogni componente delle tuple viene associato un nome detto nome di attributo. La coppia (nome di attributo, dominio) è detta attributo. L'uso degli attributi permette di:
- Denotare le componenti delle tuple per nome
- Fornire maggiori informazioni
Schema di relazione
La coppia (S(A1,A2,...An), dom) è uno schema di relazione. L'insieme di schemi di relazioni [S = {S1, S2,..., Sn}] è detto schema di base di dati.
Informazione incompleta
Non sempre sono disponibili informazioni su tutte le proprietà. È possibile rappresentare l'assenza di valore mediante un valore speciale (o, null, ?); sono detti valori nulli.
Vincoli di integrità (VI)
Condizioni che devono essere verificate da ogni istanza della base di dati; un'istanza corretta rispetta tutti i vincoli di integrità su di essa.
Vincolo di chiave
Una chiave è un insieme di attributi che distingue fra loro le tuple della relazione. Un insieme è chiave di uno schema di relazione se verifica le due proprietà:
- Non devono esistere due tuple con lo stesso valore per tutti gli attributi
- Nessun sottoinsieme verifica la proprietà 1
Un insieme che verifica solo la proprietà 1 e non la 2 è detto super-chiave. L'esistenza delle chiavi permette l'accessibilità a ciascun dato della base di dati, permettono inoltre di correlare i dati in relazioni diverse.
Chiavi candidate
Una relazione nella quale si verificano entrambe le proprietà 1 e 2. Si dividono in Primaria e Alternativa.
Chiave primaria: Criteri di scelta:
- Chiave candidata contenente il minor numero di attributi
- Chiave candidata più utilizzata
Le chiavi primarie non possono avere valori nulli mentre le chiavi alternative sì.
Chiavi esterne
Insieme di attributi usati per riferire una tupla in un'altra relazione (deve corrispondere alla chiave primaria della seconda relazione) e vengono utilizzate per modellare associazioni.
X è una chiave esterna di S su S′ se, qualsiasi siano gli stati di S ed S′, per ogni tupla t di S esiste una tupla t′ di S′ tale che t[X] = t′[Y]. S è detta relazione referente, S' è detta relazione riferita.
Vincolo di integrità referenziale
Qualsiasi siano gli stati di S ed S′, per ogni tupla t di S esiste una tupla t′ di S′ tale che t[X] = t′[Y]. L'integrità referenziale può essere violata da inserimenti e modifiche oppure cancellazione e modifiche.
SQL: comandi del DDL
SQL: Structure Query Language
DDL: Data Definition Language (creare e modificare schemi di database).
- Permette di specificare e modificare lo schema della base di dati, lo schema delle viste ed i vincoli di integrità. [livello logico ed esterno]
DML: Data Manipulation Language (inserire, modificare, interrogare e gestire dati memorizzati).
- Permette di creare, modificare ed interrogare l'istanza della base di dati. [livello logico ed esterno]
SDL: Data Storage and Definition Languages (specificare le strutture di memorizzazione e i metodi di accesso).
- Definisce lo schema fisico del DB. [livello fisico]
Il linguaggio SQL è il linguaggio per la definizione e manipolazione dei dati dei DBMS; è stato il primo linguaggio dichiarativo progettato per l'accesso ai dati.
Tipi di dato
In SQL si dividono in:
- Tipi predefiniti
- Tipi user-defined
Tipi carattere
- Singoli caratteri o stringhe
- Tipi numerici
- Tipi temporali (date e ore)
- Booleani
- BLOB, CLOB (per grandi immagini e testi)
Creazioni di relazioni
CREATE TABLE nome relazione (specifica colonna [specifica colonna]*. In SQL è possibile specificare nella definizione i diversi tipi di vincoli (not null, unique e primary key, foreign key, check).
Per specificare che una colonna non può avere valori nulli bisogna includere il vincolo NOT NULL. Stessa cosa anche per UNIQUE e PRIMARY KEY.
- UNIQUE: garantisce che non esistono due tuple con gli stessi valori non nulli
- PRIMARY KEY: impone per ogni tupla i valori
Chiavi esterne: definite mediante FOREIGN KEY.
ALTER TABLE <nome relazione> <modifica>
SQL: linguaggio di query
SQL
È un linguaggio set-oriented dove gli operatori operano su relazioni ed il risultato è sempre una relazione.
Interrogazioni
SELECT {[distinct] R1 .C1, R2.C2, ..., Ri.Cn} FROM R1, R2, ... Rk WHERE F; Se nel select voglio selezionare tutte le colonne e non solo uno si può usare SELECT *
Operatore LIKE
Il carattere _ rappresenta un singolo carattere qualsiasi presente. Il carattere % rappresenta una sequenza di n caratteri.
//selezionare tutti i film che hanno 'd' come terza lettera del titolo SELECT* FROM Film WHERE Titolo LIKE '__d%';
Si possono utilizzare espressioni nella clausola di proiezione, inoltre è possibile dare un nome alla colonna contenente l'espressione calcolata, il nome deve essere preceduto dalla parola chiave AS.
SELECT Stipendio/12 AS StipendioMensile FROM Impiegato WHERE Cognome = 'Bianchi';
Oltre che nella clausola di proiezione è possibile inserire espressioni anche nella clausola di qualificazione. È possibile effettuare ordinamenti alla fine dell'interrogazione aggiungendo ORDER BY, seguito da una lista di nome di colonne. Di default è settato l'opzione ASC (crescente) mentre si può specificare DESC per un ordinamento decrescente.
SQL: linguaggio di query (II parte)
Operazione di join
Il join di due relazioni A e B genera tutte le coppie formate da una tupla A e una tupla B; consente di attraversare le associazioni rappresentate mediante il meccanismo delle chiavi esterne.
Join On
<nome relazione> JOIN <nome relazione> ON <predicato>
Join Using
Applicabile quando le due relazioni hanno colonne col lo stesso nome.
<nome relazione> JOIN <nome relazione> USING (<lista nomi colonne>)
Natural Join
Richiede l'uguaglianza dei valori di tutte le colonne con lo stesso nome nelle due relazioni.
<nome relazione> NATURAL JOIN <nome relazione>
Outer Join
Aggiunge al risultato le tuple che non hanno partecipato al join completandole con NULL.
T OUTER JOIN S
- FULL: sia le tuple di T che quelle di S che non partecipano vengono completate e inserite
- LEFT: le tuple di T che non partecipano al join vengono completate e inserite nel risultato
- RIGHT: le tuple di S che non partecipano al join vengono completate e inserite nel risultato
Funzioni di gruppo
Nella clausola di proiezione possiamo avere anche espressioni che calcolano valori a partire da insieme di tuple.
- Operano su un insieme di valori
- Producono come risultato un unico valore
- Sono indicate nella clausola di SELECT
Tutte le funzioni di gruppo possono essere usate col qualificatore DISTINCT.
Raggruppamento
Le colonne da usare per il raggruppamento sono specificate tramite la parola chiave GROUP BY. Usando il GROUP BY ogni tupla risultante rappresenta un gruppo di tuple della relazione. Esistono delle condizioni sui gruppi. È possibile selezionare solo alcuni dei gruppi ottenuti dal partizionamento usando HAVING.
- È seguita da un predicato o una combinazione booleana di predicati
- Solo predicati di funzioni di gruppo
Operazioni insiemistiche
La select da sola non consente di fare unioni, intersezioni e differenze, quindi SQL prevede dei costruttori per ciò: UNION, INTERSECT, MINUS.
Unione
Operatore di unione: A UNION B
- Esegue l'unione delle due espressioni A e B
- Richiede la compatibilità di schemi tra A e B (stesso numero di attributi e dominio)
- Rimuove i duplicati (UNION rimuove i duplicati UNION ALL no)
- La tabella risultato ha di default come il nome della colonna il nome della prima query (se non mi va bene rinomino le colonne delle query usando AS)
Intersezione
Operatore di intersezione: A INTERSECT B
- Esegue l'intersezione delle due espressioni A e B
- Richiede la compatibilità di schemi tra A e B
- Tabella di risultato ha il nome di default della prima colonna
Differenza
Operatore di differenza A EXCEPT/MINUS B
- Esegue la differenza delle due espressioni A e B
- Richiede la compatibilità di schemi tra A e B
- Leva da A gli elementi di B
Sotto-interrogazioni
Sotto-interrogazioni (Subquery)
È un'istruzione select contenuta all'interno di un'altra interrogazione, permette di suddividere un problema complesso in sotto problemi più semplici. È possibile introdurle nella clausola WHERE, HAVING e nella clausola FROM.
Nella clausola WHERE usata per
- Determinare uno o più valori da usare come valori di confronto di un predicato dell'interrogazione
- Esprimere quantificazioni esistenziali (EXIST / NOT EXIST)
Tre tipi di sotto-interrogazioni
- Subquery scalare: comando SELECT che restituisce un solo valore
SELECT Max(Valutazione) FROM Film;
È possibile esprimere interrogazioni complesse, prima il DBMS calcola la subquery:
- Se restituisce più di un valore genera un errore run-time
- Se voglio restituire più valori devono essere specificati nella clausola WHERE
- Subquery di colonna: comando SELECT che restituisce una colonna
SELECT Valutazione FROM Film;
Utilizzo operatori di confronto: ANY (almeno uno dei valori) | ALL (tutti i valori) | NOT IN (non è in..)
Per concetto di esclusione si può utilizzare NOT IN ma anche le formule EXCEPT.
- Subquery di tabella: comando SELECT che restituisce una tabella
SELECT Titolo, Regista FROM Film;
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.