Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per...

21
Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema) L’equivalenza è importante in quanto consente di scegliere, a parità di risultato, l’operazione meno costosa. E 1 E 2 se E 1 R E 2 per ogni schema R (equivalenza assoluta)

Transcript of Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per...

Page 1: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Equivalenza di espressioni

Due espressioni sono equivalenti se:

E1R E2 se E1(r) = E2(r) per ogni istanza r di R

(equivalenza dipendente dallo schema)

L’equivalenza è importante in quanto consente di scegliere, a parità di risultato, l’operazione meno costosa.

E1 E2 se E1R E2 per ogni schema R (equivalenza assoluta)

Page 2: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Equivalenze

Atomizzazione delle selezioni F1 F2

(E) F1 (F2 (E))

Idempotenza delle proiezioni X (E) X (XY (E))

Anticipazione della selezione rispetto al join F (E1

E

2) E

1 (F (E2

) )

Page 3: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Equivalenze

Anticipazione della proiezione rispetto al join:

X1Y2 (E1

E

2) E

1 Y2 (E2

)

(se gli attributi in X2 - Y2 non sono coinvolti nel join)

Allora (combinando con idempotenza delle proiezioni):

Y (E

1 F

E2) Y

(Y1 (E

1) F

Y2 (E

2) )

dove Y1 e Y2 sono gli attributi di X1 e X2 compresi in Y o coinvolti nel join.

In pratica è possibile ignorare in ciascuna relazione gli attributi non

compresi in Y e non coinvolti nel join

Inglobamento di una selezione in un prodotto cartesiano a formare un join: F (E1

E

2) E

1 F

E2

Page 4: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Equivalenze

Distributività della selezione rispetto all’unione: F (E1

E

2) F (E1

)

F (E2

)

Distributività della selezione rispetto alla differenza:

F (E1 -

E

2) F (E1

) -

F (E2

)

Distributività della proiezione rispetto all’unione: X (E1

E

2) X (E1

)

X (E2

)

NB La proiezione NON è distributiva rispetto alla differenza

Tutti gli operatori binari eccetto la differenza godono delle proprietà associativa e commutativa.

Page 5: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Equivalenze

Corrispondenze fra operatori insiemistici e selezioni complesse

F1 F2 (R) F1

(R) F2(R)

F1 F2 (R) F1

(R) F2(R) F1

(R) F2(R)

F1 ¬F2 (R) F1

(R) - F2(R)

Proprietà distributiva del join rispetto all’unione: E (E

1

E

2) (E

E

1) (E

E

2)

Page 6: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

SQL

SQL (pronunciato anche come l’inglese sequel) è l’acronimo di

Structured Query Language

(linguaggio di interrogazione strutturato)

E’ un linguaggio completo che presenta anche le proprietà di:

DDL (Data Definition Language)

DML (Data Manipulation Language)

Con SQL è quindi possibile: definire schemi di basi di dati eseguire query modificare il contenuto della base di dati

Page 7: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

SQL

1986 Prima standardizzazione

1989 SQL-89

1992 SQL-2 (SQL-92): versione attualmente diffusa (e tuttora non completamente implementata)

1998 SQL-3 (SQL-99): nuovo standard proposto con funzionalità avanzate (DB a oggetti, operazioni ricorsive ecc.)

3 implementazioni disponibili: Entry SQL Intermediate SQL Full SQL

Page 8: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Definizione dei dati

Esistono 6 domini elementari:

Character Bit Tipi numerici esatti Tipi numerici approssimati Data e ora Intervalli temporali

Page 9: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Domini

Characterrappresenta singoli caratteri o stringhe

character [varying] [(Lunghezza)]

[character set NomeFamigliaCaratteri]

character(20) stringa di lunghezza 20

character varying(100) stringa di lunghezza max. 100

character(20) character set Greekstringa di lunghezza 20 in caratteri greci

Page 10: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Domini

Bitrappresenta attributi o vettori di attributi che possono assumere solo valori 0 o 1. Utilizzato per implementare flag.

bit [varying] [(Lunghezza)]

Intervalli Temporali

interval UnitàDiTempo1[(Precisione)]

[to UnitàDiTempo2[(Precisione)]]UnitàDiTempo1 e UnitàDiTempo2 specificano le unità di misura da usare dalla più lunga alla meno lunga

NB La definizione è valida nei 2 sottointervalli [year,month] e [day,second].

