SQL: Lezione 7 Nataliya Rassadko

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
DB - Modello relazionale dei dati
Structured Query Language
SQL applicato a SQL Server
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Sistemi per il recupero delle informazioni
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Basi di Dati prof. A. Longheu
SCUOLA INTERUNIVERSITARIA SICILIANA DI SPECIALIZZAZIONE PER LINSEGNAMENTO SECONDARIO Classe di Concorso: 42A Massimo Mancino MODULO DIDATTICO - Ambienti.
SQL.
SQL Dati i seguenti schemi relazionali:
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Corso di Informatica (Basi di Dati)
SQL per la modifica di basi di dati. 29/01/2014SQL per la modifica di basi di dati2 Data Manipulation Language Introduciamo ora il Data Manipulation Language.
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
Basi di dati Università Degli Studi Parthenope di Napoli
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL: Lezione 6 Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 8 Nataliya Rassadko
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Esercitazione.
Equivalenza di espressioni
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
SQL SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language (linguaggio di interrogazione strutturato) E’ un linguaggio.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
sql: esempi di linguaggio sql nell'implementazione mysql
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
Sistemi Informativi Insieme di “strutture” in grado di acquisire, elaborare, trasmettere ed archiviare informazioni in genere ad uso di un’organizzazione.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
SQL (IV) Data Definition Language/ Data Manipulation Language.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Microsoft Access Query (III).
Interrogazioni (parte 2)
SQL (III) Data Definition Language/ Data Manipulation Language.
MySQL Database Management System
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
SCHEDA INFORMATIVA DI UNITÀ. PROGETTAZIONE DI UN DATABASE Identificazione delle informazioni salienti Definizione di relazioni fra i dati.
1 Vincoli Ci sono i vincoli predefiniti ( unique, primary key, not null, foreign key … ) In SQL2 si ha anche check check Condizione Serve per dare condizioni.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste.
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
© 2015 Giorgio Porcu - Aggiornamennto 28/03/2015 UdA 1A Database Progettazione Fisica G IORGIO P ORCU
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Transcript della presentazione:

SQL: Lezione 7 Nataliya Rassadko

Agenda User-defined domini DEFAULT Vincoli intra-relazionali NOT NULL, UNIQUE, PRIMARY KEY Vincoli sui valori delle tuple Vincoli inter-relazionali Integrità referenziale Vincoli generici Modifica degli schemi ALTER, DROP Viste, Indici, Asserzioni

DEFINIZIONE DEI DOMINI Nella definizione delle tabelle si può far riferimento ai domini predefiniti del linguaggio o a domini definiti dallutente a partire dai domini predefiniti. Definiscono i valori accetabili 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.

DEFINIZIONE DEI DOMINI Non si possono creare array o strutture poiché il modello relazionale impone attributi definiti su un dominio elementare. E però possibile associare dei vincoli ad un dominio definito dallutente. Se si modifica la definizione di un dominio, la modifica si propaga a tutte le tabelle.

DEFINIZIONE DEI DOMINI La sintassi per la creazione di nuovi domini è la seguente: CREATE DOMAIN NomeDominio AS TipoDiDominioElementare [ValorePredefinito] [Vincoli]

DEFINIZIONE DEI DOMINI Un dominio è caratterizzato: dal proprio nome, da un dominio elementare (che può essere predefinito o definito in precedenza dallutente), da un eventuale valore di default, e infine da un insieme di vincoli (eventualmente vuoto) che rappresenta un insieme di condizioni che devono rispettare i valori del dominio

ESERCIZIO Creare un dominio che permetta di assegnare ad un attributo un valore intero, non nullo, compreso tra 18 e 30 Altri domini CREATE DOMAIN Voto AS SMALLINT NOT NULL CHECK ( value >=18 AND value <= 30 ) CREATE DOMAIN NumberOfChildren AS SMALLINT Default 0 CREATE DOMAIN persons_name CHAR(30) CREATE DOMAIN street_address CHAR(35)

