Anteprima
Vedrai una selezione di 10 pagine su 43
Corso di Sistemi informativi e basi di dati Pag. 1 Corso di Sistemi informativi e basi di dati Pag. 2
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 6
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 11
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 16
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 21
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 26
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 31
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 36
Anteprima di 10 pagg. su 43.
Scarica il documento per vederlo tutto.
Corso di Sistemi informativi e basi di dati Pag. 41
1 su 43
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

R (PROJ (R) JOIN (PROJ (R))

X1 X2

Può infatti capitare, nel primo caso, che alcune ennuple non contribuiscano al risultato e, formando righe

identiche, vengano tagliate fuori.

Il JOIN ESTERNO estende con valori nulli le ennuple che verrebbero alternativamente tagliate fuori da un join

interno. Esistono 3 versioni di questo tipo di join:

➢ Sinistro, che mantiene tutte le ennuple del primo operando estendendole con valori nulli se

necessario.

➢ Destro, che mantiene tutte le ennuple del secondo operando estendendole con valori nulli se

necessario.

➢ Completo, che mantiene tutte le ennuple di entrambi gli operandi estendendole con valori nulli se

necessario.

Il prodotto cartesiano è un join naturale su relazioni che non hanno attributi in comune. Quindi contiene

sempre un numero di ennuple pari al prodotto delle cardinalità degli operandi poiché tutte le ennuple sono

combinabili tra loro.

Il prodotto cartesiano ha senso solo se seguito quindi da un’operazione di selezione del tipo:

SEL (R JOIN R )

Condizione 1 2

Questo tipo di operazione viene definito come THETA-JOIN ed indicato con:

R JOIN R

1 condizione 2

La condizione riportata è spesso una congiunzione di atomi di

confronto A ϑ A dove ϑ è uno degli operatori di confronto (=,<,>,…).

1 2

Se l’operatore è l’uguaglianza (=) allora si parla di EQUI-JOIN.

In SQL non esiste un operatore che esegua il JOIN NATURALE poiché i

DBMS non fanno controlli sul nome degli attributi. Quindi è

implementato in pratica soltanto il Theta-join.

Il join naturale è però interscambiabile con il Theta Join.

Le seguenti scritture sono equivalenti:

Impiegati JOIN (NATURALE) Reparti

PROJ (Impiegati JOIN REN (Reparti))

Impiegato,Reparto,Capo Reparto=Rep.reparto Rep.reparto<-Reparto

Nel caso di valori nulli bisogna utilizzare nella SLECT i specifici comandi IS NULL ed IS NOT NULL per

comprendere o meno anche tutti quanti i valori nulli presenti nella relazione considerata.

Due espressioni sono equivalenti se producono lo stesso risultato indipendentemente dall’istanza attuale

della base di dati. In algebra relazionale si possono avere due tipologie di equivalenza:

➢ Dipendente allo schema (= )

R

PROJ (R ) JOIN PROJ (R ) = PROJ (R JOIN R )

AB 1 AC 2 R ABC 1 2

Vera solo se (R ∩ R ) = A

1 2

➢ Assoluta (=)

R JOIN R = R JOIN R

1 2 2 1

R JOIN (R JOIN R ) = (R JOIN R ) JOIN R = R JOIN R JOIN R

1 2 3 1 2 3 1 2 3

Si ha inoltre distributività della selezione rispetto all’unione, alla differenza e della proiezione rispetto

all’unione.

SEL (P) = SEL (P) U SEL (P)

ϑ1 OR ϑ2 ϑ1 ϑ2

SEL (P) = SEL (P) ∩ SEL (P)

ϑ1 AND ϑ2 ϑ1 ϑ2

SEL (P) = SEL (P) - SEL (P)

ϑ1 AND -ϑ2 ϑ1 ϑ2

Un’equivalenza importante è la seguente, push selections:

SEL (R JOIN R ) = R JOIN SEL (R )

ϑ 1 2 R 1 ϑ 2

A condizione che ϑ contenga solo attributi di R . Essa riduce significativamente la dimensione del

2

risultato intermedio e quindi il costo dell’operazione. Un esempio di push projections con D unico

attributo in comune, prendendo R (A,B,C,D) ed R (D,E,F) avremo:

1 2

PROJ (R JOIN R ) = PROJ (PROJ (R ) JOIN PROJ (R ))

ABE 1 2 R ABE ABD 1 DE 2

Le viste sono relazioni derivate rappresentanti diversamente gli stessi dati (schema esterno). Il loro

contenuto è dunque funzione del contenuto di altre relazioni e viene definito per mezzo di interrogazioni.

Esse possono anche essere definite su altre derivate ma possono esserci solo due tipi di tali relazioni:

➢ Viste materializzate

Sono relazioni derivate che vengono memorizzate nella base di dati e che sono immediatamente

disponibili per le interrogazioni ma assolutamente ridondanti e raramente supportate dai DBMS.

➢ Relazioni virtuali (o viste)

Sono relazioni derivate che vengono calcolate al momento in cui viene eseguita un’interrogazione su

di essa e sono supportate da tutti i DBMS.

Le interrogazioni sulle viste sono eseguite sostituendo alla vista la sua definizione:

SEL (Supervisione)

Capo=’Bruni’

Viene eseguita esattamente come se avessimo scritto:

SEL (PROJ (Afferenza JOIN Direzione))

Capo=’Bruni’ Impiegato, Capo

Le viste, facendo parte dello schema esterno, consentono di mostrare agli utenti solo le informazioni di

interesse e ciò che a tutti gli effetti sono autorizzati a vedere. Sono inoltre utili strumenti di programmazione

ai fini di semplificare la scrittura delle interrogazioni specie in espressioni complesse o sottoespressioni

ripetute. L’utilizzo di viste non influisce inoltre sull’efficienza delle interrogazioni. La relazioni base hanno

invece contenuto autonomo.

Per aggiornare una vista è necessario modificare le relazioni di base in modo che la vista ricalcolata rispecchi

l’aggiornamento. Tale aggiornamento corrispondente a quello specificato sulla vista deve essere univoco ma

in generale non lo è: sono pochi gli aggiornamenti ammissibili sulle viste.

CALCOLO RELAZIONALE

E’ una famiglia di linguaggi dichiarativi basati sul calcolo dei predicati del primo ordine. Ne esistono diverse

versioni:

➢ Calcolo relazionale su domini

Le espressioni hanno la forma {A : x ,…, A : x | f} dove f è una formula con connettivi booleani e

1 1 k k

quantificatori. Si definisce A : x ,…, A : x come target list costituita da attributi distinti A ,…, A e

1 1 k k 1 k

variabili distinte x ,…, x .

1 k

Le formule sono atomiche:

R(A : x ,…, A : x ) con R(A ,…, A ) schema di relazione e x ,…, x variabili

1 1 k k 1 k 1 k

x ϑ y, x ϑ c con x e y “variabili”, c “costante” e ϑ operatore di confronto

La sintassi prevede formule composte quindi se f e f sono formule e x è un simbolo di variabile allora

1 2

si potranno avere f OR f , f AND f , f - f , per ogni x(f), esiste x(f).

1 2 1 2 1 2

Il risultato di un’espressione è una relazione su A ,…, A che contiene ennuple di valori per x ,…, x

1 k 1 k

che rendono vera la formula f.

➢ Calcolo su ennuple con dichiarazioni di range

LINGUAGGIO SQL

Originariamente “Structured Query Language” l’SQL è un linguaggio dotato di varie funzionalità poiché

contenente sia il DDL che il DML. Esistono numerosi versioni di questo linguaggio ma ne esamineremo solo

gli aspetti essenziali e non i dettagli specifici.

La prima proposta fu nel 1974 quando uscì il SEQUEL ma diventò lo standard di fatto solo dal 1983. Tutt’ora

la standardizzazione non è completa.

La definizione della base di dati in SQL avviene tramite l’utilizzo dell’istruzione:

➢ CREATE SCHEMA che definisce uno schema di base di dati, eventualmente con schema di tabelle

vuoto, enunciandone le proprietà:

Create schema [nome_schema] [authorization]

{

Definizione degli elementi dello schema

};

La creazione di uno schema di relazione avviene per mezzo del comando:

➢ CREATE TABLE che definisce lo schema e ne crea un’istanza vuota specificando attributi, domini e

vincoli

Create table [nome_tabella]

(

nome_Attributo [Dominio] [Val_Default] [Vincoli]

);

I domini utilizzati possono essere:

➢ Elementari (predefiniti)

CARATTERI

BIT

NUMERICI

DATA, ORA, INTERVALLI DI TEMPO

BOOLEAN

BLOB, CLOB

➢ Definiti dall’utente (semplici ma riutilizzabili)

Si utilizza l’istruzione CREATE DOMAIN che definisce un dominio semplice utilizzabile in definizioni di

relazioni anche con vincoli e valori di default.

La creazione di un nuovo dominio personalizzato avviene per mezzo del comando:

➢ CREATE DOMAIN che definisce un dominio semplice ed utilizzabile nelle definizioni delle relazioni

anche con vincoli e valori di default

create domain Voto as smallint DEFAULT NULL check (voto>=18 and voto <=30);

I vincoli intrarelazionali sono esprimibili per mezzo dei comandi:

➢ NOT NULL che segnala un valore che non può essere nullo

Nome char (6) NOT NULL;

➢ UNIQUE che definisce le chiavi venendo posto nella definizione di un attributo se esso forma da solo

la chiave oppure, in caso contrario, come elemento separato

Stipendio numeric (9) UNIQUE

UNIQUE (stipendio, matricola)

➢ PRIMARY KEY che definisce le chiavi primarie (nel caso di una sola implica anche NOT NULL)

Matricola char (6) PRIMARY KEY

PRIMARY KEY (Matricola, Badge)

➢ CHECK

I vincoli interrelazionali sono esprimibili per mezzo di altri comandi quali:

➢ REFERENCES E FOREIGN KEY che permettono di definire vincoli di integrità referenziale per singoli

attributi o su più attributi.

FOREIGN KEY (Vigile) REFERENCES Vigili (Matricola)

FOREIGN KEY (Provincia, numero) REFERENCES Auto (Provincia, numero)

È possibile inoltre definire politiche di reazione alla violazione. Tali azioni compensative sono

esprimibili con i comandi: on <delete | update> <cascade | set null | set default | no action>

FOREIGN KEY(TargaP, TargaN) REFERENCES(Provincia, numero) on delete set null on update cascade

La modifica agli schemi avviene per mezzo di comandi quali:

➢ ALTER DOMAIN

➢ ALTER TABLE

➢ DROP DOMAIN

➢ DROP TABLE

Gli schemi definiti vengono mantenuti dai DBMS

in un dizionario dei dati mediante una struttura

relazionale. Ci sono infatti due tipi di tabelle:

➢ Dati

➢ Metadati, ovvero i dati che descrivono i dati

Le operazioni sui dati in SQL si esprimono per

mezzo di comandi di:

➢ Interrogazione, come SELECT

➢ Modifica, come INSERT, DELETE, UPDATE

L’istruzione SELECT nella sua versione base è definita tramite i comandi:

SELECT Lista_Attributi

FROM Lista_Tabelle

[WHERE Condizione]

❖ L’istruzione SELECT definisce la target list decomponendo verticalmente (PROIEZIONE) mentre l’istruzione

FROM permette di indicare le tabelle su cui si sta agendo o le operazioni di JOIN tra di esse. Il comando

WHERE è facoltativo e permette di decomporre orizzontalmente (SELEZIONE).

Nome e reddito delle persone con meno di trenta anni

PROJ Nome, Reddito (SEL Età < 30 (Persone))

SELECT Nome, Reddito

FROM Persone

WHERE Età < 30;

Si può utilizzare il nome della relazione di riferimento seguito dal punto e dall’attributo che vogliamo

utilizzare per indicare l’appartenenza di quest’ultimo alla specifica tabella.

SELECT Persone.Nome, Persone.Reddito

FROM Persone

WHERE Persone.età < 30

Oppure

SELECT P.Nome as Nome, P.Reddito as Reddito

FROM Persone as P

WHERE P.Età < 30

Per poter vedere i

Dettagli
A.A. 2018-2019
43 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher alexandertiino di informazioni apprese con la frequenza delle lezioni di Basi di dati e sistemi informativi 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à Politecnica delle Marche - Ancona o del prof Diamantini Claudia.