13.07.2015 Views

Schema di relazione - DBGroup

Schema di relazione - DBGroup

Schema di relazione - DBGroup

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Modello RelazionaleIl modello relazionale dei dati è stato introdotto da Codd nel 1970 (E.F.Codd, “A relational model of data for large shared data banks”, Comm.of the ACM, 1970) ed è basato sul concetto matematico <strong>di</strong> <strong>relazione</strong>.Dominio : insieme <strong>di</strong> valori D = {v 1 ,v 2 ,...,v k }Tupla :Dati n domini D 1 ,D 2 ,...,D n , non necessariamente <strong>di</strong>stinti unaennupla (tupla) or<strong>di</strong>nata è definita comeProdotto Cartesiano :t =(v 1 ,v 2 ,...,v n ),v i ∈ D i , ∀1 ≤ i ≤ nIl prodotto cartesiano <strong>di</strong> n domini D 1 ,D 2 ,...,D n , non necessariamente<strong>di</strong>stinti, in<strong>di</strong>cato con D 1 × D 2 × ...× D n , è l’insieme <strong>di</strong> tuttele tuple t su D 1 ,D 2 ,...,D n .Relazione :Una <strong>relazione</strong> R su n domini D 1 ,D 2 ,...,D n , non necessariamente<strong>di</strong>stinti, è un sottoinsieme del prodotto cartesiano D 1 ×D 2 ×...×D n :R ⊆ D 1 × D 2 × ...× D n• Il valore <strong>di</strong> n viene chiamato Grado della <strong>relazione</strong>• Il numero <strong>di</strong> tuple viene chiamata Car<strong>di</strong>nalità della <strong>relazione</strong>


Esempi :D 1 = {v 11 ,v 12 } D 2 = {v 21 ,v 22 ,v 23 }D 1 ×D 2 = {(v 11 ,v 21 ), (v 11 ,v 22 ), (v 11 ,v 23 ), (v 12 ,v 21 ), (v 12 ,v 22 ), (v 12 ,v 23 )}R 1 = {(v 11 ,v 21 ), (v 11 ,v 22 )} R 2 = {}R 3 = {(v 11 ,v 21 ), (v 11 ,v 22 ), (v 12 ,v 21 ), (v 12 ,v 22 )}Rappresentazione <strong>di</strong> relazioni :Una <strong>relazione</strong> viene rappresentata generalmente tramite una tabellacon un numero <strong>di</strong> righe pari alla car<strong>di</strong>nalità e un numero <strong>di</strong> colonnepari al gradoR 3v 11 v 21v 11 v 22v 12 v 21v 12 v 22


<strong>Schema</strong> ed IstanzaAttributo : Nome dato ad un dominio in una <strong>relazione</strong>• si ottiene l’in<strong>di</strong>pendenza dall’or<strong>di</strong>namento dei domini• si attribuisce significato ai valori del dominio<strong>Schema</strong> <strong>di</strong> <strong>relazione</strong> :Uno schema <strong>di</strong> <strong>relazione</strong> è una coppia costituita dal nome della <strong>relazione</strong>R e da un insieme <strong>di</strong> nomi degli attributi X =(A 1 ,A 2 ,...,A n ),in<strong>di</strong>cato con R(X).Dato uno schema R(X) si <strong>di</strong>ce anche che lo schema della <strong>relazione</strong>R è X.♦ I nomi degli attributi A i devono essere tutti <strong>di</strong>versi.Istanza <strong>di</strong> <strong>relazione</strong> :Una istanza <strong>di</strong> <strong>relazione</strong> o <strong>relazione</strong> su uno schema R(A 1 ,A 2 ,...,A n )è un insieme r <strong>di</strong> tuple su (A 1 ,A 2 ,...,A n )


