I DBMS sono... efficienti

Documenti analoghi
I DBMS sono... efficienti

I DBMS sono... efficienti

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

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

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

ESERCITAZIONE: AZIENDA

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

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

Laboratorio di Basi di Dati

PRODOTTO CARTESIANO Caso Generale

IL MODELLO RELAZIONALE

Interrogazioni nidificate

Connesione ad un Database Access con PHP. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

Laboratorio di Basi di Dati e Multimedia

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

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

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

A.A. 2018/2019. Esercitazione 11. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

Sistemi di Elaborazione delle Informazioni

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

Interrogazioni nidificate

Versione 1.0. (DB Musei)

Manuale SQL. Manuale SQL - 1 -

Corso di Basi di Dati

Structured Query Language

CAPITOLO 4 ESERCIZI SU SQL

Versione 1.0. (DB Visite Specialistiche)

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

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

BASI di DATI. SQL: concetti fondamentali

PROGETTAZIONE DI DATABASE Linguaggio SQL

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

SQL /10/2016 Basi di dati - SQL 1

A.A. 2018/2019. Esercitazione 12. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

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

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

Soluzione esercitazione 01

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

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

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

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

Basi di Dati. Concetti Fondamentali SQL-92 25/02/2004. Concetti Fondamentali. Introduzione. Interrogazioni. Creazione ed eliminazione di bd

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

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

Viste come strumenti di programmazione

Basi di Dati. Sistemi per Basi di Dati Relazionali: Modello Logico. Concetti Fondamentali. Concetti Fondamentali

Basi di Dati SQL-92. Concetti Fondamentali

4/16/07. Le Basi di Dati Relazionali. Concetti Fondamentali. Base di dati, tabella, ennupla, attributo, dominio. Valori nulli

ASP e Database. A cura di Michele Cavalieri

LABORATORIO di INFORMATICA

Corso sul linguaggio SQL

Prof. Pagani corrado SISTEMI INFORMATIVI E DATABASE

Basi di Dati e Sistemi Informativi

Laboratorio di Basi di Dati

Lezione 13. Il trattamento dei dati. database: il linguaggio SQL seconda parte. Proff. Valle Folgieri

Corso di Informatica Linguaggio SQL prima parte

Linguaggi per basi di dati e SQL

Lezione 12. Il trattamento dei dati. database: il linguaggio SQL seconda parte. Proff. Valle Folgieri

Linguaggi per basi di dati. Linguaggi per basi di dati e SQL. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

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

Cap. 7 -Trigger e loro uso

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

OBIETTIVI DELL'ESERCITAZIONE

IL MODELLO RELAZIONALE. Patrizio Dazzi a.a

Esercitazione: Interrogazioni SQL

Capitolo 5. Soluzione: Soluzione in C:

Appunti su SQL. Query Language. Comando Select

Basi di Dati. Concetti Avanzati

Versione 1.0. (Iniziamo ad interrogare il DB)

Stringhe di caratteri

DATABASE PER IL WEB. Programmazione Web 1

Introduzione alle basi di dati. A. Ferrari

SQL-DDL. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

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

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

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Interpretazione delle query nidificate

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

ESERCIZI SQL. Esercizio 1

Lezione 3. Il modello relazionale

IL MODELLO RELAZIONALE

Elena Baralis 2007 Politecnico di Torino 1

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

A. Ferrari introduzione alle basi di dati

Elena Baralis 2013 Politecnico di Torino 1

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Laboratorio di Basi di Dati

SQL. Dott.ssa Elisa Quintarelli

SQL: DDL, VI, Aggiornamenti e Viste

A. Veneziani Primi elementi di Linguaggio SQL

Caratteristiche dei linguaggi per Database

Fondamenti di Informatica e Programmazione

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

Il linguaggio SQL. TUTORATO DIFONDAMENTI DIINFORMATICA

Interrogazioni con Raggruppamenti

Archivi e basi di dati - ing. M. Cossentino. Settore. Traccia 1. Traccia 200. Settore non polarizzato

Basi di dati: appello 14/07/06

Transcript:

I DBMS sono... efficienti Cercanodi utilizzareal megliole risorsedi spaziodi memoria(principalee secondaria) e tempo (di esecuzione e di risposta) Tecniche specializzate per l implementazioni dei DBMS con investimenti e competizione 21/02/2011 Basi di dati, Capitolo 1 1

Perché (non) utilizzare MS Access? Vantaggi: potete creare facilmente il database utilizzando MS Office dal vostro pc, disponendo di una interfaccia facile e intuitiva oltre a dover configurare i permessi di scrittura sulla cartella che ospita il db e sul db stesso non avete bisogno di altro potete effettuare un back up del database quando desiderate semplicemente copiando il file.mdb Svantaggi: limitazione dichiarata da Microsoft sul numero di connessioni contemporanee al database, che è di 15 (teorico). In pratica con 3 siamo al limite. lentezza delle prestazioni in caso di molti record oppure multiutenza.

