Quantificazione Esistenziale ed Universale

Slides:



Advertisements
Presentazioni simili
Sicurezza e concorrenza nelle basi di dati
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
SQL (Standard query language) Istruzioni per la creazione di una tabella: Create table ( tipo, (, [vincoli]) Primary key ( ) CHIVE PRIMARIA Foreign key(
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.
SQL: Lezione 7 Nataliya Rassadko
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.
Le transazioni Itis Max Planck.
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.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 16/10/2002.
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Basi di Dati e Sistemi Informativi
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
SQL (IV) Data Definition Language/ Data Manipulation Language.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
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.
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
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 =
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 24/09/2002.
CONTROLLO DELLA CONCORRENZA
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
ODMG.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
rielaborato da Atzeni-etal., Basi di dati, Capitolo 4
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Interrogazione di una base di dati relazionale
Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
A. A – 2008 Basi di dati 1 Corso Prof
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
I vincoli di integrità Alcuni aspetti della realtà NON possono essere modellati solamente con entità, attributi e relazioni, per esempio i vincoli di integrità.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Organizzazione fisica
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: COMMIT SAVEPOINT nome_punto.
SQL, Definizione e interrogazione di basi di dati
© 2007 SEI-Società Editrice Internazionale, Apogeo
OBJECT ORIENTED DATABASE
Access.
Interrogazioni Nidificate
Partizionamento/accorpamento di concetti
SQL per la modifica di basi di dati
Structured Query Language
Join, una difficoltà Impiegato Reparto Rossi A Neri B Bianchi Reparto
Operatori aggregati e raggruppamenti
Selezione e Proiezione
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere.
Introduzione ai DBMS I Sistemi di Gestione di Basi di Dati sono strumenti software evoluti per la gestione di grandi masse di dati residenti su memoria.
Docente: Sabato Bufano
Vincoli di integrità generici
Vincoli di Integrità Non tutte le combinazioni possibili di valori dei domini su cui è definita una relazione sono accettabili. Alcuni attributi possono.
Transcript della presentazione:

Quantificazione Esistenziale ed Universale 02/05/2019

Quantificazione Esistenziale Ulteriore tipo di condizione: EXISTS ( Sottoespressione ) 02/05/2019

Quantificazione Esistenziale Trovare le persone (padri o madri) che hanno almeno un figlio select * from Persone where exists ( select * from Paternita where Padre = Nome) or exists ( select * from Maternita where Madre = Nome) 02/05/2019

Formulare nel linguaggio naturale la seguente query (Contro-)Esempio: Formulare nel linguaggio naturale la seguente query select * from Persone where exists ( select * from Paternita) or exists ( select * from Maternita) 02/05/2019

Soluzione alternativa senza Esistenziale Trovare le persone (padri o madri) che hanno almeno un figlio select * from Persone where nome in (select padre from Paternita) or nome in (select madre from Maternita) 02/05/2019

Negazione di un Esistenziale Trovare le persone (padri o madri) che non hanno figli select * from Persone where not exists ( select padre from Paternita where padre=nome ) and not exists ( select madre from Maternita where madre=nome ) 02/05/2019

Negazione di un Esistenziale Trovare le persone (padri o madri) che non hanno figli select * from Persone where nome not in ( select padre from Paternita ) and nome not in ( select madre from Maternita) 02/05/2019

Quantificazione Universale Trovare i padri i cui figli guadagnano tutti più di venti milioni select distinct Padre from Paternita Z where not exists (select * from Paternita W, Persone where W.Padre = Z.Padre and W.Figlio = Nome and Reddito <= 20) Nota: la soluzione equivale a selezionare ogni padre che non appartiene all’insieme dei padri i cui figli guadagnao meno di 20 milioni 02/05/2019

Soluzione equivalente senza Universale Trovare i padri i cui figli guadagnano tutti più di venti milioni select distinct padre from Paternita where padre not in ( select padre from paternita, persone where Figlio = Nome and Reddito <= 20 ) Nota: non sereve la ridenominazione della relazione paternita nella sotto-interrogazione nidifciata 02/05/2019

Semantica operazionale delle espressioni “correlate” L’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esterna 02/05/2019

Visibilità attenzione all’uso delle variabili: una query nidificata interna può fare riferimento solo a variabili usate nella query più esterna (ma non viceversa) Query scorretta (trovare gli impiegati che lavorano nel dipartimento di produzione o in un altro dipartimento che ha la stessa sede di quello di produzione) select * from Impiegato where Dipart in (select Nome from Dipartimento D1 where Nome = 'Produzione') or Dipart in (select Nome from Dipartimento D2 where D2.Citta = D1.Citta) 02/05/2019

Massimo e nidificazione Trovare le persone con il reddito massimo select nome, reddito as max_reddito from persone where reddito = ( select max(reddito) from persone ) 02/05/2019

Viste Attenzione: disponibile solo a partire dalla versione MySQL Server 5.0.1. Attenzione ai privilegi in scrittura! create view NomeVista [ ( ListaAttributi ) ] as Select ... From ... Where [ with [ local | cascaded ] check option ] create view ImpiegatiAmmin (Matricola, Nome, Cognome, Stipendio) as select Matricola, Nome, Cognome, Stipendio from Impiegato where Dipart = 'Amministrazione' and Stipendio > 10 02/05/2019

Aggiornamenti sulle viste Ammessi (di solito) solo su viste definite su una sola relazione Alcune verifiche possono essere imposte 02/05/2019

Create View with check option create view ImpiegatiAmminPoveri as select * from ImpiegatiAmmin where Stipendio < 50 with check option check option permette modifiche, ma solo a condizione che la ennupla continui ad appartenere alla vista (esempio: non posso modificare lo stipendio portandolo a 60) 02/05/2019

Un’interrogazione non standard La nidificazione nella having non è ammessa select Dipart from Impiegato group by Dipart having sum(Stipendio) >= all ( select sum(Stipendio) group by Dipart ) 02/05/2019

Soluzione con le viste create view BudgetStipendi(Dip,TotaleStipendi) as select Dipart, sum(Stipendio) from Impiegato group by Dipart select Dip from BudgetStipendi where TotaleStipendi =(select max(TotaleStipendi) from BudgetStipendi) 02/05/2019

Ancora sulle viste Interrogazione scorretta select avg(count(distinct Ufficio)) from Impiegato group by Dipart Con una vista create view DipartUffici(NomeDip,NroUffici) as select Dipart, count(distinct Ufficio) group by Dipart; select avg(NroUffici) from DipartUffici 02/05/2019

Controllo dell'accesso In SQL è possibile specificare chi (utente) e come (lettura, scrittura, …) può utilizzare la base di dati (o parte di essa) Oggetto dei privilegi (diritti di accesso) sono di solito le tabelle, ma anche altri tipi di risorse, quali singoli attributi, viste o domini Un utente predefinito _system (amministratore della base di dati) ha tutti i privilegi Il creatore di una risorsa ha tutti i privilegi su di essa 02/05/2019

Privilegi Un privilegio è caratterizzato da: la risorsa cui si riferisce l'utente che concede il privilegio l'utente che riceve il privilegio l'azione che viene permessa la trasmissibilità del privilegio 02/05/2019

Tipi di privilegi offerti da SQL insert: permette di inserire nuovi oggetti (ennuple) update: permette di modificare il contenuto delete: permette di eliminare oggetti select: permette di leggere la risorsa references: permette la definizione di vincoli di integrità referenziale verso la risorsa (può limitare la possibilità di modificare la risorsa) usage: permette l'utilizzo in una definizione (per esempio, di un dominio) 02/05/2019

grant select on Department to Stefano grant e revoke Concessione di privilegi: grant < Privileges | all privileges > on Resource to Users [ with grant option ] grant option specifica se il privilegio può essere trasmesso ad altri utenti grant select on Department to Stefano Revoca di privilegi revoke Privileges on Resource from Users [ restrict | cascade ] 02/05/2019

Transazione Insieme di operazioni da considerare indivisibile ("atomico"), corretto anche in presenza di concorrenza e con effetti definitivi Proprietà ("acide"): Atomicità Consistenza Isolamento Durabilità (persistenza) 02/05/2019

Le transazioni sono … atomiche La sequenza di operazioni sulla base di dati viene eseguita per intero o per niente: trasferimento di fondi da un conto A ad un conto B: o si fanno il prelevamento da A e il versamento su B o nessuno dei due 02/05/2019

Le transazioni sono … consistenti Al termine dell'esecuzione di una transazione, i vincoli di integrità debbono essere soddisfatti "Durante" l'esecuzione ci possono essere violazioni, ma se restano alla fine allora la transazione deve essere annullata per intero ("abortita") 02/05/2019

Le transazioni sono … isolate L'effetto di transazioni concorrenti deve essere coerente (ad esempio "equivalente" all'esecuzione separata) se due assegni emessi sullo stesso conto corrente vengono incassati contemporaneamente si deve evitare di trascurarne uno 02/05/2019

I risultati delle transazioni sono durevoli La conclusione positiva di una transazione corrisponde ad un impegno (in inglese commit) a mantenere traccia del risultato in modo definitivo, anche in presenza di guasti e di esecuzione concorrente 02/05/2019

Transazioni in SQL Istruzioni fondamentali begin transaction: specifica l'inizio della transazione (le operazioni non vengono eseguite sulla base di dati) commit work: le operazioni specificate a partire dal begin transaction vengono eseguite rollback work: si rinuncia all'esecuzione delle operazioni specificate dopo l'ultimo begin transaction 02/05/2019

Una transazione in SQL begin transaction; update ContoCorrente set Saldo = Saldo – 10 where NumeroConto = 12345 ; set Saldo = Saldo + 10 where NumeroConto = 55555 ; commit work; 02/05/2019