• Non ci sono risultati.

Vincoli Interrelazionali

N/A
N/A
Protected

Academic year: 2023

Condividi "Vincoli Interrelazionali"

Copied!
17
0
0

Testo completo

(1)

Vincoli Interrelazionali

Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito.

In caso di vincoli di integrità referenziale, quando la violazione avviene per un cambiamento apportato alla tabella esterna, si hanno diverse possibili reazioni associabili al comando di aggiornamento che causa l’inconsistenza.

Modifica (

comando

update):

cascade il nuovo valore dell’attributo della tabella esterna viene riportato su tutte le corrispondenti righe della tabella interna.

set null all’attributo referente viene assegnato il valore nullo.

set default all’attributo referente viene assegnato il valore di default.

no action la modifica non viene consentita.

(2)

Vincoli Interrelazionali

Cancellazione (

comando

delete):

cascade

tutte le corrispondenti righe della tabella interna vengono cancellate.

set null

all’attributo referente viene assegnato il valore nullo.

set default

all’attributo referente viene assegnato il valore di default.

no action

la cancellazione non viene consentita.

Per applicare una delle politiche:

on < delete | update >

< cascade|set null|set default|no action >

subito dopo la specifica del riferimento

(3)

Modifica degli schemi

E’ possibile modificare gli schemi con i comandi

alter

e drop.

alter

consente di modificare domini e schemi di tabelle.

alter domain NomeDominio

< set default ValDefault | drop default |

add constraint DefVincolo |

drop constraint NomeVincolo >

(4)

Modifica degli schemi

alter table NomeTabella <

alter column NomeAttributo

< set default NuovoDefault | drop default >|

add constraint DefVincolo |

drop constraint NomeVincolo | add column NomeAttributo |

drop column NomeAttributo >

NB Quando si inserisce un nuovo vincolo, questo deve essere soddisfatto dai dati già presenti

(5)

Modifica degli Schemi

Il comando

drop

permette di rimuovere dei componenti

drop < schema | domain | table | view | assertion > NomeElemento

[ restrict | cascade ]

restrict

specifica di non eseguire il comando in presenza di oggetti non vuoti.

cascade

implica che gli oggetti specificati siano rimossi.

Inoltre vengono rimossi tutti gli oggetti da essi dipendenti.

Quindi, ATTENZIONE!!!!

(6)

Interrogazioni

Le interrogazioni in SQL sono formulate in modo

dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere.

L’interrogazione viene passata all’ottimizzatore di

interrogazioni (query optimizer) che fa parte del DBMS.

Questo la analizza e la traduce nel linguaggio di interrogazione interno al DBMS.

Per questo chi programma in SQL deve cercare di scrivere codice leggibile e facilmente modificabile, piuttosto che efficiente.

(7)

Interrogazioni

L’istruzione base per le interrogazioni è

select select ListaAttributi (target list)

from ListaTabelle

(clausola from)

[ where Condizione ] (clausola where)

Più in dettaglio:

select AttrEspr [[as] Alias]{,AttrEspr [[as] Alias]}

from Tabella [[as] Alias]{,Tabella [[as] Alias]}

[ where Condizione ]

Seleziona le righe che soddisfano la condizione where fra quelle appartenenti al prodotto cartesiano delle tabelle in ListaTabelle.

Ogni colonna (tabella) può essere ridenominata con un alias.

(8)

Interrogazioni

Es.

Data una base di dati che contiene le tabelle:

IMPIEGATO (Nome, Cognome, Dipart, Ufficio, Stipendio, Città)

DIPARTIMENTO (Nome, Indirizzo,Città)

select Stipendio/12 as SalarioMensile from Impiegato

where Cognome = `Rossi`

Il risultato è una tabella con una colonna rinominata

SalarioMensile e tante righe quanti sono gli impiegati che si chiamano Rossi.

Se si usa * dopo select si selezionano tutti gli attributi

(9)

Nome Età Persone

Reddito Andrea 27

Maria 55 Anna 50 Filippo 26 Luigi 50 Franco 60 Olga 30 Sergio 85 Luisa 75 Aldo 25

21 42 35 30 40 20 41 35 87 15 Madre

Maternità Figlio Luisa

Anna Anna Maria Maria Luisa

Maria Olga Filippo Andrea

Aldo Luigi

Padre

Paternità Figlio Luigi

Luigi Franco Franco Sergio

Olga Filippo Andrea

Aldo

Franco

(10)

Selezione e proiezione

Nome e reddito delle persone con meno di trenta anni PROJNome, Reddito(SELEta<30(Persone))

select nome, reddito from persone

where eta < 30

select p.nome as nome, p.reddito as reddito from persone as p