VALORI PREDEFINITI Specifica il valore che deve assumere lattributo quando viene inserita una riga nella tabella senza che sia specificato un valore per lattributo stesso Quando il valore di default non è specificato, si assume come default il valore Null. La sintassi per la specifica dei valori di default è: default (GenericoValore | user| null)

VALORI DEFAULT GenericoValore rappresenta un valore compatibile con il dominio, rappresentato direttamente come valore costante o, più in generale, ottenuto come risultato della valutazione di un espressione. Lopzione user impone come valore di default lidentificativo dellutente (login) che esegue il comando di aggiornamento della tabella. Lopzione null corrisponde al valore di default di base.

VINCOLI Sia nella definizione di domini che nella definizione delle tabelle è possibile definire dei vicoli. Delle proprietà che devono essere verificate da ogni istanza della base di dati. I vincoli si dividono in due categorie: vincoli intrarelazionali (che coinvolgono una sola tabella) e vincoli interrelazionali (in cui il predicato considera diverse relazioni)

VINCOLI INTRARELAZIONALI I più semplici vincoli di tipo intrarelazionale sono i vincoli NOT NULL, Unique, Primary Key.

NOT NULL Il vincolo NOT NULL indica che il valore nullo non è ammesso come valore per quel specifico attributo. Quando viene assegnato questo vincolo, lattributo deve essere sempre specificato, tipicamente in fase di inserimento. Se allattributo è però associato un valore di default diverso dal valore nullo, allora diventa possibile effettuare linserimento di una riga per la tabella senza fornire un valore per lattributo.

NOT NULL: Esempio Il vincolo viene specificato facendo seguire alla definizione dellattributo le parole chiave NOT NULL : MovieTitle VARCHAR(50) NOT NULL;

UNIQUE Un vincolo UNIQUE si applica ad un attributo o un insieme di attributi. Impone che i valore dellattributo siano una (super)chiave: cioè righe differenti della tabella non possano avere gli stesi valori. Viene fatta uneccezione per il valore NULL, il quale può comparire su diverse righe senza violare il vincolo. Si assume che i valori NULL siano tutti i diversi tra loro.

UNIQUE La definizione di questo vincolo può avvenire in due modi La prima alternativa può essere usata unicamente quando bisogna definire il vincolo su un solo attributo. Si fa seguire la specifica dellattributo dalla parola chiave unique: StudioName VARCHAR(50) NOT NULL UNIQUE;

UNIQUE La seconda alternativa è invece necessaria quando bisogna definire il vincolo per un insieme di attributi. Dopo aver definito gli attributi della tabella, si usa la seguente espressione Un esempio duso della sintassi è il seguente: Unique (Attributo {,Attributo}) Nome character(20) not null Cognome character(20) not null Unique (Cognome,Nome)

UNIQUE Si noti che la precedente definizine è ben diversa da una definizione come: Nel primo caso si impone che non ci siano due righe che abbiano uguali sia il nome che il cognome, nel secondo si ha una violazione se nelle righe compaiono due volte lo stesso nome o lo stesso cognome. Nome character(20) not null Unique Cognome character(20) not null Unique

PRIMARY KEY SQL permette di specificare il vincolo primary key una sola volta per ogni tabella. E possibile utilizzare un numero arbitrario di volte i vincoli unique e not null. Come per il vincolo unique, il vincolo primary key può essere definito direttamente su di un singolo attributo, oppure essere definito elencando più attributi che costituiscono lidentificatore.

PRIMARY KEY Gli attributi che fanno parte della chiave primaria non possono assumere il valore nullo. La definizione di una primary key implica per tutti gli attributi della chiave primaria una definizione di not null, che può quindi essere omessa.

PRIMARY KEY La definizione impone che la coppia di attributi Nome e Cognome costituiscano la chiave primaria. Nome character(20) Cognome character(20) Dipart character(16) Stipendio numeric(9) default 0, Primary Key (Cognome,Nome)

VINCOLI INTRARELAZIONALI Contd Un vincolo è intrarelazionale se il suo soddisfacimento è definito rispetto singole relazioni della base di dati. È un vincolo che può essere valutato su ciascuna tupla indipendententemente dalle altre. Esistono due categorie principali: Vincoli di tupla Vincoli di valore