Interval day(4) to second(6) rappresenta l’intervallo [0,10000) giorni e secondi con precisione al milionesimo di s.

Page 11: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Domini

Tipi numerici esattiValori interi o con una parte decimale di lunghezza prefissata

numeric [(Precisione [,Scala])]

decimal [(Precisione [,Scala])]

integer

smallint

Precisione specifica il numero di cifre significative

Scala quante cifre si vogliono rappresentare dopo la virgola

decimal(4) numeri da -9999 a 9999

numeric(6,3) numeri da -999.999 a 999.999

La precisione degli interi dipende dall’implementazione

Page 12: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Domini

Tipi numerici approssimatirappresentano valori reali approssimati

float [(Precisione)]

double precision

real

Precisione specifica il numero di cifre dedicato alla mantissa

(la precisione dell’esponente dipende dall’implementazione)

real e double precision hanno precisione prestabilita, una doppia rispetto all’altra.

Page 13: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

DominiData e oratipi utilizzati per rappresentare istanti di tempo

date

time [(Precisione)][with time zone]

timestamp [(Precisione)][with time zone]ciascun tipo è divisibile in campi.

date ammette come campi year, month e day

time i campi da hour, minute, second

timestamp tutti i campi da year a second

I campi sono divisi da “:” 20:03:04+1:00

Page 14: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Definizione di schemi

E’ possibile definire uno schema di base di dati come collezione di oggetti.

create schema[NomeSchema]

[[authorization] Autorizzazione]]

{DefElementoSchema}

Autorizzazione rappresenta il nome dell’utente proprietario dello schema

Page 15: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Definizione tabelle

Una tabella SQL è costituita da una collezione ordinata di attributi e da un insieme di vincoli

create table NomeTabella

( NomeAttributo Dominio [ValDefault] [Vincoli]

{,NomeAttributo Dominio [ValDefault] [Vincoli] }

AltriVincoli

)

Una tabella è inizialmente vuota e chi la crea possiede tutti i diritti su di essa

Page 16: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Definizione Tabelle

Es.

create table Dipartimento

(

Nome char(20) primary key,

Indirizzo char(50),

Città char(20)

)

Page 17: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Definizione Domini

Come nei linguaggi ad alto livello (es. C) è possibile definire nuovi domini (tipi di dati) a partire da quelli predefiniti, anche se il costruttore è più limitato.

create domain NomeDominio as TipodiDato

[ValDefault]

[Vincolo]

Non si possono creare array o strutture poiché il modello relazionale richiede che gli attributi siano definiti su un dominio elementare.

E’ però possibile associare dei vincoli ad un dominio definito dall’utente. Se si modifica la definizione di un dominio, la modifica si propaga a tutte le tabelle.

Page 18: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

CREATE DOMAIN Voto AS SMALLINT DEFAULT NULLCHECK ( value >=18 AND value <= 30 )

CREATE DOMAIN, esempio

Page 19: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Valori di default

Si possono specificare valori di default che vengono assunti da un attributo quando, al momento della creazione di una nuova tupla, in un campo non viene inserito alcun valore.

default < GenericoValore | user | null >GenericoValore rappresenta un valore compatibile col dominio

user rappresenta il nome dell’utente che aggiorna la tabella

null corrisponde al valore di default di base

Un nuovo default (es. nella definizione di un tipo a partire da un altro) sostituisce il precedente

Es. NumeroFigli smallint default 0impone il valore 0 quando non viene specificato il valore dell’attributo.

Page 20: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Vincoli intrarelazionali

I più semplici vincoli intrarelazionali predefiniti sono

not null indica che il valore nullo non è ammesso su uno specifico attributo. Quindi richiede che sia inserito un valore, salvo che non sia già definito un valore di default.SQL non distingue i diversi tipi di valore nullo. Se è necessario farlo vanno definiti opportuni domini.

unique (Attributo {, Attributo}) indica che l’insieme di attributi deve essere una superchiave per la tabella.

primary key (Attributo {, Attributo}) definisce la chiave primaria. Può essere una sola. Tutti gli attributi sono not null.

Page 21: Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R (equivalenza dipendente dallo schema)

Vincoli intrarelazionaliEs.

Nome character(20) not null,

Cognome character(20) not null,

unique (Nome, Cognome)

impone che non ci sia una riga con sia nome che cognome uguali

Nome character(20) not null unique,

Cognome character(20) not null unique

impone che sia nome che cognome siano diversi in tutte le righe