where p.eta < 30

(11)

Interrogazioni su più tabelle

Se si vogliono estrarre informazioni da più tabelle, si pone come argomento della clausola from la lista delle tabelle.

Se si deve formulare un join, è possibile farlo esplicitando il collegamento fra le due tabelle nella clausola where.

Es.

Estrarre i nomi degli impiegati e le città dove lavorano.

select Impiegato.Nome,Impiegato.Cognome, Dipartimento.Città

from Impiegato, Dipartimento

where Impiegato.Dipart = Dipartimento.Nome

Attenzione: specificare una lista di tabelle nella clausola from senza specificare anche una condizione di join nella clausola where

equivale ad eseguire la query sul prodotto cartesiano delle tabelle riportate nella lista!

(12)

Interrogazioni su più tabelle

E’ possibile omettere il nome della tabella per quegli attributi che non presentano ambiguità.

select Impiegato.Nome, Cognome, Dipartimento.Città from Impiegato, Dipartimento

where Dipart = Dipartimento.Nome

e abbreviare ulteriormente il codice utilizzando gli alias select I.Nome, Cognome, D.Città

from Impiegato as I, Dipartimento as D where Dipart = D.Nome

(13)

Clausola where

Ammette come argomento una condizione logica.

Gli operatori ammessi per i predicati semplici (confronto attributo- costante o attributo-espressione) sono

=, <>, <, >, <=, >=

I predicati semplici possono essere modificati tramite gli operatori logici and, or, not.

not ha precedenza su and e or, ma non è definita la

precedenza fra and e or. Quando si coordinano più predicati con and e or è bene esplicitare le precedenze con le parentesi.

Es.

select Nome

from Impiegato

where Cognome = ‘Rossi’ and

(Dipart = ‘Amministraz’ or Dipart = ‘Produz’)

(14)

Operatore like

Per i confronti fra stringhe è definito anche l’operatore like.

Il confronto è effettuato con una stringa che può contenere i caratteri speciali % e _ .

_ rappresenta un carattere arbitrario

% rappresenta in numero arbitrario di caratteri (anche zero).

Es.

select *

from Impiegato

where Cognome like ‘_o%i’

La condizione è soddisfatta da Rossi Borroni Poli Pollastri ecc.

(15)

Gestione dei valori nulli

La gestione dei valori nulli, a seconda dell’implementazione, avviene attraverso una logica a due valori come nell’SQL-89, o a tre valori (vero, falso, unknown) come nell’SQL-2.

Le condizioni sui valori nulli possono essere definite

attraverso i predicati

is null

o

is not null

.

(16)

Interpretazione algebrica delle interrogazioni

E’ possibile mettere in corrispondenza interrogazioni SQL ed espressioni equivalenti in algebra relazionale.

Es.

select T1.Attributo11, … Th.Attributohm from Tabella1 as T1, . Tabellah as Th

where Condizione equivale a

T1.Attributo11.... Th.AttributohmCondizione (Tabella1 x Tabella2 x .

x Tabellah) )

Espressioni più complicate hanno comunque una traduzione, anche se non così diretta.

(17)

Duplicati

L’algebra relazionale non ammette duplicati, SQL li ammette.

Quindi

select Città from Persona

where Cognome= ‘Rossi’

estrae una lista di città in cui una città può comparire più volte.

Per evitare i duplicati SQL prevede la parola chiave

distinct

da inserire subito dopo select.

select distinct Città from Persona

where Cognome= ‘Rossi’

Riferimenti

Documenti correlati

In 2016 the European Commission published its Road Transport Strategy for Europe, and the Florence Road Forum brought together the most relevant stakeholders and experts to

Branch, Ann P., 2002, The Impact of the European Union on the Trade Union Movement, in Richard Balme and Didier Chabanet eds., L’action collective en Europe, Paris, Presses de

Given the central place of the distinction between procedural and substantive in the development of the English courts’ jurisprudence on legitimate expectations, it

In 2014 China became also a net foreign investor, after years of being one of the leading recipients of FDI. The country is an international lender and perhaps the only one

Nonostante il Giappone sia stato solitamente visto e descritto come un paese che rifugge il contrasto e cerca di evitare le controversie (o la loro risoluzione

The estimates from the model of large long-run trade gains from regulatory harmonization, significantly larger than from tariff reductions, therefore may be more delayed

Essays on Reason and Politics, Cambridge: MIT Press Boyd, Richard 1999, The Unsteady and Precarious Constitution of Individuals, 61 Reviewof Politics, 465-491 Bronckers, Mario

While under the EU Blue Card only the very highly qualified receive permanent work and residence permits upon arrival in Germany, all other Blue Card holders receive a