Architetturastandard(ANSI/SPARC) Linguaggio di programmazione (C, Java, PHP, ecc.) a trelivelliper DBMS utente utente utente Linguaggio DML del DBMS (SQL) Schema esterno Schema esterno Schema logico Linguaggio DDL del DBMS (SQL) Schema interno BD

Architetturastandard(ANSI/SPARC) MS-ACCSS Procedura (FORMS e MODULI) utente utente utente Funzioni base sulle TABLL e QURY Schema esterno Schema esterno Schema logico Definizione di TABLL, RLAZIONI e QURY Schema interno BD

C L I N T MULTIUTNZA Applicazione.mdb 1 C L I N T Utente Utente Procedura ACCSS dati S R V R n (altamente inefficiente) DBA

Uso di MS Access (DBMS + Appl.) C L I N T 1 C L I N T n Utente Procedura ACCSS Applicazione.mdb Utente Procedura ACCSS Applicazione.mdb Microsoft Jet (interno) DBA dati dati.mdb S R V R

Uso di MS Access (DBMS + Appl.)

Uso di MS Access (solo DBMS) C L I N T 1 C L I N T n Utente Procedura ASP Applicazione.asp Utente Procedura PHP Applicazione.php Driver OLDB DBA dati dati.mdb S R V R

sempi di connessione ad un DB ACCSS ASP <% Set conn = Server.CreateObject("ADODB.Connection") conn.open"drivr={microsoft Access Driver (*.mdb)};dbq="& server.mappath("/database/esempio.mdb") sql= "SLCT* FROM Tabella1" Set rs = Server.CreateObject("ADODB.Recordset") rs.open sql, conn %> PHP $connessione = new COM("ADODB.Connection"); $stringa_di_connessione = "DRIVR={Microsoft Access Driver (*.mdb)};dbq=". realpath("testdb/testdb.mdb"); $connessione->open($stringa_di_connessione); $interrogazione = "select* from categorie"; $recordset = new COM("ADODB.Recordset");

Uso di MS Access (Appl.) C L I N T 1 C L I N T n Utente Procedura ACCSS Applicazione.mdb Utente Procedura ACCSS Applicazione.mdb Driver ODBC DBA dati MS-SQL ORACL MYSQL. S R V R

Uso di MS Access (Appl.)

MS-ACCSS Appl. (soluzione1 menoefficiente) A C C S S Procedura (FORMS e MODULI) QURY utente Schema esterno utente Schema esterno utente D B M S Schema logico Schema interno DDL BD

A C C S S MS-ACCSS Appl. (soluzione2 più efficiente) Procedura (FORMS e MODULI) utente utente utente VIW Schema esterno Schema esterno D B M S Schema logico DDL Schema interno BD

Operazioni standard sui dati Inserimento Ricerca Modifica Cancellazione Selezione

USO DGLI INDICI sempio: supponiamo di cercare un nome fra i seguenti Giuseppe Irene Fabio Carlo Lola lena Fabio la procedura da fare è: 1. leggi il primo nome della lista 2. se nome trovato fermati 3. leggi prossimo nome torna a 2 Nel caso migliore leggo 1 volta. Nel caso peggiore leggo 7 volte. Mediamente leggo 1+7= 4 volte 2 Se il dato non è presente si casca sempre nel caso peggiore.

USO DGLI INDICI Supponiamo ora di organizzare l'elenco precedente in ordine alfabetico: Carlo lena Fabio Fabio Giuseppe Irene Lola Se la procedura è la solita: 1. leggi il primo nome della lista 2. se nome trovato fermati 3. leggi prossimo nome torna a 2 Si ha lo stesso numero di letture. Cambia però il caso del dato non presente che rientra nelle letture medie.

Supponiamo ora cambiare la procedura USO DGLI INDICI Carlo lena Fabio Fabio Giuseppe Irene Lola La nuova procedura è: 1 leggi nome centrale 2. se nome trovato fermati 3. se nome > cercato considera la metà superiore del file 4. se nome < cercato considera la metà inferiore del file 5. vai a 1 Nel caso migliore leggo 1 volta. Nel caso peggiore leggo 3 volte. Mediamente leggo 1+3 = 2 volte 2

USO DGLI INDICI PROBLMA: Il caso si presenta più complicato quando aumenta il numero dei campi e il numero delle ricerche possibili. 1)Giuseppe Rossi 2)Irene Bianchi 3)Fabio Verdi 4)Carlo Bianchi 5)Lola Neri 6)lena Bianchi 7)Fabio Rossi Se si vuol ricercare sia per nome che per cognome non si può dare un'organizzazione unica ai dati e non si può neanche riordinarli prima di ciascuna ricerca.

