Estratto del documento

(X (X

− → Y ∈ F F ⊢ − → Y

2. è una dipendenza ridondante se e solo se

X → Y , cioè

{X {X

(F − → Y}) = F F − → Y} ⊢ X → Y

F è detta copertura canonica se e solo se:

1. La parte destra di ogni DF in F è un attributo

2. Non esistono attributi estranei

3. Non esistono dipendenze ridondanti

Esiste un teorema che ci permette di utilizzare gli insiemi di dipendenze che sono coperture canoniche.

TH: Per ogni insieme di dipendenze F, esiste una copertura canonica. È presente un algoritmo per calcolare

la copertura canonica dove vengono trasformate le dipendenze nella forma elimina gli attributi

X → A,

estranei e le dipendenze ridondanti. In generale per eliminare le anomalie da uno schema occorre

decomporlo in piccoli schemi equivalenti. DEF: Dato uno schema con è una

{R (T ), (T )}

R(T) = … , R

decomposizione di R se e solo se Sono due le proprietà desiderabili di una decomposizione:

U T = T.

1. Conservazione dei dati

2. Conservazione delle dipendenze

Che sono entrambe due proprietà indipendenti. Preservazione dei dati: è una

{R (T ), (T )}

= … , R

decomposizione di che preserva i dati se e solo se per ogni istanza valida r di R:

() . Dalla definizione di giunzione naturale scaturisce il seguente risultato.

r = π r ⋈ ⋯ ⋈ π r

TH: se è una decomposizione di allora per ogni istanza r di R:

{R (T ), (T )}

= … , R R(T),

. TH decomposizioni binarie: sia R<T, F> uno schema relazionale, la

⊆ π r ⋈ ⋯ ⋈ π r

decomposizione preserva i dati se e solo se o .

(T ), (T )}

= {R R T ∩ T → T ∈ F T ∩ T → T ∈ F

Esistono anche dei criteri per le decomposizioni in più di due schemi. Dato lo schema R<T, F>, la

decomposizione preserva le dipendenze se e solo se l’unione delle dipendenze in è

{R }

= , … , R π (F)

una copertura di F. Dato lo schema R<T, F>, il problema di stabilire se la decomposizione {R }

= , … , R

preserva le dipendenze ha complessità in tempo polinomiale. Ora parliamo di un teorema importante.

TH: Sia una decomposizione di R<T, F> che preservi le dipendenze e tale che un sia

{R

= < T , F >} T

una superchiave per R. Allora preserva i dati. Definizione di proiezione delle dipendenze: Dato lo schema

R<T, F>, e la proiezione di F su è Durante lo sviluppo sono

{X |XY }.

(F)

T ⊆ T, T π = → Y ∈ F ⊆ T

state individuate varie categorie di anomalie che hanno portato alla definizione di diverse forme normali

intese come PROPRIETA’ che devono essere soddisfatte dalle dipendenze da attributi di schemi ben fatti.

Ne abbiamo diverse:

1. Prima forma normale: Impone una restrizione sul tipo di una relazione, richiede che i valori di tutti i

domini di una relazione siano atomici. Questa è stata inglobata nei moderni modelli relazionali, è

un vincolo integrato

2. Seconda forma normale: impone dei vincoli sulle dipendenze

3. Terza forma normale: è un criterio per valutare la qualità di uno schema che è restrittivo della

FNBC. DEF: R<T, F> è in 3FN se per ogni X→A F+, con A X, X è una superchiave o A è primo.

∈ ∉

Essendo restrittiva, la 3FN accetta anche schemi con anomalie. La 3FN ammette una dipendenza

non banale e non-da-chiave se gli attributi a destra sono primi; la BCNF non ammette mai nessuna

dipendenza non banale e non-da-chiave. TH: R<T, F> è in 3FN se per ogni X → A F non banale,

allora X è una superchiave oppure A è primo.

4. Forma normale di Boyce-Codd (FNBC): Una dipendenza non banale indica l’esistenza di una

X → A

collezione di entità identificate da X. Se esiste in R una dipendenza non banale ed X non è

X → A

chiave, allora X modella l’identità di un’entità diversa da quelle modellate dall’intera R. DEF: R<T, F>

è in BCNF per ogni X→A F+, con A∉X (non banale), X è una superchiave. Quindi la FNBC

⇔ ∈

dipende dalla chiusura delle dipendenze. TH: R<T, F> è in BCNF per ogni X→A F non

F ⇔ ∈

banale, X è una superchiave.

Le FNBC risolvono le anomalie delle dipendenze funzionali, ma possono essere presenti altre anomale non

associabili alle DF. La coesistenza di due proprietà multivalore indipendenti, fa sì che per ogni impiegato

esistano tante ennuple quante sono le possibili coppie di valori. Dopo la progettazione logica può essere

opportuno reintrodurre nello schema fisico delle anomalie.

Lezione 10

Il linguaggio SQL viene sviluppato nel 1973 dai ricercatori della IBM, intorno agli anni ’80 inizia un processo

di standardizzazione. Le implementazioni nei vari DBMS relazionali commerciali, includono funzionalità

non previste dallo standard, non includono funzionalità previste dallo standard. Implementano funzionalità

previste dallo standard ma in modo diverso. SQL è un linguaggio dichiarativo basato sul calcolo relazionale

su ennuple e sull’algebra relazionale. Le relazioni possono avere righe duplicate (tabella è un multinsieme),

eliminare i duplicati costa . Se lo guardiamo dal punto di vista della flessibilità può essere utile

O nlog(n)

avere duplicati, perché potrebbero servire per le funzioni di aggregazione. Il linguaggio comprende:

1. DML (Data Manipulation Language): ricerche e/o modifiche interattive con le interrogazioni o

query

2. DDL (Data definition Language): definizione (e amministrazione) della base di dati

È possibile usare SQL in altri linguaggi di programmazione. Come sappiamo, SQL è un calcolo su

multiinsiemi e i comandi base sono:

- SELECT: fa la proiezione dei campi

- FROM: si specificano le tabelle dove prelevare i dati

- WHERE: si specifica la condizione per cui filtrare le tabelle, può essere una combinazione booleana

(AND, OR, NOT) e disuguaglianza tra attributi

È previsto l’uso del valore null a meno che non si impone il vincolo di integrità not null. Il comando

DISTINCT si usa nella SELECT per non avere dei duplicati. SELECT fa la proiezione. Se si opera con più tabelle

e con degli attributi omonimi bisogna qualificarli. Adesso prendiamo in considerazione gli alias che

permettono di fare la ricorsività su più livelli. A più attributi possono essere associati gli Alias.

Le funzioni di aggregazione vengono usate per fare varie operazioni:

- COUNT: letteralmente conta il numero di tuple

- MIN, MAX, AVG: minimo, massimo e media

Ma ricorda, non si usano insieme funzioni di aggregazione e attributi. La clausola FROM permette di

costruire, nella versione base, il prodotto cartesiano di tabelle, con la clausola WHERE, FROM permette di

esprimere la giunzione. Una giunzione può essere: [CROSS, NATURAL], [LEFT|RIGHT|FULL]JOIN. Per le

tabelle, poi, esistono anche [using(attributi)|ON(Condizione)]. JOIN realizza il prodotto cartesiano. Se faccio

LEF JOIN viene fatta la giunzione esterna. Se facciamo la JOIN semplice compariranno tutti gli studenti con i

loro relativi esami, con la LEF JOIN compariranno anche gli studenti che non hanno fatto neanche un

esame, cioè NULL, e compaiono una sola volta. Abbiamo poi la clausola ORDER BY che fa si che la tabella sia

ordinata secondo gli attributi elencati: ORDER BY Attributo [(DESC|ASC)] {, Attributo [(DESC)|(ASC)]}. SQL

comprende degli operatori insiemistici: UNION, INTERSECTION ed EXCEPT. Questi vengono usati per

combinare i risultati di tabelle con colonne di ugual nome e ugual tipo. Essendo operatori insiemistici per

definizione eliminano i duplicati, a meno che non ci sia esplicitamente richiesto il contrario con l’opzione

ALL la quale viene messa alla UNION.

Lezione 11

I valori nulli sono rappresentati dal valore speciale NULL che può essere il valore di un attributo di

qualunque tipo a meno che non ci sia il vincolo NOT NULL. Il valore di un campo di un’ennupla può mancare

per molte ragioni. Per questo SQL fornisce il valore speciale NULL. La clausola BETWEEN si applica a valori

numerici. Il pattern può contenere caratteri e simboli speciali tra cui:

- %: sequenza di 0 o di più caratteri qualsiasi

- _: un carattere qualsiasi

La clausola WHERE può essere una condizione booleana di predicati. Alcune interrogazioni richiedono di

estrarre dati dal DB e usarli in operazioni di confronto. È possibile specificare query annidate inserendo

nella clausola WHERE una condizione che usi una query (che a sua volta può contenere un’altra query

annidata). Le query annidate sono spesso chiamate “SQL Select Annidate” o “sottoselect”. Le query

annidate possono:

1. Fare confronti con l’insieme dei valori ritornati dalla sottoselect

2. Verificare la presenza/assenza di valori nell’insieme ritornato dalla sottoselect

3. Verificare se l’insieme ritornato dalla sottoselect è vuoto

Tutte le interrogazioni su di una associazione multivalore vanno quantificate. La sintassi del where di SQL è

una combinazione booleana di predicati tra cui:

- Expr Comp Expr

- Expr Comp (sottoselect che torna un valore)

- [NOT] EXISTS (sottoselect)

Un altro costrutto che permette una quantificazione esistenziale è il costrutto ANY. ANY e EXIST esprimono

la stessa cosa ma vengono espresse in due forme diverse.

Lezione 12

Un’alternativa agli insiemi vuoti è il groupby. Se per ogni materia ci interessa trovare il nome e una

funzione aggregata (media), poi ci interessa trovare il nome della materia e il voto medio degli esami

selezionando solo le materie per le quali sono stati sostenuti più di tre esami dovremo utilizzare il

costrutto groupby: esegue le clausole FROM-WHERE, partiziona la tabella risultante rispetto all’uguaglianza

su tutti i campi, elimina i gruppi che non rispettano la clausola HAVING, da ogni gruppo estrae una riga

usando la clausola SELECT. In sintesi i passi sono:

1. Raggruppamento

2. Valuta HAVING e SELECT

Di base NULL = NULL significa “unknown”, però nel groupby NULL = NULL, se un attributo può assumere un

valore NULL tutte le tuple che hanno valore NULL associate saranno così. Per la modifica dei datti abbiamo

tre tipi:

- Insert

- Update

- Delete

Lezione 13

SQL oltre ad essere un linguaggio per fare interrogazioni, è anche un linguaggio per la definizione di basi di

dati (DDL – Data Definition Language) in quanto permette la creazione della base di dati e della struttura

logica della tabella. Presenta dei vincoli di integrità su attributi di una ennupla, intrarelazionali,

interrelazionali. Per la modifica dello

Anteprima
Vedrai una selezione di 6 pagine su 22
Basi di dati – modelli relazionali, algebra, SQL e progettazione database Pag. 1 Basi di dati – modelli relazionali, algebra, SQL e progettazione database Pag. 2
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Basi di dati – modelli relazionali, algebra, SQL e progettazione database Pag. 6
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Basi di dati – modelli relazionali, algebra, SQL e progettazione database Pag. 11
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Basi di dati – modelli relazionali, algebra, SQL e progettazione database Pag. 16
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Basi di dati – modelli relazionali, algebra, SQL e progettazione database Pag. 21
1 su 22
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher antomancino01 di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi della Basilicata o del prof Sartiani Carlo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community