<strong>Schema</strong> <strong>di</strong> base <strong>di</strong> dati :È un insieme <strong>di</strong> schemi <strong>di</strong> relazioni R = {R 1 (X 1 ),R 2 (X 2 ),...,R n (X n )}Tutti i nomi <strong>di</strong> <strong>relazione</strong> R i devono essere <strong>di</strong>fferenti.Istanza <strong>di</strong> base <strong>di</strong> dati :Dato uno schema <strong>di</strong> base <strong>di</strong> dati R = {R 1 (X 1 ),R 2 (X 2 ),...,R n (X n )},una istanza su R è un insieme <strong>di</strong> relazionir = {r 1 ,r 2 ,...,r n }, dove r i è una <strong>relazione</strong> su R i , ∀1 ≤ i ≤ n♦ Differenza tra tabella (usata nei DMBS) e <strong>relazione</strong>• Righe duplicate vs tuple <strong>di</strong>stinteNotazione :♦ Insieme <strong>di</strong> attributi : Un insieme <strong>di</strong> attributi Y dello schemaR(X), cioè Y ⊆ X, può essere denotato anche con R.YA denota {A}, XY denota {X}∪{Y },♦ Tuple : Data una tupla t su R(X), un attributo A ∈ X e unsottoinsieme Y ⊆ Xt[A], oppure t.A, denota il valore <strong>di</strong> t su At[Y ], denota la sottotupla <strong>di</strong> t ottenuta considerando i valori degliattributi in Y