USO DGLI INDICI SOLUZION: Si usano degli indici: archivi a parte nei quali si ha il riepilogo dei dati organizzati e la maniera di recuperare l'intero record nell'archivio principale che rimane inalterato Nome Cognome Carlo 4 Bianchi 2, 4, 6 lena 6 Neri 5 Fabio 3, 7 Rossi 1, 7 Giuseppe 1 Verdi 3 Irene 2 Lola 5

In ACCSS (struttura tabella)

SQL

SQL -DDL sercizio 4.3 Dare le definizioni SQL delle tre tabelle FONDISTA(Nome, Nazione, tà) GARGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza) rappresentando in particolare i vincoli di foreign key della tabella GARGGIA.

Soluzione: Create Table FONDISTA ( Nome character(20) primary key, Nazione character(30), tà smallint ) Create table GARA ( Nome character(20) primary key, Luogo character(20), Nazione character(20), Lunghezza integer ) Create table GARGGIA ( NomeFondista character(20) references FONDISTA(Nome), NomeGara character(20), Piazzamento smallint, primary key (NomeFondista, NomeGara), foreign key (NomeGara) references GARA(Nome) )

SQL -DDL sercizio 4.4 Dare le definizioni SQL delle tabelle AUTOR (Nome, Cognome, DataNascita, Nazionalità) LIBRO (TitoloLibro, NomeAutore, CognomeAutore, Lingua) Per il vincolo foreignkey specificare una politica di cascadesulla cancellazione e di set nullsulle modifiche.

Soluzione: Create table AUTOR ( Nome character(20), Cognome character(20), DataNascita date, Nazionalità character(20), primary key(nome, Cognome) ) Create table LIBRO ( TitoloLibro character(30) primary key, NomeAutore character(20), CognomeAutore character(20), Lingua character(20), foreign key (NomeAutore, CognomeAutore) references AUTOR(Nome, Cognome) on delete cascade on update set NULL )

sercizio 4.5 Dato lo schema dell'esercizio precedente, spiegare cosa può capitare con l'esecuzione dei seguenti comandi di aggiornamento: delete from AUTOR where Cognome = 'Rossi' update LIBRO set NomeAutore='Umberto where CognomeAutore = 'co' insert into AUTOR(Nome,Cognome) values('antonio','bianchi') update AUTOR set Nome = 'Italo' where Cognome = 'Calvino'

Soluzione: 1. Il comando cancella dalla tabella AUTOR tutte le tuple con Cognome = 'Rossi'. A causa della politica cascadeanche le tuple di LIBRO con CognomeAutore = 'Rossi' verranno eliminate. 2. Il comando non è corretto: Nome e Cognome sono attributi della tabella AUTOR e non della tabella LIBRO. 3. Il comando aggiunge una nuova tupla alla tabella AUTOR. Non ha alcun effetto sulla tabella LIBRO 4. Le tuple di AUTOR con Cognome = Calvino vengono aggiornate a Nome = Italo. A causa della politica set null gli attributi NomeAutore e CognomeAutoredelle tuple di Libro con CognomeAutore= Calvino vengono posti a NULL.

sercizio 4.7 Con riferimento ad una relazione PROFSSORI(CF, Nome, tà, Qualifica), scrivere le interrogazioni SQL che calcolano l età media dei professori di ciascuna qualifica, nei due casi seguenti: 1. se l età non è nota si usa per essa il valore nullo 2. se l età non è nota si usa per essa il valore 0.

Soluzione: 1. Le funzioni aggregative escludono dalla valutazione le ennuple con valori nulli: select Qualifica, avg(ta) as tamedia from Professori group by Qualifica 2. necessario escludere esplicitamente dal calcolo della media le ennuple con il valore che denota l informazione incompleta: select Qualifica, avg(ta) as tamedia from Professori whereta<> 0 group by Qualifica.

sercizio 4.9 (modificato) Considerare le relazioni IMPIGATI (Matricola, Nome, Stipendio) DIPARTIMNTI (Codice, Direttore) e le due interrogazioni seguenti, specificare se e in quali casi esse possono produrre risultati diversi: 1. select avg(stipendio) from Impiegati where Matricola in (select Direttore from Dipartimenti) 2. select avg(stipendio) from Impiegati I, Dipartimenti D where I.Matricola = D.Direttore.

Soluzione: Le due interrogazioni dovrebbero calcolare lo stipendio medio di un direttore di dipartimento. Nel caso in cui esistono impiegati direttori di più dipartimenti la seconda queryproduce un risultato scorretto in quanto conta più occorrenze di questi impiegati nel computo della media. La prima query produce il risultato corretto.