Check, esempio. Vincoli di integrità generici. Asserzioni. Asserzioni

Documenti analoghi
Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

insert into Dipartimento(NomeDip, Città) values('produzione','torino') insert into ProdottiMilanesi (select codice, descrizione from Prodotto

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

Interpretazione delle query nidificate

SQL-DML/3. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Vincoli di integrità generici: check

Controllo degli accessi

Controllo degli accessi. Controllo degli accessi. Controllo degli accessi. Controllo degli accessi

Linguaggio SQL: costrutti avanzati Controllo dell accesso

Linguaggio SQL: costrutti avanzati D B M G

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Corso di Basi di Dati

8 SQL : Check, Asserzioni,Viste

Basi di dati. SQL: Caratteristiche evolute

Basi di dati - Laboratorio

Aspetti avanzati nella definizione degli schemi DDL2 1

Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata

Interrogazioni nidificate

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Interrogazioni nidificate

Il linguaggio SQL: le viste

Basi di Dati: Corso di laboratorio

Laboratorio di Basi di Dati

SQL Laboratorio di Basi di Dati a.a. 2002/2003

Laboratorio di Basi di Dati e Multimedia

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

SQL Sintassi Dei Comandi

D B M G D B M G 2. Sistemi informativi. Linguaggio SQL: costrutti avanzati

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

VISTE. 19/11/2015 Concetti Avanzati - SQL 71

Interrogazioni con ANY e ALL. Operatori ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL

SQL DDL. Create database. Alter database. Drop database

Corso di Basi di Dati

Interrogazioni di tipo insiemistico. Select. Interrogazioni di tipo insiemistico. Interrogazioni nidificate

Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno Cognome e nome: Matricola:

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Corso di Basi di Dati

Corso di Basi di Dati

Il linguaggio SQL: autorizzazioni

SQL e algebra relazionale

Basi di Dati e Sistemi Informativi. Asserzioni, Viste e Trigger Basi di dati Attive

Primo Compitino di Basi di Dati

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Vincoli, procedure e regole attive in SQL. SQL: vincoli, trigger 1

PRODOTTO CARTESIANO Caso Generale

SQL: DDL, VI, Aggiornamenti e Viste

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

Gestione dei valori nulli

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Stringhe di caratteri

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Viene richiesto di MIN CARD(S,E) = 1 UPDATE DELETE MAX CARD(S,E) = 3 INSERT UPDATE

Manuale SQL. Manuale SQL - 1 -

Sistemi di Elaborazione delle Informazioni

Vincoli interrelazionali

Definizione di domini

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 6 MARZO 2015 Tempo: 2h30m

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Gestione delle informazioni. Tot. h 10. Base di Dati. Tot. h 56. Grafica in C# - Laboratorio- Tot. h 40. Dipartimento Informatica Materia Informatica

SQL - Valori nulli. Linguaggio SQL

Basi di Dati: Corso di laboratorio

Il linguaggio SQL costrutti DDL.

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi

Prova Scritta di Basi di Dati

LABORATORIO di INFORMATICA

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

Cap. 7 -Trigger e loro uso

D B M G 2. Linguaggio SQL: fondamenti. Istruzioni di aggiornamento. Introduzione Istruzione INSERT Istruzione DELETE Istruzione UPDATE

record a struttura fissa

Elena Baralis 2007 Politecnico di Torino 1

Elena Baralis 2013 Politecnico di Torino 1

Corso di Basi di Dati A.A. 2015/2016

SQL. Domini. Domini elementari (predefiniti) Domini definiti dall utente (semplici, ma riutilizzabili)

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

SQL - Structured Query Language

Accesso alla base di dati. Linguaggi per basi di dati. SQL immerso in linguaggio ad alto livello. SQL, un linguaggio interattivo

SQL: "storia" 31/05/2006 2

Basi di Dati e Sistemi Informativi

Istruzioni. DDL: CREATE, DROP e ALTER TABLE. DML: INSERT, DELETE e UPDATE DQL: SELECT. DCL: GRANT e REVOKE

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. Linguaggio di interrogazione per basi di dati relazionali

E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

Manuale Comandi SQL SQL. Sito per esercitarsi (on line) SQL

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Interrogazioni$e$il$valore$NULL$

Mattia Fazzi: 14/05/2019

Prova Scritta di Basi di Dati

Caratteristiche dei linguaggi per Database

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

Transcript:

Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste l istruzione check (Condizione) La condizione specificata deve essere verificata da tutte le tuple in ogni momento. E possibile con check definire tutti i vincoli predefiniti. Però è meno leggibile e non si possono applicare le politiche di reazione alle violazioni. Tuttavia è molto potente Check, esempio create table Impiegato ( Matricola character(6), Cognome character(20), Nome character(20), Sesso character not null check (sesso in ( M, F )) Stipendio integer, Superiore character(6), check(stipendio <= (select Stipendio from Impiegato J where Superiore = J.Matricola) ) Asserzioni Le asserzioni sono vincoli che fanno parte dello schema; non sono associati ad alcun attributo o tabella. Permettono di definire tutti i vincoli utilizzabili nella definizione di una tabella, ma anche vincoli su più tabelle o vincoli che richiedono che una tabella abbia certe caratteristiche (es. una certa cardinalità). create assertion NomeAsserzione check(condizione) create assertion AlmenoUnImpiegato check (1 <= (select count(*) from Impiegato)) Asserzioni Ogni vincolo di integrità è associato ad una politica di controllo che specifica se è immediato o differito. Se è immediato è verificato immediatamente dopo una modifica. Se è differito solo al termine dell esecuzione di una serie di operazioni (transazione). Se un vincolo immediato viene violato, l operazione di modifica può essere annullata immediatamente (rollback parziale). Tutti i vincoli predefiniti sono immediati. Se invece è differito al momento in cui si verifica la violazione non è più possibile identificare l operazione che l ha causata e quindi va annullata tutta la transazione (rollback). Questo garantisce la consistenza della base di dati. Per cambiare il tipo di controllo: set constraints [NomeVincolo] immediate set constraints [NomeVincolo] deferred 1

Le viste sono tabelle virtuali ricavate da informazioni contenute in altre tabelle. Nella definizione possono essere contenute anche altre viste purché non vi siano dipendenze ricorsive o immediate (una vista non può dipendere da se stessa), né transitive. create view NomeVista[(ListaAttributi)] as SelectSQL [ with [ local cascaded ] check option ] La query SQL deve restituire un numero di attributi pari a quelli contenuti nello schema; l ordine degli attributi nella target list deve rispettare quello dello schema create view ImpiegatiAmmin(Matricola,Nome,Cognome,Stipendio) as select Matricola, Nome, Cognome, Stipendio from Impiegato where Dipart = Amministrazione and Stipendio > 10 Su certe viste è possibile fare modifiche che alterano le tabelle che le compongono. Ci sono problemi se la vista è definita tramite un join. SQL permette la modifica di una vista solo se una sola riga di ciascuna tabella di base corrisponde a una riga della vista. Di solito si richiede che sia definita su una sola tabella e/o che contenga almeno una chiave primaria. check option richiede che si facciano modifiche solo sulle righe della vista e che le righe continuino ad appartenere alla vista dopo le modifiche. Se una vista è definita in termini di altre viste l opzione local o cascaded specifica se il controllo debba coinvolgere solo la vista più esterna o se deve essere propagato a tutti i livelli. Il default è cascaded. Quindi se è specificata la check option ogni comando di aggiornamento per essere propagato non deve eliminare righe dalla vista. Le viste consentono anche di sostituire interrogazioni nidificate o di creare interrogazioni altrimenti impossibili da definire. create view BudgetStipendi(Dip,TotaleStipendi) as select Dipart, sum(stipendio) from Impiegato group by Dipart Trovare il dipartimento che spende di più in stipendi select Dip from BudgetStipendi wheretotstipendi=(select max(totalestipendi) from BudgetStipendi) 2

SQL prevede la definizione di utenti, per assegnare diversi privilegi. Gli utenti possono essere gli stessi del sistema su cui è attivo il server SQL, oppure indipendenti dal sistema. Ogni componente del sistema è proteggibile, di solito si proteggono le tabelle. Il controllo degli accessi è basato sul concetto di privilegio, caratterizzato da: risorsa cui si riferisce utente che concede il privilegio utente che lo riceve azione che viene permessa possibilità di trasmettere o meno il privilegio ad altri utenti Il creatore di una risorsa ha tutti i privilegi, al momento della sua creazione. Esiste anche un utente speciale _system, che ha tutti i privilegi su tutte le risorse in qualsiasi momento. I privilegi sono: insert, (applicabile a tabelle o viste) inserisce un nuovo oggetto nella risorsa update (tabelle viste attributi) aggiorna il valore di un oggetto delete (tabelle e viste) rimuove un oggetto select (tabelle viste attributi) permette di leggere la risorsa references (tabelle ed attributi) permette che venga fatto riferimento ad una risorsa nell ambito della definizione dello schema di una tabella. usage (domini) permette che venga usata la risorsa drop e alter sono riservati al creatore degli oggetti cui si applicano I comandi per concedere o revocare privilegi sono grant e revoke grant Privilegi on Risorsa to Utenti [with grant option] concede i Privilegi sulla Risorsa agli Utenti grant select on Dipartimento to Stefano concede all utente Stefano il privilegio di select sulla tabella Dipartimento. Se si specifica anche with grant option l utente può propagare i diritti anche ad altri. La parola chiave all privileges specifica tutti i possibili privilegi. revoke Privilegi on Risorsa from Utenti [restrict cascade] fa l operazione inversa. Con restrict si impedisce che la revoca provochi altre revoche, con cascade si concede. 3

SQL e linguaggi di programmazione L interazione con l ambiente SQL può avvenire in 3 modi: in modo interattivo col server attraverso interfacce o linguaggi ad hoc legati a particolari DBMS attraverso i normali linguaggi di programmazione In quest ultimo caso è necessario che un preprocessore si occupi di riconoscere in un sorgente il codice SQL e lo trasformi in codice del linguaggio che si sta usando. SQL e linguaggi di programmazione Uno dei problemi che sorgono è il fatto che SQL sia orientato agli insiemi mentre i linguaggi di programmazione, ad eccezione di alcuni linguaggi ad oggetti, possono essere soltanto orientati alle tuple. Le tuple dovranno quindi essere scandite una per una per eseguire un comando SQL. Si può ovviare a questo o con linguaggi ad oggetti che supportino operazioni evolute sugli insiemi o mediante i cursori. I cursori estendono SQL in modo tale da fornire la possibilità ad un programma di accedere alle tabelle una riga alla volta. Hanno un comportamento simile ai puntatori a file. declare NomeCursore [scroll] cursor for SelectSQL [for < read only update [ of Attributo {, Attributo }] > ] associa un cursore ad una interrogazione. scroll indica se il programma può spostarsi liberamente nell interrogazione for [read only update] specifica se il cursore deve essere usato in sola lettura o in un comando di modifica. open NomeCursore attiva l interrogazione cui è collegato il cursore e permette di accedere al risultato tramite il comando fetch [ Posizione from ] NomeCursore into ListadiFetch che prende una riga dal cursore e la ripone nelle variabili della ListadiFetch. La corrispondenza fra attributi e variabili è per posizione. Quando si parla di riga corrente si intende l ultima riga letta. 4

Posizione può assumere i valori: next (il cursore legge la riga successiva alla corrente) prior (la precedente) first (la prima) last (l ultima) absolute EsprIntera (la i-esima, i è il risultato dell espressione) relative EsprIntera (la i-esima rispetto alla corrente) Le opzioni di posizione possono essere usate solo se è stata specificata l opzione scroll. Altrimenti solo next. In quel caso l implementazione è più efficiente. update e delete possono usare i cursori. update NomeTabella set Attributo = < Espressione null default > {, Attributo = < Espressione null default > } where current of NomeCursore delete from NomeTabella where current of NomeCursore close NomeCursore chiude il cursore e libera la memoria dalla copia del risultato della query cui è collegato. Se la query restituisce solo una riga si può evitare il cursore e usare select ListaAttributi into ListaVariabili In molti casi è necessario formulare interrogazioni arbitrarie, non solo parametrizzabili, ma anche dipendenti ad esempio dallo stato dell esecuzione di un programma. Le interrogazioni che si possono formulare attraverso le istruzioni viste sinora sono di tipo statico, cioè scritte una volta per tutte. consente di costruire interrogazioni al momento dell esecuzione di un programma. In SQL statico, i comandi vengono compilati una volta per tutte. Questo si traduce in elevata efficienza. In, per ottimizzare l efficienza di un programma e mantenerla equivalente a quella di SQL statico, sono previste due modalità di esecuzione. 5

execute immediate IstruzioneSQL Questo comando provoca l esecuzione immediata dell istruzione e può quindi essere usato solo per comandi che non richiedono parametri in ingresso o in uscita. istruzionesql= delete from Dipartimento where Nome = Amministrazione ; $ execute immediate :istruzionesql Se il comando viene eseguito più volte o se il programma deve gestire uno scambio di parametri bisogna distinguere 2 fasi: preparazione ed esecuzione. Fase di preparazione prepare NomeComando from IstruzioneSQL fa analizzare l istruzione e la fa tradurre nel linguaggio procedurale del sistema. Gli eventuali parametri sono sostituiti da? In pratica, definisce una funzione che sarà possibile chiamare dal linguaggio ad alto livello. prepare :comando from select Città from Dipartimento where Nome =? Quando non serve più l istruzione è possibile deallocare la memoria deallocate prepare NomeComando deallocate prepare :comando Fase di esecuzione execute NomeComando [ into TargetList ] [ using ListaParametri ] La target list contiene le variabili in cui deve essere inserito il risultato dell esecuzione del comando. La lista dei parametri specifica i valori che devono essere assunti dai parametri della funzione. execute :comando into :citta using :dipartimento diventa, se :dipartimento assume il valore Produzione, select Città from Dipartimento where Nome = Produzione I cursori vengono utilizzati come in SQL statico, con la sola differenza che si associa al cursore l identificativo dell interrogazione invece che l interrogazione stessa e che si possono usare using e into per specificare i valori dei parametri di ingresso e uscita. prepare :comando from :istruzionesql declare Cursore cursor for :comando open Cursore using :nome1 6