Esempio<strong>Schema</strong> <strong>di</strong> base <strong>di</strong> dati :DB UNIVERSITÀ = { STUDENTE(MATR, NOME, CITTÀ, ACORSOCORSO(CODCOR, NOME, CODDOC)DOCENTE(CODDOC, CF, CITTÀ)FREQUENZA(MATR, CODCOR) }Istanza <strong>di</strong> base <strong>di</strong> dati :STUDENTECORSOMATR NOME CITTÀ ACORSOM1 Marco Quaranta SA 1M2 Giacomo Tedesco PA 2M3 Maria Mei BO 1M4 Ugo Rossi MO 2M5 Sara Neri MO 2M6 Agata Ver<strong>di</strong> MI 1CODCOR NOME CODDOCC1 Fisica 1 D1C2 Analisi Matematica 1 D2C3 Fisica 2 D1C4 Analisi Matematica 2 D2C5 Meccanica Razionale D4DOCENTECODDOC CF CITTÀD1 CF1 MOD2 CF2 BOD3 CF3 MOD4 CF4 FIFREQUENZAMATRM1M1M2M2M3M3M3M3CODCORC1C3C1C2C1C2C3C4


Chiavi♦ Informalmente, per chiave <strong>di</strong> una <strong>relazione</strong> si intende un sottoinsiemedei suoi attributi che identifica univocamente ogni tupla della<strong>relazione</strong> stessa.♦ Dato uno schema <strong>di</strong> <strong>relazione</strong> R(X), un sottoinsieme <strong>di</strong> attributiK ⊆ X è detto chiave dello schema <strong>di</strong> <strong>relazione</strong> R(X) se e solose per ogni <strong>relazione</strong> r su R(X) valgono le seguenti proprietà:1. Univocità: ∀t 1 ,t 2 ∈ r, t 1 [K] =t 2 [K] =⇒ t 1 ≡ t 2cioè, non esistono due tuple <strong>di</strong>stinte <strong>di</strong> r con lo stesso valore dellachiave2. Minimalità:∀A i ∈ K, K − A i non verifica la proprietà 1.cioè, non esiste un sottoinsieme proprio <strong>di</strong> K con la proprietà <strong>di</strong>univocità.♦ Un insieme <strong>di</strong> attributi Y ⊆ X che contiene in modo stretto unachiave K, Y ⊃ K, è detto superchiave dello schema <strong>di</strong> <strong>relazione</strong>R(X).In altri termini, una superchiave sod<strong>di</strong>sfa solo la proprietà 1.Univocità.<strong>di</strong>


♦ Per ogni schema <strong>di</strong> <strong>relazione</strong> R(X), l’insieme X è una superchiavein quanto una <strong>relazione</strong>, essendo un insieme, contiene tuple <strong>di</strong>stinte.Quin<strong>di</strong>, ogni schema <strong>di</strong> <strong>relazione</strong> R(X) ha almeno una chiave.♦ Uno schema R(X) può avere più chiavi dette chiavi can<strong>di</strong>dateTra le chiavi can<strong>di</strong>date ne viene scelta una detta chiave primariaLe rimanenti chiavi vengono dette chiavi alternativeNotazione :♦ La chiave primaria <strong>di</strong> uno schema R(X) si in<strong>di</strong>ca sottolineandogli attributi che la compongono: R(K 1 ,K 2 ,...,K m ,A 2 ,...,A n )♦ Una chiave alternativa <strong>di</strong> uno schema R(X) è riportata <strong>di</strong> seguitoallo schema, contrad<strong>di</strong>stinta dalla parola chiave AK:R(X)AK:K 1 ,...K mEsempio :DOCENTE (CODDOC, CF, CITTÀ)AK: CF


Valori nulli e Vincolo <strong>di</strong> Entity IntegrityValori nulli :Ogni dominio <strong>di</strong> <strong>relazione</strong> viene esteso con un particolare valore,detto valore nullo e denotato con null, che rappresenta assenza <strong>di</strong>informazione. In questo modo è possibile introdurre nelle relazionianche tuple in cui il valore <strong>di</strong> uno o più attributi non è <strong>di</strong>sponibile.♦ Ad esempio, con riferimento allo schema <strong>di</strong> <strong>relazione</strong>DOCENTE (CODICE, CF, NOME, CITTA DI NASCITA)si possono elencare vari casi in cui si deve inserire nella <strong>relazione</strong>DOCENTE una tupla il cui valore <strong>di</strong> un attributo non è <strong>di</strong>sponibile:• CITTA DI NASCITA del docente è sconosciuto• il CF non è previsto per docenti <strong>di</strong> determinati paesi• ...♦ Il gruppo <strong>di</strong> standar<strong>di</strong>zzazione ANSI (American National StandardInstitute) ha specificato 14 <strong>di</strong>verse interpretazione per il valorenull.♦ Nei sistemi relazionali è possibile specificare se un attributo puòo meno assumere il valore null.


Vincoli <strong>di</strong> Integrità :I vincoli (o regole) <strong>di</strong> integrità stabiliscono con<strong>di</strong>zioni <strong>di</strong> correttezzadelle informazioni nella base <strong>di</strong> dati.♦ La stessa <strong>di</strong>chiarazione <strong>di</strong> chiave K <strong>di</strong> uno schema <strong>di</strong> <strong>relazione</strong>R è una <strong>di</strong>chiarazione <strong>di</strong> vincolo <strong>di</strong> integrità in quanto stabiliscel’univocità dei valori assunti dagli attributi <strong>di</strong> K.♦ In presenza <strong>di</strong> valori nulli, non sarebbe quin<strong>di</strong> possibile controllarel’univocità dei valori assunti dagli attributi <strong>di</strong> una chiave. Perquesto motivo viene imposto il seguente vincolo.Vincolo <strong>di</strong> Entity Integrity :Tale vincolo stabilisce che gli attributi che costituiscono la chiaveprimaria o alternativa <strong>di</strong> una <strong>relazione</strong> non possono assumere valorenullo.♦ Formalmente, un’istanza r <strong>di</strong> uno schema <strong>di</strong> <strong>relazione</strong> R con chiaveprimaria K 1 ,K 2 ,...,K m , R(K 1 ,K 2 ,...,K m ,A 2 ,...,A n ), sod<strong>di</strong>sfail vincolo <strong>di</strong> Entity integrity se e solo se∀t ∈ r, t[K i ] ≠ null, ∀1 ≤ i ≤ mERRATA-CORRIGEIl Vincolo <strong>di</strong> Entity Integrity vale per ogni chiave primaria o alternativa,quin<strong>di</strong>♦ Formalmente, un’istanza r <strong>di</strong> uno schema <strong>di</strong> <strong>relazione</strong> R con chiaveK 1 ,K 2 ,...,K m , R(K 1 ,K 2 ,...,K m ,A 2 ,...,A n ), sod<strong>di</strong>sfa il vincolo<strong>di</strong> Entity integrity se e solo se∀t ∈ r, t[K i ] ≠ null, ∀1 ≤ i ≤ m


Vincolo <strong>di</strong> Integrità Referenziale♦ Nel Modello Relazionale, i riferimenti tra le tuple delle relazionivengono stabiliti tramite i valori assunti dagli attributi nelle tuple.Il vincolo <strong>di</strong> integrità referenziale assicura che quando in una tuplasi utilizza il valore <strong>di</strong> un attributo per riferirsi ad un’altra tupla,quest’ultima sia una tupla esistente.♦ In uno schema <strong>di</strong> base <strong>di</strong> dati R un vincolo <strong>di</strong> integrità referenzialeviene <strong>di</strong>chiarato specificando:Foreign Key o Chiave Esterna : insieme <strong>di</strong> attributi FK = {FK 1 ,FK 2 ,...,FK n } <strong>di</strong> uno schema <strong>di</strong> <strong>relazione</strong> R 1 ∈ RChiave della Relazione riferita : schema <strong>di</strong> <strong>relazione</strong> R 2 ∈ R, nonnecessariamente <strong>di</strong>stinto da R 1 , con una chiave K = {K 1 ,K 2 ,...,K m },con m = n.♦ Informalmente, un’istanza r = {r 1 ,r 2 ,...} su R sod<strong>di</strong>sfa il vincolo<strong>di</strong> integrità referenziale se i valori sulla foreign key FK <strong>di</strong> ciascunatupla <strong>di</strong> r 1 sono valori della chiave K <strong>di</strong> r 2 , o sono valori nulli.♦ Formalmente, un’istanza r = {r 1 ,r 2 ,...} su R, sod<strong>di</strong>sfa il vincolo<strong>di</strong> integrità referenziale se e solo se∀t 1 ∈ r 1 , (t 1 [FK i ]=null∨∃t 2 ∈ r 2 : t 1 [FK i ]=t 2 [K i ]), ∀1 ≤ i ≤ n


Notazione : R 1 (X)FK: FK 1 ,...FK n REFERENCES R 2 (K 1 ,...K n )• Se K 1 ,...K n è la chiave primaria <strong>di</strong> R 2 può essere omessa:FK: FK 1 ,...FK n REFERENCES R 2Esempio : CORSO (CODICE, NOME, CODDOC)FK: CODDOC REFERENCES DOCENTEIstanza Legale <strong>di</strong> Base <strong>di</strong> Dati :♦ Dato uno schema <strong>di</strong> basi <strong>di</strong> dati R = {R 1 (X 1 ),R 2 (X 2 ),...R n (X n )},un’istanza r = {r 1 ,r 2 ,...r n } su R tale che• ciascuna <strong>relazione</strong> r i sod<strong>di</strong>sfa il vincolo <strong>di</strong> entity integrity• r sod<strong>di</strong>sfa tutti i vincoli <strong>di</strong> integrià referenziale imposti su Rverrà detta istanza legale della base <strong>di</strong> dati R.


0.1 Algebra Relazionale♦ L’Algebra Relazionale è un insieme <strong>di</strong> operatori che si applicano allerelazioni e restituiscono relazioni.♦ Tramite le espressioni dell’Algebra Relazionale è possibile formulareinterrogazioni anche complesse sulla base <strong>di</strong> dati.♦ L’Algebra Relazionale è composta da cinque operatori <strong>di</strong> base apartire dai quali si possono definire altri operatori, detti derivati.♦ Operatori Base :• Unari :• Selezione• Proiezione• Binari :• Unione• Differenza• Prodotto Cartesiano♦ Principali Operatori Derivati :• Intersezione• Join• Divisione


Operatori UnariSelezione : Operatore σ♦ Data una <strong>relazione</strong> r con schema X e un pre<strong>di</strong>cato <strong>di</strong> selezione F• F è una espressione booleana <strong>di</strong> pre<strong>di</strong>cati semplici p• un pre<strong>di</strong>cato semplice p è il confronto tra due espressioni cheutilizzano nomi <strong>di</strong> attributi, costanti e operazioni aritmetichel’operazione <strong>di</strong> selezione σ F (r) ha come risultato una <strong>relazione</strong>con schema X definita dal sottoinsieme <strong>di</strong> tuple <strong>di</strong> r che sod<strong>di</strong>sfanoil pre<strong>di</strong>cato Fσ F (r) ={t | t∈r, F (t) =true}Es. “Studenti del secondo anno <strong>di</strong> corso”σ ACORSO=2 (STUDENTE )MATR NOMECITTÀ ACORSOM2 Giacomo Tedesco PA 2M4 Ugo Rossi MO 2M5 Sara Neri MO 2Proiezione : Operatore π♦ Data una <strong>relazione</strong> r con schema X e un insieme <strong>di</strong> attributi Y ⊆X, il risultato dell’operazione <strong>di</strong> proiezione π Y (r) è una <strong>relazione</strong>con schema Y definita dall’insieme <strong>di</strong> sottotuple <strong>di</strong> r ottenuteconsiderando solo i valori su Y:π Y (r) ={t[Y ] | t∈r}Es. “Città e anno <strong>di</strong> corso degli studenti”π CITTÀ,ACORSO (STUDENTE )CITTÀ ACORSOSA 1PA 2BO 1MO 2


Es. “Città degli studenti del secondo anno <strong>di</strong> corso”π CITTÀ (σ ACORSO=2 (STUDENTE ))CITTÀPAMO


Operatori BinariUnione : Operatore ∪♦ Date due relazioni r e s con lo stesso schema X, il risultato dell’operazione<strong>di</strong> unione r ∪ s è una <strong>relazione</strong> che ha come schemaX ed è definita dall’unione delle tuple <strong>di</strong> r con le tuple <strong>di</strong> sEs. “Città <strong>di</strong> studenti o docenti”r ∪ s = {t | t∈r ∨ t∈s}π CITTÀ (STUDENTE) ∪ π CITTÀ (DOCENTE)Differenza : Operatore −♦ Date due relazioni r e s con lo stesso schema X, l’operazione<strong>di</strong> <strong>di</strong>fferenza r − s è una <strong>relazione</strong> che ha come schema X ed èdefinita dalla <strong>di</strong>fferenza tra le tuple <strong>di</strong> r e quelle <strong>di</strong> sr − s = {t | t∈r ∧ t∉s}Es. “Città <strong>di</strong> studenti ma non <strong>di</strong> docenti”π CITTÀ (STUDENTE) − π CITTÀ (DOCENTE)Intersezione : Operatore ∩♦ L’operatore <strong>di</strong> intersezione ∩ è un operatore derivato definitocomer ∩ s = r − (r − s) ={t | t∈r ∧ t∉(r − s)} = {t | t∈r ∧ t∈s}Es. “Città <strong>di</strong> studenti e <strong>di</strong> docenti”π CITTÀ (STUDENTE) ∩ π CITTÀ (DOCENTE)


Prodotto Cartesiano e JoinProdotto Cartesiano : Operatore ×♦ Date due relazioni r e s con schema R(X) e S(Y ), il risultatodell’operazione <strong>di</strong> prodotto cartesiano r × s è una <strong>relazione</strong> cheha come schema R.X ∪ S.Y ed è definita dall’insieme <strong>di</strong> tupler × s = {t | t = t R t S : t R ∈ r ∧ t S ∈s}dove t R t S in<strong>di</strong>ca la concatenazione della tupla t R e della tupla t S .• Nello schema del prodotto cartesiano R.X ∪ S.Y , un attributo Ache è solo in R.X (S.Y ) può essere in<strong>di</strong>cato semplicemente conA.Theta-Join : Operatore ✶ F♦ L’operazione <strong>di</strong> join serve per combinare tuple prese da due opiù relazioni sulla base <strong>di</strong> con<strong>di</strong>zioni espresse sugli attributi delletuple.♦ Il Theta-join tra r e s definisce un sottoinsieme del prodotto cartesianor × s ottenuto tramite una operazione <strong>di</strong> selezione.♦ Date due relazioni r e s con schema R(X) e S(Y ), e un pre<strong>di</strong>cato<strong>di</strong> join F costituito da una espressione booleana <strong>di</strong> pre<strong>di</strong>cati <strong>di</strong>confronto AΘB, dove A ∈ X, B ∈ Y e Θ è un operatore <strong>di</strong>confronto, il Theta-join tra r e s è definito comer ✶ F s = σ F (r × s)♦ EquijoinI pre<strong>di</strong>cati <strong>di</strong> confronto sono esclusivamente pre<strong>di</strong>cati <strong>di</strong> uguaglianzaNaturaljoin : Operatore ✶


♦ Date due relazioni r e s con schemi R(X) e S(Y ), il naturaljoin(o join naturale) tra r e s, in<strong>di</strong>cato con r ✶ s, è il risultato dell’equijointra r e s su tutti gli attributi comuni a X e Y proiettatosull’unione degli attributi dei due schemi (XY )r ✶ s = π X∪Y (r ✶ ∧ iAi ∈X∩Y (R.A i=S.A i ) s)


SemiJoin e OuterJoinSemijoin : Operatore ⋉♦ Date due relazioni r e s con schemi R(X) e S(Y ) il semijoin da sa r, in<strong>di</strong>cato con r ⋉ s è la proiezione su X del join naturale <strong>di</strong> re sr ⋉ s = π X (r ✶ s)♦ Si può verificare che r ⋉ s = r ✶ (π X∩Y s)OuterJoin :♦ Il risultato <strong>di</strong> un join r ✶ s comprende solo le tuple t R <strong>di</strong> r (t S <strong>di</strong> s)che possono essere messe in corrispondenza, in base al pre<strong>di</strong>cato<strong>di</strong> join, con una tupla t S <strong>di</strong> s (t R <strong>di</strong> r).Una tupla t R <strong>di</strong> r (t S <strong>di</strong> s) che non partecipa a tale corrispondenza,e che quin<strong>di</strong> non contribuisce al join, è detta dangling.Più precisamente, una tupla t R <strong>di</strong> r è detta dangling se non esistet ∈ r ✶ s tale che t[X] =t R (stessa cosa per t S <strong>di</strong> s).♦ Gli operatori <strong>di</strong> OuterJoin servono per includere nel risultato deljoin anche le tuple dangling: tale tuple sono concatenate con tuplecomposte da valori nullileft-outerjoin : r =✶ scomprende le tuple dangling t R <strong>di</strong> rright-outerjoin : r ✶= scomprende le tuple dangling t S <strong>di</strong> sfull-outerjoin : r =✶= scomprende sia le tuple dangling t R <strong>di</strong> r che le tuple dangling t S<strong>di</strong> s


Esempi <strong>di</strong> JoinEs. “Studenti e docenti della stessa città”STUDENTE ✶ STUDENTE.CITTÀ=DOCENTE.CITTÀ DOCENTEMATRNOMESTUDENTE.CITTÀACORSO CODICE CFM3 Maria Mei BO 1 D2 CF2 BOM4 Ugo Rossi MO 2 D1 CF1 MOM4 Ugo Rossi MO 2 D3 CF3 MOM5 Sara Neri MO 2 D1 CF1 MOM5 Sara Neri MO 2 D3 CF3 MOOppure, usando il join naturaleSTUDENTE ✶ DOCENTEMATR NOME CITTÀ ACORSO CODICE CFM3 Maria Mei BO 1 D2 CF2M4 Ugo Rossi MO 2 D1 CF1M4 Ugo Rossi MO 2 D3 CF3M5 Sara Neri MO 2 D1 CF1M5 Sara Neri MO 2 D3 CF3DOCENTE.CITTÀEs. “Studenti che frequentano i corsi (almeno uno) del docente D2”FREQUENZA ✶ σ CODDOC=D2 (CORSO )MATR CODCOR NOME CODDOCM2 C2 Analisi Matematica 1 D2M3 C2 Analisi Matematica 1 D2M3 C4 Analisi Matematica 2 D2La <strong>relazione</strong> risultante contiene solo la matricola degli studenti; perottenere tutto lo schema della <strong>relazione</strong> STUDENTE:STUDENTE ✶ π MATR (FREQUENZA ✶ (σ CODDOC=D2 (CORSO )))oppureSTUDENTE ⋉ (FREQUENZA ✶ σ CODICE= ′ D1 ′ (CORSO ))MATR NOME CITTÀ ACORSOM2 Giacomo Tedesco PA 2M3 Maria Mei BO 1


Divisione♦ Informalmente, date due relazioni r e s, l’operazione <strong>di</strong> <strong>di</strong>visione trar (<strong>di</strong>videndo)es (<strong>di</strong>visore), in<strong>di</strong>cata con r÷s, serve per in<strong>di</strong>viduarele tuple <strong>di</strong> r associate a tutte le tuple <strong>di</strong> s♦ Date due relazioni r e s con schemi R(X) e S(Y ) tali che Y ⊂X, l’operazione <strong>di</strong> <strong>di</strong>visione tra r e s , r÷s, ha come risultato una<strong>relazione</strong> che ha schema (X − Y ) ed è definita dar÷s = {t D |∀t S ∈ s, t D t S ∈ r}Es. “Studenti che frequentano tutti i corsi del docente D1”FREQUENZA÷ π CODCOR (σ CODDOC= ′ D1 ′ (CORSO ) )MATRM1M1M2M2M3M3M3M3CODCORC1C3C1C2C1C2C3C4CODCORC1C3♦ L’operatore <strong>di</strong>visione ÷ può essere derivato dagli operatori <strong>di</strong> base:r÷s = π X−Y (r) − π X−Y ((π X−Y (r) × s) − r)Verifichiamo tale equivalenza sull’esempio precedente:π X−Y (r) × s(π X−Y (r) × s) − rπ X−Y ((π X−Y (r) × s) − r)MATRM1M1M2M2M3M3CODCORC1C3C1C3C1C3MATRM2CODCORC3MATRM2π X−Y (r)−π X−Y ((π X−Y (r) × s) − r)MATRM1M3


EsercizioConsideriamo il seguente schema relazionaleAUTO(CODAUTO,COSTRUTTORE)ACCESSORIO(CODACC,DESCRIZIONE)INSTALLABILE(CODAUTO,ANNOPROD,CODACC)FK: CODAUTO REFERENCES AUTOFK: CODACC REFERENCES ACCESSORIOL’accessorio CODACC è installabile sull’auto CODAUTO prodottanell’anno ANNOPROD.e una sua istanza:AUTOCODAUTO COSTRUTTORETipo FiatUno FiatFiesta FordEscort FordACCESSORIOCODAUTO DESCRIZIONEPSci9 PortaSciFNeb11 FariAntiNebbiaVSport32 VolanteSportivoRLega16 RuoteInLegaINSTALLABILECODAUTO ANNOPROD CODACCTipo 1989 PSci9Tipo 1990 FNeb11Fiesta 1990 PSci9Uno 1989 VSport32Uno 1989 PSci9Uno 1990 PSci9Uno 1991 FNeb11Escort 1991 PSci9Escort 1992 RLega16a) selezionare i dati relativi agli accessori installabili su almeno un’auto’Fiat’;Per determinare il co<strong>di</strong>ce degli accessori installabili su almeno un’auto’Fiat’ occorre fare il join naturale tra la <strong>relazione</strong> INSTALLABILE ela <strong>relazione</strong> AUTO ristretta con la con<strong>di</strong>zione COSTRUTTORE=’Fiat’.(INSTALLABILE ✶ σ COSTRUTTORE= ′ Fiat ′ (AUTO ) )CODAUTO ANNOPROD CODACC COSTRUTTORETipo 1989 PSci9 FiatTipo 1990 FNeb11 FiatUno 1989 VSport32 FiatUno 1989 PSci9 FiatUno 1990 PSci9 FiatUno 1991 FNeb11 FiatIn tale join c‘è solo il co<strong>di</strong>ce degli accessori: per ottenere i dati (cioètutti gli attributi) relativi a tali accessori, possiamo scrivere