VINCOLI DI VALORE Un vincolo definito con riferimento a singoli valori viene detto vincolo su valori o vincolo di dominio in quanto impone una restrizione sul dominio dell'attributo. Un esempio è il vincolo not null, usato per dichiarare che un dato attributo non può assumere il valore nullo. Solitamente questo attributo viene corredato da un valore di default, che viene assegnato automaticamente all'atto della creazione di una nuova tupla

VINCOLI DI VALORE e TUPLA Il primo vincolo (vincolo di valore in quanto coinvolge un solo attributo) indica che lattributo VOTO può assumere solo valori compresi tra 18 e 20. Il secondo vincolo indica che è amissibile la lode solo se il voto è pari a 30. (Voto >= 18) AND (Voto <= 30) (NOT (Lode = lode) AND (Voto = 30)

VINCOLI DI TUPLA I vincoli di tupla ammettono anche espressioni piu complesse, purchè definite sui valori delle singole tuple. Ad esempio, su una relazione E possibile definire il vincolo che impone, che il netto sia pari alla differenza fra limporto originario e le ritenute PAGAMENTI(Data,Importo,Ritenute,Netto) Netto=Import-Ritenute

ESERCIZIO Ricreare, allinterno dello schema work, le tabelle presenti allinterno dello scema imdb, fissando i vincoli necessari. (Cancellare e ricreare la tabella Movie (nel db di prova) appena creata: Per cancellare una tabella DROP nome_tabella )

VINCOLI INTERRELAZIONALI I più diffusi e significativi sono i vincoli di INTEGRITA REFERENZIALE. In SQL per la loro definizione si usa lapposito vincolo di FOREIGN KEY (chiave esterna) Crea un legame tra i valori di un attributo della tabella corrente (interna) e i valori di un altra tabella (esterna)

INTEGRITA REFERENZIALE Il vincolo impone che per ogni riga della tabella il valore dellattributo specificato, se diverso dal valore nullo, sia presente nelle righe della tabella esterna tra i valori del corrispondente attributo MovieExec Studio nameaddresscert# Kubrick 45 ave.3565 ……… namepresC# Paramount Pictures3565 …… MovieExecStudio

INTEGRITA REFERENZIALE ESEMPIO: E possibile forzare il db a controllare che per ogni valore di presC# nella relazione Studio, ci sia una righa con lo stesso valore per lattributo cert# nella relazione MovieExec Il Db blocchera tutti i tentativi di inserimento di una riga in Studio con un presidente unknown

INTEGRITA REFERENZIALE In SQL e possibile dichiarare un attributo (o piu) di una relazione ( R1 ) come una foreign key, riferendosi agli attributi di una altra relazione ( R2 ), cosi che: Lattributo di R2 riferito deve essere dichiarato come UNIQUE o come PRIMARY KEY. I valori per la chave esterna che appaiono in R1 devono apparire anche negli attributi di riferimento nella tabella R2

INTEGRITA REFERENZIALE In modo simile al caso delle Primary Keys, le Foreign Keys possono essere definite nellistruzione CREATE TABLE in uno dei seguenti modi: CREATE TABLE nome_table {attributo1 attributo2 attributoN REFERENCES Tabella Esterna (attributo") } CREATE TABLE nome_table {attributo1 attributo2 attributoN foreign key (attributo1, attributo2) REFERENCES Tabella Esterna (lista attributi)}

INTEGRITA REFERENZIALE Per gli altri vincoli visti fino ad ora, si assume che quando il sistema rileva una violazione, il comando di aggiornamento venga rifiutato, segnalando lerrore allutente. Per i vincoli di integrità referenziale invece è possibile scegliere le azioni da adottare quando viene rilevata una violazione.

INTEGRITA REFERENZIALE In particolare, per le operazioni di modifica, è possibile reagire in uno dei seguenti modi: Cascade: il nuovo valore dellattributo della tabella esterna viene riportato su tutte le corrispondenti righe della tabella interna Set null: allattributo referente viene assegnato il valore nullo al posto del valore modificato nella tabella esterna. Set default: allattributo referente viene assegnato il valore di default al posto del valore modificato nella tabella esterna No action: lazione di modifica non viene consentita, senza che il sistema provi a riparare la violazione.

INTEGRITA REFERENZIALE In particolare, per le operazioni di cancellazione, è possibile reagiere in uno dei seguenti modi: Cascade: tutte le righe della tabella interna corrispondenti alla riga cancellata vengono cancellate. Set null: allattributo referente viene assegnato il valore nullo al posto del valore cancellato nella tabella esterna. Set default: allattributo referente viene assegnato il valore di default al posto del valore cancellato nella tabella esterna. No action: la cancellazione non viene consentita.

INTEGRITA REFERENZIALE Le politiche possono essere definite, in maniera indipendente per cancellazione e modifica Le politiche da adottare sono definite durante la dichiarazione della chiave esterna sulla cancellazione o sullaggiornamento. CREATE TABLE "Studio" ( "name" CHAR(30) PRIMARY KEY, "address" VARCHAR(255), "presC#" INT REFERENCES "MovieExec"("cert#") ON DELETE SET NULL ON UPDATE CASCADE );

VINCOLI GENERICI La clausola check permette di specificare dei nuovi vincoli sulle tabelle rispetto a quelli fino ad ora visti. Le condizioni che si possono essere applicate con il vincolo CHECK sono le stesse che possono apparire come clausola where di un interrogazione SQL. Check (Condizione)

CHECK La condizione deve essere sempre verificata affinchè la base di dati sia corretta. E possibile definire un vincolo sul valore di un attributo specificando una numerazione legale, una condizione aritmetica o una subquery. "netWorth" INT CHECK ("netWorth">=100000)

CHECK E possibile definire un vincolo sulla riga : Ogni volta che una riga e inserita o modifcata, viene controllato che il vincolo sia rispettato dalla nuova riga inserita. Se il vincolo non e rispettato linserimento viene rifiutato. CREATE TABLE nameTable"( att1" tipo vincolo, att2 tipo vincolo, … CHECK (condizione sulla riga));

ESERCIZIO Ridefinire lo schema MovieStar imponendo che il nome dellattore non abbia il prefisso Ms. se il sesso è diverso da F. CREATE TABLE "MovieStar"( "name" CHAR(30) PRIMARY KEY, "address" VARCHAR(255), "gender" char(1), "birthday" DATE, CHECK ("gender"='F' OR "name" NOT LIKE 'Ms.%')); Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

ESERCIZIO Ridefinire lo schema Movie imponendo che lattributo inColor non possa valere true se lanno di produzione del film è minore di Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) CREATE TABLE "Movie"( title VARCHAR(255) PRIMARY KEY, year INT PRIMARY KEY, … … CHECK (year"<1940' OR inCOLOR" NOT LIKE true'));

VINCOLI E possibile definire un nome per i vincoli E possibile aggiungere dei vincoli ad uno schema gia definito "name" CHAR(30) CONSTRAINT "NameIsKey" PRIMARY KEY CONSTRAINT "RightTitle" CHECK ("gender"='F' OR "name" NOT LIKE 'Ms.%')); ALTER TABLE imdb."MovieStar" ADD CONSTRAINT "NameIsKey" PRIMARY KEY("name");

MODIFICA DEGLI SCHEMI SQL fornisce primitive per la manipolazione degli schemi delle basi di dati. Queste primitive permettono di modificare le definizioni di tabelle precedentemente introdotte. I comandi che vengono utilizzati a questo fine sono ALTER e DROP

ALTER Il comando ALTER permette di modificare domini e schemi di tabelle. Il comando può assumere varie forme: Alter domain NomeDominio (set default ValoreDefault| drop default | add constraint DefVincolo | drop constraint NomeVincolo)

ALTER Alter table NomeTabella( alter column NomeAttributo ( set default ValoreDefault | drop default) | add constraint DefVincolo | drop constraint NomeVincolo | add column DefVincolo | drop column NomeVincolo)

ALTER: Esempio ALTER TABLE MovieStar ADD COLUMN phone CHAR(16);

ALTER Tramite alter domain e alter table è possibile aggiungere e rimuovere vincoli e modificare i valori di default. È possibile aggiungere e eliminare attributi e vincoli sullo schema di una tabella. Quando si definisce un nuovo vincolo, questo deve essere soddisfatto dai dati già presenti, se listanza contiene delle violazioni per il nuovo vincolo linserimento viene rifiutato.

ALTER: Esempio ALTER TABLE MovieStar ADD CONSTRAINT NameIsKey PRIMARY KEY (name); ALTER TABLE MovieStar ADD CONSTRAINT NoAndro CHECK (gender IN (M, F)); ALTER TABLE MovieStar ADD CONSTRAINT RightTitle CHECK (gender=F OR name NOT LIKE MS.%);

DROP Mentre il comando alter effettua delle modifiche sui domini o sullo schema delle tabelle. Il comando drop permette di rimuovere dei componenti, siano essi schemi, domini, tabelle, viste o asserzioni. Drop (schema|domain|table|view|assertion) NomeElemento [restrict|cascade]

DROP Lopzione restrict spefica che il comando non deve essere eseguito in presenza di oggetti non vuoti: uno schema non è rimosso se contiene tabelle o altri oggetti Una tabella non è rimossa se possiede delle righe o se è presente in qualche definizione di tabella o vista. Una vista non è rimossa se è utilizzata nella definizione di altre viste o tabelle.

DROP Con lopzione cascade invece, tutti gli oggetti specificati devono essere rimossi. Quando si rimuove uno schema non vuoto, anche tutti gli oggetti che fanno parte dello schema vengono eliminati. In generale, lopzione cascade attiva una reazione a catena, per cui tutti gli elementi che dipendono da un elemento rimosso vengono rimossi

DROP: Esempio ALTER TABLE MovieStar DROP COLUMN birthdate; ALTER TABLE MovieStar DROP CONSTRAINT NameIsKey; ALTER TABLE MovieStar DROP CONSTRAINT NoAndro; ALTER TABLE MovieStar DROP CONSTRAINT RightTitle;

VISTE Sono tabelle virtuali il cui contenuto dipende dal contenuto delle altre tabelle presenti nel db. Esistono anche le viste materializzate Le viste vengono definite associando un nome ed una lista di attributi al risultato dellesecuzione di una interrogazione. Nellinterrogazione che definisce la vista possono comparire anche altre viste

VISTE La sintassi SQL non permette dipendenze ricorsive, né immediate: definendo una vista in termini di se stessa. né transitive: situazioni in cui una vista V 1 è definita usando un vista V 2, V 2 usando V 3 e cosi via, infine V n usando V 1.

VISTE Si definisce una vista utilizzando il comando: Linterrogazione SQL deve restituire un insieme di attributi pari a quelli contenuti nello schema Lordine nella target list deve corrispondere allordine degli attributi dello schema della vista. Create view NomeVista [(ListaAttributi)] as SelectSQL [with[local|cascaded]check option]

ESERCIZIO Definire una vista EXECREACH che contenga tutti i produttori con un networth superiore a 10 milioni. Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) Create view EXECREACH (name,address,cert#,netWorth) as Select name,address,cert#,netWorth from MovieExec where netWort>

ESERCIZIO Definire una vista MovieOld in cui sono contenuti tutti i film in bianco e nero prodotti prima del 1950 Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) Create view ParamauntMovie as Select title,year from Movie where studioName=Paramaount

VISTE VIRTUALI Possiamo creare SELECT su viste i query saranno rescritte Create view ParamauntMovie as Select title,year from Movie where studioName=Paramount SELECT title FROM ParamountMovie WHERE year=1979 AND studioName=Paramount

VISTE Su alcune viste è permesso effettuare operazioni di modifica Le modifiche verranno tradotte negli opportuni comandi di modifica a livello delle tabellle di base da cui la vista dipende. Non è sempre possibile determinare un modo univoco in cui la modifica sulla vista possa essere riportata sulle tabelle di base

VISTE Si incontrano grossi problemi soprattutto quando la vista è definita tramite una join tra più tabelle. Lo standard SQL permette che una vista sia aggiornabile solo quando una sola riga di ciascuna tabella di base corrisponde a una riga della vista. I sistemi commerciali tipicamente considerano una vista aggiornabile solo se è definita su una sola tabella.

VISTE: Esempio di inserimento Create view ParamauntMovie as Select title,year from Movie where studioName=Paramount INSERT INTO ParamountMovie VALUES (Star Treck, 1979) Movie(title,year,length,inColor,studioName,producerC#) Star Treck, 1979, 0, NULL, ?, NULL Create view ParamauntMovie as Select studioName, title,year from Movie where studioName=Paramount

VISTE Le viste in SQL possono servire per formulare delle interrogazioni che non sarebbero altrimenti esprimibili, aumentando il potere espressivo del linguaggio. Mediante la definizione di opportune viste, è possibile definire in SQL interrogazioni che richiedono: di utilizzare diversi operatori aggregati in cascata. Che fanno un uso sofisticato delloperatore unione. In generale, le viste possono essere considerate come uno strumento che permette di estendere la possibilità di nidificare le interrogazioni.

ESERCIZIO Data la tabella IMPIEGATO, determinare il dipartimento che spende la cifra massima in stipendi (utilizzando le viste) Impiegato(matricola,nome,cognome,dipart,ufficio,stipen dio,citta) create view BudgetStipendi(dipart,totaleStipendi) as Select dipart, sum(stipendio) from Impiegato group by dipart Select Dip from BudgetStipendi where TotaleStipendi= (Select max(TotaleStipendi) from BugdgetStipendi)

ESERCIZIO Formulare linterrogazione precedente senza luso delle viste. Impiegato(matricola,nome,cognome,dipart,ufficio,stipen dio,citta) Select Dipart from Impiegato group by Dipart having sum(Stipendio) >= all(select sum(Stipendio) from Impiegato group by Dipart)

ESERCIZIO Scrivere una vista che restituisca il numero di uffici per ciascun dipartimento In questo caso, la vista può servire per restrizione dellaccesso ai dati Create view DipartUffici(nomeDip,nrUffici) as Select dipart, count(distinct ufficio) from Impiegato group by dipart Impiegato(matricola,nome,cognome,dipart,ufficio,stipen dio,citta)

INDICI Gli indici permettono ad un DBMS di accedere ai dati più rapidamente. Il sistema crea della strutture dati interne (gli indici) per la selezione veloce di determinate righe. La struttura indica al DBMS dove si trova una certa riga su una tabella con colonne indicizzate, più o meno come il glossario di un libro indica la pagina in cui appare una determinata parola.

INDICI Consideriamo la seguente query: Possono esserci più di film prodotti dalla Disney ma, solo 200, prodotti nel 1990 Risulta molto piu efficiente per prima cosa cercare i film prodotti nel 1990 e dopo controllare il valore contenuto nel campo studio. SELECT * FROM imdb.Movie WHERE studioName=Disney AND year=1990

INDICI La sintassi per la creazione degli indici è la seguente La sintassi per leliminazione di indici è la seguente CREATE INDEX nomeIndice ON NomeTabella(nomeCampo) DROP INDEX nomeIndice

INDICI La selezione degli indici richiede una riflessione da parte del database designer. Due importanti fattori da considerare sono: Un indice su un attributo accellera notevolmente le query in cui quellattributo e specificato. Le inserzioni, cancellazioni e modifiche sulle tabelle sulle quali sono stati creati degli indici sono piu complesse e richiedono maggior tempo.

INDICI Una strategia generale: Se su una tabella vengono effettuate query più frequentemente di modifiche, allora specificare degli indici su questa tabella ha senso. Se le modifiche sono predominanti rispetto alle query, dovremo porre molta attenzione alla creazione degli indici