ACCESSORIO✶(π CODACC (INSTALLABILE✶σ COSTRUTTORE= ′ Fiat ′ (AUTO)))oppure, in modo più sintetico, utilizzando l’operatore <strong>di</strong> semijoinACCESSORIO⋉(INSTALLABILE✶σ COSTRUTTORE= ′ Fiat ′(AUTO))b) selezionare i dati relativi agli accessori che non sono installabili sunessuna auto ’Fiat’;Gli accessori che non sono installabili su nessuna auto ’Fiat’ si ottengonosottraendo dall’insieme <strong>di</strong> tutti gli accessori quelli installabili sualmeno un’auto ’Fiat’, ricavati in precedenza:ACCESSORIO − ACCESSORIO⋉(INSTALLABILE✶σ COSTRUTTORE= ′ Fiat ′(AUTO))La <strong>di</strong>fferenza tra i due insiemi <strong>di</strong> tuple della <strong>relazione</strong> ACCESSORIpuò essere fatta considerando solo la chiave <strong>di</strong> tale <strong>relazione</strong>, CODACC:π CODACC (ACCESSORIO )CODACCPSci9FNeb11VSport32RLega16π CODACC ((INSTALLABILE ✶σ COSTRUTTORE= ′ Fiat ′ (AUTO ) ))CODACCPSci9FNeb11VSport32però a questo punto occorre fare ancora una operazione <strong>di</strong> join perricavare tutti gli attributi della <strong>relazione</strong> ACCESSORI:ACCESSORIO✶(π CODACC (ACCESSORIO) −π CODACC (INSTALLABILE✶σ COSTRUTTORE= ′ Fiat ′ (AUTO)))♦ Si noti che l’interrogazione b) non può essere risolta con un semplicejoin.In particolare, con il seguente join:(INSTALLABILE ✶ σ COSTRUTTORE ′ Fiat ′ (AUTO ) )CODAUTO ANNOPROD CODACC COSTRUTTOREFiesta 1990 PSci9 FordEscort 1991 PSci9 FordEscort 1992 RLega16 Fordsi ottengono i co<strong>di</strong>ci degli accessori installabili su almeno un autonon ’Fiat’;


c) selezionare i dati relativi agli accessori installabili su tutte le auto’Fiat’;Questa interrogazione si risolve con un‘operazione <strong>di</strong> <strong>di</strong>visione, in cuiil <strong>di</strong>visore è costituito dal co<strong>di</strong>ce delle auto ’Fiat’:π CODAUTO (σ COSTRUTTORE= ′ Fiat ′(AUTO))Per quanto riguarda il <strong>di</strong>videndo, occorre far riferimento all’installabilità<strong>di</strong> un accessorio su un auto, in<strong>di</strong>pendentemente dall’anno <strong>di</strong>produzioneQuin<strong>di</strong>, in definitivaπ CODACC,CODAUTO (INSTALLABILE )CODACCPSci9FNeb11PSci9VSport32PSci9FNeb11PSci9RLega16CODAUTOTipoTipoFiestaUnoUnoUnoEscortEscortπ CODACC,CODAUTO (INSTALLABILE)÷ π CODAUTO (σ COSTRUTTORE= ′ Fiat ′ (AUTO ) )CODAUTOTipoUnoLo schema risultante <strong>di</strong> tale <strong>di</strong>visione è CODACC: per ottenere i datidello schema <strong>di</strong> ACCESSORI occorre fare il join con tale <strong>relazione</strong>:ACCESSORIO✶(π CODACC,CODAUTO (INSTALLABILE) ÷π CODAUTO (σ COSTRUTTORE= ′ Fiat ′ (AUTO)))♦ Si noti che se si considerasse come <strong>di</strong>videndo tutta la <strong>relazione</strong> INSTALLABIINSTALLABILECODAUTO ANNOPROD CODACCTipo 1989 PSci9Tipo 1990 FNeb11Fiesta 1990 PSci9Uno 1989 VSport32Uno 1989 PSci9Uno 1990 PSci9Uno 1991 FNeb11Escort 1991 PSci9Escort 1992 RLega16÷ π CODAUTO (σ COSTRUTTORE= ′ Fiat ′ (AUTO ) )CODAUTOTipoUnosi otterrebbero i dati relativi agli accessori che nello stesso anno <strong>di</strong>produzione sono installabili su tutte le auto ’Fiat’.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!