RDBMS: panorama attuale. Basi di Dati Relazionali ad Oggetti. RDBMS: problemi. RDBMS: panorama attuale. RDBMS: problemi. RDBMS: panorama attuale

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "RDBMS: panorama attuale. Basi di Dati Relazionali ad Oggetti. RDBMS: problemi. RDBMS: panorama attuale. RDBMS: problemi. RDBMS: panorama attuale"

Transcript

1 Basi di Dati Relazionali ad Oggetti RDBMS: panorama attuale Oggi il mercato mondiale dei RDBMS supera i 50 billioni di dollari all anno, ma i RDBMS presentano anche alcuni limiti 0 3 RDBMS: panorama attuale RDBMS: problemi Gestiscono e manipolano dati semplici (tabellari) Hanno un linguaggio di interrogazione (SQL) semplice, dichiarativo e standard Tool consolidati per lo sviluppo di applicazioni (Oracle Developer, Sybase Power Builder, Microsoft Visual Basic) Prevalentemente connessi alle caratteristiche intrinseche del modello relazionale: SQL-92 fornisce solo un insieme limitato di tipi di dato le tabelle hanno una struttura flat e non forniscono un buon supporto per strutture annidate, quali insiemi ed array non è possibile definire relazioni di sotto-tipo tra gli oggetti di un database 1 4 RDBMS: panorama attuale RDBMS: problemi Portabili su diverse piattaforme Esempi di RDBMS: IBM DB2, Oracle, Sybase, Informix, Microsoft SQL Server Buone prestazioni Affidabilità, gestione transazioni Basati su una architettura client-server supportano efficientemente un gran numero di utenti Forniscono meccanismi di controllo dell accesso Le associazioni tra entità vengono modellate per valore e questo nel caso di associazioni complesse può richiedere la creazione di parecchie tabelle/colonne fittizie Gli RDBMS non sfruttano gli approcci objectoriented per la progettazione e realizzazione di software che oggi stanno diventando pressochè uno standard 2 5

2 OODBMS: panorama attuale Il modello relazionale ad oggetti Permettono di modellare direttamente oggetti complessi e le loro associazioni Object-orientation sempre più diffuso in ambito software engineering e programmazione: unicità del paradigma Buone prestazioni per applicazioni navigazionali Limitato supporto per concorrenza, parallelismo e distribuzione I DBMS relazionali ad oggetti (object-relational) nascono dall esigenza di assicurare le funzionalità dei RDBMS rispetto alla gestione di dati tradizionali, estendendo il modello dei dati con la possibilità di gestire dati complessi tipica degli OODBMS 6 9 OODBMS: problemi Il progetto del database è strettamente legato al progetto delle applicazioni Mancanza di un modello dei dati e di un linguaggio di query standard pienamente accettati Mancanza di un linguaggio di query dichiarativo (SQLlike) Semplici modelli transazionali Limitate funzionalità di controllo dell accesso Coprono un mercato di nicchia che richiede accessi navigazionali efficienti (disegno di chip, ecc.) ORDBMS: caratteristiche generali Nuovi tipi di dato: testi, immagini, audio/video, dati geografici, ecc. tipi di dato user-defined tipi collezione Metodi per modellare le operazioni sui tipi definiti dall'utente (es. Java, C) Nuovi modi per modellare le associazioni La filosofia per la gestione dei dati è però ancora quella relazionale: Tutti gli accessi ai dati avvengono tramite SQL Tutti le entità di interesse sono modellate tramite tabelle 7 10 RDBMS vs. OODBMS RDBMS forniscono un supporto efficiente ed efficace per applicazioni che manipolano dati semplici OODBMS forniscono un supporto efficiente per alcune classi di applicazioni su dati complessi, ma senza molti degli aspetti positivi dei RDBMS ORDBMS: panorama attuale Oggi quasi tutti i principali produttori di RDBMS (Oracle, Informix, DB2,..) hanno esteso i loro DBMS con caratteristiche object-relational Tali estensioni presuppongono anche una estensione del linguaggio SQL Allo stato attuale ogni RDBMS ha un estensione proprietaria object-relational 8 11

3 ORDBMS: panorama attuale Nel seguito Le estensioni differiscono per: Le funzionalità che supportano Il modo di realizzarle Le estensioni apportate ad SQL E questo nonostante SQL Discutere le caratteristiche generali di un ORDBMS discuteremo come queste caratteristiche vengono gestite dallo standard se non altrimenti specificato, utilizzeremo la sintassi di SQL-99 introdurremo le caratteristiche relazionali ad oggetti di Oracle Lo standard SQL-99 SQL-99 è un tentativo di standardizzazione dell estensione object-relational del modello relazionale Al momento della definizione di SQL-99 i maggiori produttori di RDBMS avevano già la loro versione delle estensioni object-relational SQL-99 non standardizza tutte le funzionalità object-relational presenti nei DBMS commerciali Estensione del sistema di tipi Lo standard SQL-99 Sistema dei tipi in SQL92 E quindi ancora presto per capire quando e in che misura lo standard sarà recepito a livello commerciale La sensazione è che sarà necessario un ulteriore standard che medi tra tutte le estensioni proprietarie In SQL-92 i tipi di un attributo in una relazione possono essere: numerici (interi, reali, ecc.) carattere (stringhe di lunghezza fissa o variabile, caratteri singoli) temporali (date, time, datetime, interval) booleani (true, false) non strutturati (BYTE, TEXT, BLOB, CLOB) 14 17

4 Sistema dei tipi in SQL92 Tipi semplici Per ogni tipo built-in esistono un insieme fisso e predefinito di operazioni che su di esso possono essere eseguite Queste limitazioni rendono spesso difficile la rappresentazione di dati reali Confronti con il tipo base o con altri tipi semplici definiti sullo stesso tipo base richiedono operazioni di cast l ORDBMS crea automaticamente una funzione di cast quando un nuovo tipo semplice viene creato Non è fornito alcun meccanismo di ereditarietà e subtyping per i tipi semplici Sono usati per definire tipi di dati che richiedono operazioni diverse rispetto al tipo su cui sono definiti I tipi semplici sono considerati dal DBMS totalmente distinti dal tipo su cui si basano I valori del tipo semplice non sono direttamente confrontabili con quelli del tipo su cui si basano (strong typing) Estensione del sistema di tipi Tipi semplici Abstract data types User-defined types Tipi riferimento Tipi complessi: tipi record e tipi collezione Si supponga di creare un nuovo tipo id_impiegato basato sul tipo intero Come il tipo intero, id_impiegato è utilizzato per memorizzare valori numerici ma il DBMS tratterà i due tipi come tipi distinti Per i due tipi possono essere definite operazioni diverse (ad esempio la somma di due identificatori non ha senso, mentre potrebbe essere utile una operazione di confronto) Tipi semplici Tipi semplici in SQL-99 I tipi semplici (o distinct type) sono la forma più semplice di estensione del sistema dei tipi fornita da un ORDBMS Consentono agli utenti di creare nuovi tipi di dati, basati su un solo tipo (built-in o userdefined) SQL-99 consente di definire tipi semplici basati solo su tipi built-in CREATE TYPE <name> AS <built-in type> FINAL Vedremo in seguito il significato della clausola FINAL 20 23

5 - confronto 24 CREATE TYPE id_impiegato AS INTEGER FINAL; CREATE TABLE Impiegati( id id_impiegato, nome VARCHAR(50), età INTEGER, id_manager id_impiegato); 27 CREATE TYPE Euro AS Decimal(8,2) FINAL; CREATE TYPE Dollaro_USA AS Decimal(8,2) FINAL; CREATE TABLE Vendite_Europee( n_cliente INTEGER, n_ordine INTEGER, totale Euro); CREATE TABLE Vendite_USA( n_cliente INTEGER, n_ordine INTEGER, totale Dollaro_USA); Casting : confronto I valori dei distinct type sono considerati come distinti dai valori del tipo di base il casting non è automatico le funzioni di cast (se necessarie) vanno implementate esplicitamente, eventualmente direttamente dal sistema SELECT n_cliente,n_ordine FROM Vendite_Europee ERP, Vendite_USA USA WHERE ERP.n_ordine = USA.n_ordine AND ERP.totale > USA.totale; errore!!! assegnazione Casting in SQL-99 SELECT nome FROM Impiegati WHERE id_manager = 123; errore Il DBMS definisce due funzioni di casting per ogni nuovo tipo semplice: una per passare dal distinct type al tipo builtin una per passare dal tipo built-in al distinct type 26 29

6 Funzioni di casting in SQL-99 Casting in SQL-99 CREATE CAST (<source type> AS <target type>) WITH <segnatura funzione> [AS ASSIGNMENT] <source type>: tipo input <target type>: tipo output almeno uno tra <source type> e <target type> deve essere un tipo definito dall utente l altro può essere un tipo qualunque La funzione di casting può essere invocata: esplicitamente CAST(<source type> as <target type>) implicitamente, senza invocare la funzione CAST la stessa funzione può essere invocata per casting su tipi built-in (esempio: integer in real) Funzioni di casting in SQL-99 <segnatura funzione> è la segnatura di una qualunque funzione la funzione deve essere definita come segue: FUNCTION <name> (<source type>) RETURNS <target type> codice... SELECT nome FROM Impiegati WHERE id_manager = CAST(123 AS id_impiegato); SELECT nome FROM Impiegati WHERE id_manager = 123; Funzioni di casting in SQL-99 Se la clausola AS ASSIGNMENT è specificata, il casting è invocato implicitamente quando necessario per ogni coppia di tipi può esistere una sola funzione di casting definita dall utente Le funzioni di casting per i tipi semplici vengano create automaticamento dal sistema con la clausola AS ASSIGNMENT SELECT n_cliente,n_ordine FROM Vendite_Europee ERP, Vendite_USA USA WHERE ERP.n_ordine = USA.n_ordine AND CAST(ERP.totale AS Decimal(8,2) > CAST(USA.totale AS Decimal(8,2)); 32 35

7 - alternativa Per passare da Euro a Dollaro_USA posso anche definire una nuova funzione di cast CREATE FUNCTION f(e Euro) RETURNS Dollaro_USA BEGIN DECLARE g DECIMAL(8,2); SET g = e; RETURN g; END; Si supponga di voler rappresentare l indirizzo di un impiegato in un RDBMS Sono possibili due opzioni: indirizzo: VARCHAR(n) rappresentare ogni componente dell indirizzo come un attributo separato 36 CREATE CAST(Euro AS Dollaro_USA) WITH FUNCTION f(euro); 39 ADT 37 Un abstract data type include: uno o più attributi uno o più metodi Gli attributi possono essere dichiarati come gli attributi di una tabella possono usare clausole default non è possibile specificare vincolo NOT NULL il tipo può essere instanziabile oppure no vedremo meglio dopo 40 CREATE TYPE t_indirizzo AS numero_civico INTEGER, via VARCHAR(50), città CHAR(20), stato CHAR(2), cap INTEGER NOT FINAL; t_indirizzo è un tipo complesso i cui attributi hanno tipi predefiniti ADT in SQL-99 ADT 38 Se ci sono solo attributi (completeremo in seguito la definizione): CREATE TYPE <nome tipo> AS <lista definizione attributi> [{INSTANTIABLE NOT INSTANTIABLE}] {FINAL NOT FINAL} INSTANTIABLE è il default 41 Gli ADT possono anche essere annidati: CREATE TYPE t_impiegato AS id id_impiegato, nome CHAR(20), curriculum TEXT, indirizzo t_indirizzo NOT FINAL;

8 ADT Gli ADT possono essere usati come: tipi di una colonna in una relazione tipi di una tabella (row type) Metodi Sugli ADT possono essere definiti (segnature di) metodi come parte della definizione del tipo: CREATE TYPE t_libro AS titolo CHAR(20), prezzo_vendita DECIMAL(9,2), prezzo_acquisto DECIMAL(9,2) NOT FINAL METHOD guadagno() RETURNS DECIMAL(9,2); ADT come tipo di colonna Gli ADT possono essere usati come tipi di una colonna di una relazione CREATE TABLE Impiegati ( imp# id_impiegato, nome CHAR(20), curriculum TEXT, indirizzo t_indirizzo); 46 Metodi I metodi sono funzioni definite dall utente associate ai tipi Possono essere scritti in linguaggi proprietari del DBMS o in linguaggi di programmazione standard (es. Java) La sintassi varia notevolmente a seconda del DBMS utilizzato definizione simile a quella delle funzioni differenza: i metodi hanno un parametro implicito che rappresenta l oggetto su cui il metodo viene invocato ADT come tipo di colonna Metodi in SQL-99 Tabella Impiegati imp# nome curriculum indirizzo numero_civico via città stato cap Vengono creati con il comando CREATE METHOD CREATE METHOD <nome metodo> (lista parametri) RETURNS <output data type> FOR <nome UDT> <corpo metodo> 44 47

9 CREATE METHOD guadagno() RETURNS DECIMAL(9,2) FOR t_libro RETURN (SELF.prezzo_vendita - SELF.prezzo_acquisto); CREATE FUNCTION guadagno(l t_libro) RETURNS DECIMAL(9,2) RETURN (l.prezzo_vendita - l.prezzo_acquisto); Incapsulazione Gli ADT possono essere incapsulati in questo caso, la loro manipolazione può avvenire solo mediante apposite funzioni automaticamente create dal DBMS al momento della creazione dell ADT Metodi in SQL-99 I metodi possono essere: metodi per le istanze (INSTANCE) invocabili a partire da un istanza del tipo metodi di tipo (STATIC) invocabili sul tipo il default è INSTANCE Incapsulazione in SQL-99 Incapsulazione stretta Tre tipi di metodi predefiniti costruttore: per creare una nuova istanza di ADT metodi observer: per formulare interrogazioni su ADT metodi mutator: per cambiare valori ad istanze di ADT TIPO = CLASSE CREATE TYPE t_libro AS titolo CHAR(20), prezzo_vendita DECIMAL(9,2), prezzo_acquisto DECIMAL(9,2) NOT FINAL INSTANCE METHOD guadagno() RETURNS DECIMAL(9,2), STATIC METHOD max_prezzo_vendita() RETURNS DECIMAL(9,2); Metodo costruttore Ad ogni ADT è automaticamente associato un metodo (costruttore) con lo stesso nome del tipo Il costruttore crea un'istanza del tipo al costruttore possono in genere essere passati i valori da assegnare alle componenti dell istanza creata 50 53

10 Costruttori in SQL-99 Metodi mutator Per ogni ADT T, esiste un costruttore T( ) Servono per modificare istanze di un ADT 54 t_indirizzo() t_indirizzo crea una nuova istanza del tipo t_indirizzo con gli attributi inizializzati ai valori di default (tali valori possono anche essere NULL) t_indirizzo(39, Comelico', 'Milano', 'IT', 20135) crea una nuova istanza del tipo t_indirizzo con gli attributi inizializzati in base ai valori forniti 57 numero_civico(integer) t_indirizzo via(varchar(50)) t_indirizzo città(char(20)) t_indirizzo stato(char(2)) t_indirizzo cap(integer) t_indirizzo vale anche per SQL-99 Costruttori in SQL-99 Dato un ADT T con attributi attr1,,attrn, un istanza per T viene indicata con T(v_attr1,,v_attrn), dove v_attr1,,v_attrn valori per gli attributi attr1,,attrn Vogliamo inserire la tupla nella tabella impiegati: imp# nome curriculum indirizzo numero_civico via città stato cap SM123 Smith NULL 14 Sauli Milano IT t_indirizzo(14, Sauli, Milano, IT,20135) 58 In due passi: creo la tupla inizializzando il campo indirizzo aggiorno i valori del campo indirizzo - inserimento 1 - inserimento 2 56 INSERT INTO Impiegati VALUES(SM123, Smith,NULL,t_indirizzo(14, Sauli', Milano,'IT', 20135)); imp# nome curriculum indirizzo numero_civico via città stato cap SM123 Smith NULL 14 Sauli Milano IT INSERT INTO Impiegati VALUES(SM123, Smith,NULL,t_indirizzo()); UPDATE Impiegati SET indirizzo = indirizzo.numero_civico(14) WHERE imp# = SM123 ; UPDATE Impiegati indirizzo = indirizzo.via( Sauli ) WHERE imp# = SM123 ;.

11 - inserimento 3 Selezione BEGIN DECLARE i t_indirizzo; SET i = t_indirizzo(); SET i = i.numero_civico(14); SET i = i.via( Sauli ); SET i = i.città( Milano ); SET i = i.stato( IT ); SET i = i.cap(20135); INSERT INTO impiegati VALUES ( SM123, Smith,NULL,i); END; La selezione di una colonna ADT restituisce un istanza di quel tipo SELECT indirizzo FROM Impiegati WHERE imp# = SM123 si ottiene t_indirizzo(14, Sauli, Milano, IT,20135) Metodi observer Per ogni componente di un ADT è automaticamente creato dal sistema un metodo observer con lo stesso nome della componente: numero_civico( ) ----> INTEGER via( ) ----> VARCHAR(50) città( ) ----> CHAR(20) stato( ) ----> CHAR(2) cap( ) ----> INTEGER Cancellazione DELETE FROM Impiegati WHERE indirizzo = t_indirizzo(14, Sauli, Milano, IT,20135); 61 Anche in SQL Esempi di selezione con metodo observer SELECT nome FROM Impiegati WHERE indirizzo.città( ) = Milano OR indirizzo.città( ) = Roma ; SELECT indirizzo.città() FROM impiegati WHERE nome = Smith ; Update UPDATE Impiegati SET indirizzo = indirizzo.n_civico(18) WHERE imp# = SM123 ; UPDATE Impiegati WHERE indirizzo = t_indirizzo(18, XX Settembre, Genova, IT,16100); 62 65

12 Uso di metodi nelle query Cancellazione e modifica tipi CREATE TYPE t_libro AS titolo CHAR(20), prezzo_vendita DECIMAL(9,2), prezzo_acquisto DECIMAL(9,2) NOT FINAL METHOD guadagno() RETURNS DECIMAL(9,2); CREATE TABLE biblioteca (codl# INTEGER, libro t_libro); DROP TYPE <nome_tipo> {CASCADE RESTRICT}; ALTER TYPE <nome_tipo> <operazione_di_modifica>; <operazione_di_modifica>::= ADD ATTRIBUTE <definizione_attributo> DROP ATTRIBUTE <nome_attributo> 66 SELECT b.libro.guadagno( ) FROM biblioteca b WHERE b.libro.titolo() = La Divina Commedia ; 69 Vincoli di integrità Non è possibile definire vincoli di PRIMARY KEY, UNIQUE, FOREIGN KEY su un campo ADT Motivazione concettualmente tutto è OK problemi legati all efficienza Row type Un ADT può anche essere usato come tipo di una intera tabella (row type) Le righe della tabella sono istanze del tipo mentre le colonne coincidono con gli attributi del tipo Operazioni Row type 68 Casting definito dall utente tra ADT e altro tipo possibilità di definire funzioni di ordinamento e di confronto non le vediamo 71 Permettono di: definire un insieme di tabelle che condividono la stessa struttura (typed tables) modellare in modo intuitivo le associazioni tra dati in tabelle diverse (referenceable tables) definire gerarchie di tabelle TUPLA DI UNA TYPED TABLE = OGGETTO ogni tupla è associata ad un identificatore, che rappresenta un campo aggiuntivo per ogni tabella ed è unico nel sistema per default, gli identificatori sono generati dal sistema esistono altre modalità, non le vediamo

13 Typed tables in SQL-99 Typed tables in SQL CREATE TABLE <nome_tabella> OF <nome_tipo_complesso> [(REF IS <nome_campo_tid>)] la clausola REF IS indica il nome di un attributo (distinto dai precedenti) nel quale verranno inseriti gli identificatori di tupla (TID - tuple identifier) il campo identificatore è sempre il primo campo nello schema della tabella se la clausola manca, il campo contenente gli identificatori esiste, è generato dal sistema ma è trasparente all utente (non selezionabile) 75 Quando si crea una typed table è possibile aggiungere vincoli di integrità sugli attributi dell ADT su cui si basa (purché il tipo corrispondente lo permetta) CREATE TABLE <nome_tabella> OF <nome_tipo_complesso> [(REF IS <nome_campo_tid>, <vincoli>)] Si supponga di voler memorizzare informazioni sui progetto a cui gli impiegati lavorano CREATE TYPE t_progetto AS prj# INTEGER, nome VARCHAR(20), descrizione VARCHAR(50), budget INTEGER NOT FINAL; CREATE TYPE t_progetto AS prj# INTEGER, nome VARCHAR(20), descrizione VARCHAR(50), budget INTEGER NOT FINAL; CREATE TABLE progetti OF t_progetto (PRIMARY KEY (prj#)); OK CREATE TABLE progetti OF t_progetto (prj# INTEGER PRIMARY KEY); NO Row type CREATE TABLE Progetti OF t_progetto (REF IS my_tid); Progetti my_tid prj# nome descrizione budget Oracle ORDBMS 10,000,000 Nessun meccanismo di incapsulazione L incapsulazione c e solo quando un ADT è usato come tipo di una colonna Gli attributi del row type sono visti come colonne della tabella (inclusa la colonna TID, che può essere selezionata) Le interrogazioni sono eseguite nel modo standard 74 77

14 Selezione SELECT prj# FROM Progetti WHERE budget > 1,000,000; SELECT my_tid FROM Progetti WHERE budget > 1,000,000; Si supponga di voler memorizzare informazioni sugli impiegati ed i progetti a cui lavorano In un RDBMS avrei due tabelle Impiegati e Progetti Nella tabella Impiegati è presente una colonna che indica il progetto a cui l impiegato lavora (chiave esterna) Inserimento INSERT INTO Progetti(Prj#,Nome,Descrizione,Budget) VALUES(14, sviluppo DB, sviluppo DB in Oracle, 20,000,000); Impiegati imp# prj# Progetti prj# nome nessun valore viene specificato per il campo identificatore SM Oracle Tipi riferimento Tipi riferimento I row type possono essere combinati con i tipi riferimento (REF type) Permettono di rappresentare facilmente le associazioni tra istanze di tipi Tali tipi permettono ad una colonna di riferire una tupla in un'altra relazione Una tupla in una relazione viene identificata tramite il suo TID In un ORDBMS ho due opzioni in più: definire un ADT t_progetto e usare questo come tipo di una colonna della relazione Impiegati (ridondanza dei dati perché lo stesso progetto può essere memorizzato molte volte in Impiegati) definire una tabella basata su un nuovo tipo complesso e riferire le colonne istanza di questo nuovo tipo tipo riferimento 80 83

15 Tipi riferimento in SQL REF (<tipo_adt>) [SCOPE <nome_tabella> [<reference_scope_check>]] la clausola SCOPE specifica una typed table su <tipo_adt> e indica che i valori ammessi per il tipo riferimento sono i puntatori alle tuple della type table indicata se la clausola di scope non è specificata, lo scope implicito è rappresentato da tutti i puntatori a tuple con row type <tipo_adt> 87 CREATE TABLE Impiegati( imp# id_impiegato, nome VARCHAR(50), indirizzo t_indirizzo, assegnamento REF(t_progetto) SCOPE Progetti REFERENCES ARE CHECKED ON DELETE CASCADE); Si associa un impiegato ad un progetto Uno stesso progetto può essere associato a più impiegati Se si cancella un progetto, si cancellano anche tutti gli impiegati assegnati a quel progetto Tipi riferimento in SQL La clausola di SCOPE rappresenta una sorta di vincolo di chiave esterna nel modello relazionale problema integrità referenziale anche in questo contesto <reference_scope_check> è una clausola che indica come è possibile mantenere l integrità, analogamente a quanto visto per le chiavi esterne 88 CREATE TABLE Impiegati( imp# id_impiegato, nome VARCHAR(50), indirizzo t_indirizzo, assegnamento REF(t_progetto) SCOPE Progetti REFERENCES ARE CHECKED ON DELETE RESTRICT); Un progetto può essere cancellato sono se non ci sono impiegati assegnati a quel progetto Tipi riferimento in SQL-99 <reference_scope_check> = REFERENCES ARE [NOT] CHECKED [ON DELETE {CASCADE SET NULL SET DEFAULT RESTRICT NO ACTION}] significato analogo al contesto relazionale poichè il TID è considerato immutabile, nessuna clausola ON UPDATE default: RESTRICT CREATE TYPE t_impiegato AS imp# id_impiegato, nome CHAR(20), curriculum TEXT, indirizzo t_indirizzo, dipartimento REF(t_dipartimento) NOT FINAL; CREATE TABLE Impiegati OF t_impiegato (REF IS my_tid); 86 89

16 Tipi riferimento in SQL-99 CREATE TYPE t_dipartimento AS dip# INTEGER, nome VARCHAR(30), manager REF (t_impiegato) NOT FINAL ; Possibilità di estendere la definizione di una typed table con ulteriori attributo con reference type CREATE TABLE Dipartimenti OF t_dipartimento (REF IS my_tid); Impiegati imp# nome... dipartimento CREATE TABLE Progetti OF t_progetto (prog_ref REF(t_progetto)); Progetti dip# nome manager Prog_ref prj# nome descrizione budget 12 Oracle ORDBMS 10,000, Dipartimenti 94 Tipi riferimento in SQL-99 - manipolazione La colonna dipartimento di Impiegati punta ad una tupla della tabella Dipartimenti (quelle corrispondente al dipartimento in cui lavora l impiegato) La colonna impiegati di Dipartimenti punta ad una tupla della tabella Impiegati (quella che corrisponde al manager del dipartimento) Valori di tipi riferimento possono essere confrontati solo utilizzando = e <> Casting può essere definito tra reference type e ADT target o tipo built-in 92 95

17 Tipi riferimento in SQL-99 - manipolazione Funzione di deferenziazione DEREF: riceve in input un espressione che restituisce un valore (puntatore) per un tipo riferimento con scope non vuoto restituisce il valore puntato dallo stesso (quindi la tupla puntata) Funzione di riferimento riceve in input un espressione che restituisce un valore di tipo riferimento e un attributo dell ADT a cui punta il tipo riferimento restituisce il valore per quell attributo per la tupla puntata SELECT deref(manager).nome FROM Dipartimenti WHERE nome = Dischi ; Restituisce il nome del manager del dipartimento Dischi SELECT manager FROM Dipartimenti WHERE nome = Dischi ; SELECT manager -> nome FROM Dipartimenti WHERE nome = Dischi ; Restituisce un puntatore ad un impiegato (cioè l oid dell impiegato che è manager del dipartimento Dischi) Restituisce il nome del manager del dipartimento Dischi Equivalente all interrogazione precedente Integrità referenziale SELECT deref(manager) FROM Dipartimenti WHERE nome = Dischi ; Gli identificatori vengono assegnati dal sistema l utente non li conosce a priori Problema: 98 Restituisce informazioni sul manager del dipartimento Dischi (un intera riga della tabella Impiegati) 10 1 Come garantire l integrità referenziale di una tabella che contiene un tipo riferimento? Soluzione: si utilizzano sottoquery per determinare gli identificatori da assegnare alle nuove tuple

18 Tipi riferimento in SQL-99 - restrizioni CREATE TABLE Impiegati( imp# id_impiegato, nome VARCHAR(50), indirizzo t_indirizzo, assegnamento REF(t_progetto) SCOPE Progetti REFERENCES ARE CHECKED ON DELETE RESTRICT); PRIMARY KEY, UNIQUE, FOREIGN KEY non possono essere definiti 10 2 CREATE TABLE Progetti OF t_progetto (REF IS My_TID, prog_ref REF(t_progetto)); 10 5 Integrità referenziale Tipi collezione e tipi tupla 10 3 Quando inseriamo una tupla nella tabella impiegati, al campo assegnamento dobbiamo assegnare l identificatore di una tupla della tabella Progetti Due passi: inseriamo la tupla assegnando NULL al campo con tipo riferimento modifichiamo il contenuto del campo con un UPDATE 10 6 Tipi collezione 10 4 INSERT INTO Impiegati VALUES (2, Mario Rossi, t_indirizzo( ),NULL); UPDATE Impiegati SET assegnamento = (SELECT my_tid FROM Progetti WHERE nome = Oracle ) WHERE imp# = 2; 10 7 I tipi collezione definiscono dei contenitori per oggetti con struttura simile Non esiste ancora una standardizzazione sull insieme di tipi collezione supportati dai vari ORDBMS set bag liste array

19 Tipi collezione in SQL Il solo tipo collezione incluso in SQL-99 è ARRAY <nome campo> <tipo> ARRAY[<dimensione>] <dimensione> è un valore intero Costruttore: ARRAY[<valore_1>,,<valore_n>] accesso: <nome_campo>[i] dove i è un valore intero tra 1 e n 11 1 INSERT INTO Impiegati VALUES (2, Mario Rossi,ARRAY[ Oracle, Unix, Java ]); SELECT * FROM Impiegati WHERE competenze[2] = Unix ; Tipi collezione in SQL Il numero di elementi in un array è un qualunque numero tra 0 (ARRAY[ ]) e il numero massimo di elementi per l array dichiarato implicitamente, esiste un parametro lunghezza, gestito direttamente dal sistema 11 2 CREATE TYPE t_impiegato AS imp#id_impiegato, nome VARCHAR(30), indirizzo t_indirizzo, manager REF(t_impiegato), progetti REF(t_progetti) ARRAY[10], figli REF(t_persona) ARRAY[10], hobby VARCHAR(20) ARRAY[5] NOT FINAL; CREATE TABLE Impiegati OF t_impiegato; CREATE TABLE Impiegati( imp# id_impiegato, nome VARCHAR(50), competenze VARCHAR(20) ARRAY[3]); UPDATE Impiegati SET competenze = ARRAY[ Oracle, Unix ]; UPDATE Impiegati SET competenze = ARRAY[ SQL Server ]; il nuovo array contiene un solo elemento (la lunghezza viene cambiata)

20 Tipi collezione in SQL-99 - manipolazione Tipi tupla in SQL-99 Casting cast sul tipo degli elementi e eventuale riduzione numero elementi assegnamento: usuale troncamento genera errore confronto: SQL-99 mette a disposizione un nuovo dominio per la rappresentazione di tipi record chiamati row type non richiedono la definizione di un ADT ma possono essere direttamente associati al tipo =, <> Tipi collezione in SQL-99 - manipolazione Tipi tupla in SQL-99 funzioni concatenazione Tipo ROW (<def campo_1>,,<def campo_n>) CONCATENATE (<array_expression> WITH <array_expression> cardinalità CARDINALITY(<array_expression>) esempio: ROW(numero_civico INTEGER, via VARCHAR(50), città CHAR(20), stato cap CHAR(2), INTEGER) Tipi collezione in SQL-99 - restrizioni Per i campi di tipo array non possono essere definiti vincoli UNIQUE, PRIMARY KEY, FOREIGN KEY CREATE TABLE Impiegati ( imp# id_impiegato, nome CHAR(20), curriculum TEXT, indirizzo ROW( numero_civico INTEGER, via VARCHAR(50), città CHAR(20), stato CHAR(2), cap INTEGER) );

21 Tipi tupla in SQL Valori: ROW(<valore tipo_1,,valore tipo_n>) : ROW(3, XX Settembre, Genova, IT,16100) anche le tuple restituite da una query sono viste come valori del tipo tupla le componenti di una tupla possono essere accedure utilizzando la dot notation 12 3 SELECT Nome FROM Impiegati WHERE Indirizzo.città = Genova ; Tipi tupla in SQL-99 - manipolazione 12 1 INSERT INTO Impiegati VALUES (3, Rossi,NULL, ROW(3, XX Settembre, Genova, IT,16100)) 12 4 Assegnamento: stesso numero di campi tipi compatibili confronto: =, <>, <, <=, >, >= ordinamento lessicografico, basato sui tipi delle componenti i valori devono avere lo stesso numero di elementi la presenza di NULL può ovviamente generare UNKNOWN 12 2 CREATE TABLE Indirizzi ( Iid INTEGER, Via VARCHAR(20), Città VARCHAR(20), Stato VARCHAR(20), cap INTEGER); UPDATE Impiegati SET Indirizzo = (SELECT t from Indirizzi t WHERE Iid = 3) WHERE nome = Rossi ; 12 5 ROW(1,1,1) = ROW(1,1,1) ROW(1,1,1) = ROW(1,2,1) ROW(1,NULL,1) = ROW(2,2,1) ROW(1,NULL,1) = ROW(1,2,1) ROW(1,1,1) <> ROW(1,2,1) ROW(2,NULL,2) <> ROW(2,2,1) ROW(2,2,1) <> ROW(2,2,1) ROW(1,NULL,1) <> ROW(1,2,1) ROW(1,1,1) < ROW(1,2,0) ROW(1,NULL,1) < ROW(2,NULL,0) ROW(1,1,1) < ROW(1,1,1) ROW(3,NULL,1) < ROW(2,NULL,0) ROW(1,NULL,1) < ROW(1,2,0) ROW(NULL,1,1) < ROW(2,1,0) TRUE FALSE FALSE UNKNOWN TRUE TRUE FALSE UNKNOWN TRUE TRUE FALSE FALSE UNKNOWN UNKNOWN

22 Tipi tupla in SQL-99 Ereditarietà Non possono essere associati a vincoli di PRIMARY KEY, UNIQUE, FOREIGN KEY Un sottotipo eredita gli attributi, i metodi, ed i vincoli definiti per i suoi supertipi Il sottotipo può raffinare il supertipo con nuovi attributi e metodi Nel sottotipo è anche possibile ridefinire metodi ereditati Ereditarietà Ereditarietà Si possono distinguere due tipi di ereditarietà Ereditarietà di tipi Ereditarietà di tabelle Ereditarietà Ereditarietà di tipi Possibilità di definire relazioni di supertipo/sottotipo L ereditarietà consente di specializzare i tipi esistenti a seconda delle esigenze dell applicazione Si considerino le seguenti entità: Camion: modello CHAR(20), n_licenza INTEGER, ultima_revisione DATE, Bus: modello n_licenza ultima_revisione CHAR(20), INTEGER, DATE, peso INTEGER, n_posti INTEGER, prox_revisione() DATE prox_revisione() DATE

23 Ereditarietà di tipi Nel modello relazionale sono necessarie due tabelle e due procedure In un ORDBMS, camion e bus possono essere considerati specializzazioni di un tipo comune: Veicolo Si definisce quindi un tipo veicolo contenente le caratteristiche comuni di camion e bus Camion e bus sono definiti come sottotipi di Veicolo, con delle caratteristiche aggiuntive CREATE TYPE t_veicolo AS modello CHAR(20), n_licenza INTEGER, ultima_revisione DATE, METHOD prox_revisione( ) RETURNS DATE NOT FINAL; Ereditarietà di tipi in SQL Per ADT ereditarietà singola CREATE TYPE <nome_tipo> UNDER <nome_supertipo> AS altri attributi [NOT] FINAL; il supertipo deve essere stato dichiarato con la clausola NOT FINAL 13 6 CREATE TYPE t_camion UNDER t_veicolo AS peso INTEGER NOT FINAL; CREATE TYPE t_bus UNDER t_veicolo AS n_posti INTEGER NOT FINAL; Ereditarietà di tipi in SQL-99 Metodi & ereditarietà 13 4 Clausola FINAL: non si possono definire sottotipi Clausola NOT FINAL: si possono definire sottotipi la clausola NOT FINAL è necessaria se la dichiarazione non specifica una superclasse in caso contrario si può scegliere 13 7 CREATE TYPE t_persona AS nome CHAR(20), id INTEGER, data_di_nascita DATE, indirizzo t_indirizzo, METHOD età() RETURNS INTEGER NOT FINAL; CREATE TYPE t_insegnante UNDER t_persona AS stipendio DECIMAL(9,2), data_assunzione DATE, corso t_corso NOT FINAL;

24 Metodi & ereditarietà Sostituibilità 13 8 I metodi sono ereditati dai sottotipi allo stesso modo degli attributi: CREATE TABLE Insegnanti OF t_insegnante; SELECT nome, I.età( ) FROM Insegnanti I WHERE stipendio > 3000; 14 1 Negli OODBMS vale il principio della sostituibilità Un istanza di un tipo può essere utilizzata ovunque ci si aspetti un istanza del suo supertipo Questo principio non vale negli attuali ORDBMS per garantire sostituibilità: funzione di CAST Metodi & ereditarietà Ereditarietà di tabelle 13 9 E possibile ridefinire un metodo ereditato non è possibile ridefinire gli attributi Ad esempio al tipo t_insegnante può essere associato un metodo età che restituisce l anzianità di servizio (overriding) CREATE TYPE t_insegnante UNDER t_persona AS stipendio DECIMAL(9,2), data_assunzione DATE, corso t_corso OVERRIDING METHOD età() RETURNS INTEGER NOT FINAL; 14 2 Le typed tables possono essere organizzate in gerarchie di ereditarietà questo è possibile solo se i tipi su cui si basato sono in relazione d ereditarietà permette di estendere operazioni SQL alle istanze di una tabella e di tutte le sue sottotabelle Tipi non instanziabili 14 0 La dichiarazioni di un tipo specifica se il tipo può essere instanziato (quindi ha istanze proprio) oppure no CREATE TYPE <nome tipo> AS <lista definizione attributi> [{INSTANTIABLE NOT INSTANTIABLE}] {FINAL NOT FINAL} Il default è INSTANTIABLE un tipo non instanziabile corrisponde ad una classe astratta: serve solo per riuso di codice 14 3 CREATE TABLE persone OF t_persona; CREATE TABLE insegnanti of t_insegnante UNDER persone; E stata creata una gerarchia tra le tabelle persone e insegnanti

25 Interrogazioni La gerarchia d ereditarietà definita sulle tabelle influenza i risultati delle interrogazioni Una interrogazione fatta su una tabella si propaga automaticamente alle sottotabelle Lo stesso vale per le operazioni di cancellazione e modifica mentre una operazione di inserimento coinvolge solo una specifica tabella se si vuole restringere l operazione alle istanze di una certa tabella: ONLY DELETE FROM Persone WHERE id > 80; Cancellerà John dalla tabella Persone e Allen e Mark dalla tabella Insegnanti Relazioni tra OODBMS e ORDBMS 14 5 nome id data_di_nascita indirizzo Smith 74 16/8/68 John 86 3/2/48 nome id data_di_nascita indirizzo Allen 82 9/7/67 Mark 81 3/5/58 Persone stipendio. 30ml 60ml Insegnanti 14 8 Valori complessi array row Oggetti: tuple di typed tables identificatore incapsulazione Classi ADT (è presente il costruttore) metodi (overloading e overriding) collezioni: typed table aggregazioni: tipi REF Relazioni tra OODBMS e ORDBMS SELECT nome FROM Persone WHERE data_di_nascita > 1/1/1967; Il risultato sarà: Smith e Allen SELECT nome FROM ONLY Persone WHERE data_di_nascita > 1/1/1967; Ereditarietà singola riuso di codice no sostituibilità su tipi e typed tables linguaggio SQL con estensioni per la manipolazione dei nuovi tipi di dato accesso navigazione e associativo un interrogazione restituisce sempre un insieme di tuple 14 6 Il risultato sarà: Smith 14 9

26 15 0 Progettazione di ORDBMS 15 3 Approccio partendo da schemi ER Progettazione logica: attributo composito: tipo tupla oppure ADT Ogni attributo multivalore viene tradotto in un tipo collezione (ARRAY per SQL-99) Ogni entità: se non ha metodi può essere tradotta in una tabella, o tramite l opzione successiva se ha metodi viene tradotta in un tipo su cui basare una tabella Le gerarchie di generalizzazione vengono tradotte mediante relazioni di sottotipo Progettazione di ORDBMS Approccio partendo da schemi ER Non esiste ancora una metodologia di progettazione consolidata come per gli ORDBMS né tool a supporto dell attività di progettazione Associazioni 1-1/1-n = tipo riferimento n-n: nuove tabelle Approccio partendo da schemi ER Approccio partendo da uno schema OO Progettazione concettuale: schema ER Ristrutturazione: ridotta non si eliminano attributi multivalore/compositi e gerarchie di generalizzazione gli identificatori esterni/misti devono essere eliminati Ogni tipo composito (struct) tipo tupla o tipo complesso ogni tipo multivalore (set, bag, list) tipo collezione

27 Approccio partendo da uno schema OO Tipi oggetto ogni classe Possibilità di definire tipi oggetto (ADT): se non ha metodi: 15 6 si crea direttamente la tabella i tipi degli attributi vengono modificati in base a quanto sopra se ha metodi: si crea un opportuno ADT si crea tabella basata su quell ADT per ogni attributo aggregato: aggregazione semplice: si specifica un tipo riferimento con scope uguale alla tabella corrispondente alla classe riferita aggregazione complessa: si specifica un tipo collezione definito su un tipo riferimento 15 9 specifica corpo Dichiarazione di attributi Specifica dei metodi Body dei metodi 15 7 Aspetti relazionali ad oggetti di Oracle 9i 16 0 CREATE TYPE Complesso AS OBJECT( parte_r FLOAT, parte_i FLOAT, MEMBER FUNCTION somma(x Complesso) RETURNS Complesso, MEMBER FUNCTION sottrazione(x Complesso) RETURNS Complesso, MEMBER FUNCTION moltiplicazione(x Complesso) RETURNS Complesso, MEMBER FUNCTION divisione(x Complesso) RETURNS Complesso); Il sistema di tipi di Oracle 15 8 Non distinct type Tipi oggetto tipi riferimento tipi collezione ereditarietà 16 1 CREATE TYPE BODY Complesso AS MEMBER FUNCTION somma(x Complesso) RETURN Complesso IS BEGIN RETURNS Complesso(parte_r + x.parte_r,parte_i + x.parte_i); END somma; MEMBER FUNCTION sottrazione(x Complesso) RETURN Complesso IS BEGIN RETURNS Complesso(parte_r - x.parte_r,parte_i - x.parte_i); END sottrazione;. END;

28 Tipi oggetto Metodi speciali Vale tutto quello che abbiamo detto per SQL- 99 con le seguenti differenze: concetto di body incapsulazione non stretta: accesso diretto agli attributi tramite dot notation Costruttori come in SQL-99 Metodi MAP Metodi ORDER Metodi Metodi MAP 16 3 Possono essere sia procedure che funzioni due tipi: MEMBER definiti sulle istanze parametro implicito: SELF STATIC definiti sul tipo 16 6 Permettono di confrontare istanze di ADT mappando le istanze a valori di tipi built-in (DATE, NUMBER, VARCHAR) rappresentano quindi un casting tra un ADT e uno dei tipi precedenti se esiste un metodo MAP per un ADT, i confronti su oggetti di quel tipo vengono effettuati convertendo prima le istanze nei valori del tipo built-in considerato 16 4 CREATE TYPE Rational AS OBJECT (num INTEGER, den INTEGER, MEMBER PROCEDURE normalize,... ); CREATE TYPE BODY Rational AS MEMBER PROCEDURE normalize IS g INTEGER; BEGIN g := gcd(self.num, SELF.den); g := gcd(num, den); -- equivalent to previous line num := num / g; den := den / g; END normalize;... END; 16 7 CREATE TYPE Rectangle_typ AS OBJECT ( len NUMBER, wid NUMBER, MAP MEMBER FUNCTION area RETURN NUMBER,... ); CREATE TYPE BODY Rectangle_typ AS MAP MEMBER FUNCTION area RETURN NUMBER IS BEGIN RETURN len * wid; END area;... END;

29 Se o1 e o2 sono istanze del tipo rectangle_typ: o1 < o2 è equivalente a o1.area() < o2.area() la relazione viene stabilita su due istanze del tipo NUMBER CREATE TYPE Customer_typ AS OBJECT ( id NUMBER, name VARCHAR2(20), addr VARCHAR2(30), ORDER MEMBER FUNCTION match (c Customer_typ) RETURN INTEGER ); Metodi ORDER 16 9 Implementano una relazione d ordine tra le istanze di un certo tipo hanno sempre un parametro di tipo uguale a quello per cui il metodo viene definito utili per confrontare tipi di dato molto complessi che non potrebbero facilmente essere confrontati con un metodo MAP se esiste un metodo ORDER, il metodo viene automaticamente chiamato quando si confrontano istanze del tipo considerato 17 2 CREATE TYPE BODY Customer_typ AS ORDER MEMBER FUNCTION match (c Customer_typ) RETURN INTEGER IS BEGIN IF id < c.id THEN RETURN -1; -- any negative number will do ELSIF id > c.id THEN RETURN 1; -- any positive number will do ELSE RETURN 0; END IF; END; END; Metodi ORDER Tabelle tipate 17 0 L output è sempre un intero che vale: - 1 : SELF < parametro 0 : SELF = parametro +1 : SELF > parametro per un ADT, può esistere al più un metodo MAP o ORDER se nessuno dei due viene definito, il sistema supporta solo = e <> 17 3 Anche in Oracle un tipo ADT può essere utilizzato secondo due modalità: come tipo per un attributo di una tabella come tipo di base per la definizione di una typed table non può essere specificata una colonna per gli identificatori (no clausola REF IS)

30 Tipi oggetto: accesso Tipi riferimento Accesso tramite dot notation ad attributi e metodi se si usa la dot notation, è sempre necessario utilizzare un alias per la tabella acceduta Vale quanto visto per SQL-99 cambia un minimo la sintassi REF <nome tipo> SCOPE IS <nome_tabella> Tipi riferimento - manipolazione CREATE TYPE person AS OBJECT (ssno VARCHAR(20)); CREATE TABLE ptab1 OF person; CREATE TABLE ptab2 (c1 person); SELECT ssno FROM ptab1 ; SELECT c1.ssno FROM ptab2 ; SELECT ptab2.c1.ssno FROM ptab2 ; OK Errore Errore Tre funzioni principali: referenziazione ref( ): dato un oggetto di un certo tipo, restituisce l identificatore per quell oggetto dereferenziazione deref( ): dato un identificatore, restituisce l oggetto value ( ): prende un alias di relazione e restituisce l oggetto tupla associato (utilizzando il costruttore opportuno) 17 5 SELECT p.c1.ssno FROM ptab2 p ; OK 17 8 Sintassi Comandi Tipi riferimento 17 6 CREATE TYPE typename AS OBJECT (attrname datatype {, attrname datatype}); CREATE OR REPLACE TYPE BODY typename IS metodo {metodo}; CREATE TABLE tablename OF typename ([attrname NOT NULL] {,attrname NOT NULL} [,PRIMARY KEY (attrname {,attrname })]); DROP TYPE typename; DROP TABLE tablename; ALTER TYPE typename REPLACE AS OBJECT (nuova definizione tipo) CREATE OR REPLACE TYPE BODY typename IS metodo {metodo}; 17 9 CREATE TYPE t_persona AS OBJECT( nome VARCHAR2(10), cognome VARCHAR2(15), data_di_nascita DATE, indirizzo t_indirizzo, madre REF t_persona, padre REF t_persona); CREATE TABLE Persone OF t_persona;

31 Tipi riferimento Persone nome cognome... madre padre Tipi riferimento UPDATE Persone p SET p.madre = (SELECT ref(d1) FROM Persone d1 WHERE nome = 'Maria') WHERE nome = Giovanni'; La madre di Giovanni Rossi è Maria Bianchi Tipi riferimento Tipi riferimento INSERT INTO Persone VALUES( Mario, Rossi,,NULL,NULL); Persone nome cognome... madre padre INSERT INTO Persone VALUES(t_persona( Maria, Bianchi,,NULL,NULL)); Mario Rossi NULL NULL Maria Bianchi NULL NULL 18 1 INSERT INTO Persone VALUES( Giovanni, Rossi,,NULL,NULL); 18 4 Giovanni Rossi NULL Tipi riferimento Tipi riferimento Persone SELECT value(p) FROM Persone p 18 2 nome cognome... madre padre Mario Rossi NULL NULL Maria Bianchi NULL NULL Giovanni Rossi NULL NULL 18 5 si ottiene: t_persona( Mario, Rossi,NULL,NULL) t_persona( Maria, Bianchi,NULL,NULL) t_persona( Giovanni, Rossi,xxxyyywww,NULL) dove xxxyyywww è l identificatore della tupla di Maria Bianchi

32 Tipi riferimento Tipi collezione 18 6 SELECT deref(p.madre) FROM Persone p WHERE nome = Giovanni ; Seleziona tutte le informazioni contenute in Persone relative alla madre di Giovanni restituisce t_persona( Maria, Bianchi,NULL,NULL) 18 9 Non possono essere direttamente usati nella definizione di un attributo è sempre necessario dare un nome al tipo collezione prima di usarlo per ogni tipo, esiste un costruttore per creare un istanza, è necessario passare al costruttore un insieme di elementi del tipo su cui il tipo collezione si basa Tipi collezione Varray - creazione 18 7 Due tipi collezione: nested table varray I tipi collezione possono avere come elementi istanze di tipi oggetto Un tipo oggetto può avere un attributo di tipo collezione 19 0 CREATE TYPE Progetto AS OBJECT( id INTEGER, titolo VARCHAR2(25), costo NUMBER(7,2)); CREATE TYPE Lista_Progetti AS VARRAY(50) OF Progetto; CREATE TYPE Dipartimento AS OBJECT( id INTEGER, nome VARCHAR2(15), budget NUMBER(11,2), progetti Lista_Progetti); CREATE TABLE Dipartimenti OF Dipartimento; Tipi collezione Varray - inserimento 18 8 Le nested table possono essere considerate come una tabella con una sola colonna differenze tra varray e nested table: gli array hanno dimensione fissa mentre le nested table hanno dimensione variabile gli array sono memorizzati all interno della tabella nella quale sono utilizzati o come BLOB mentre le nested table sono memorizzate in tabelle separate, con una colonna in più che identifica una tupla della tabella a cui appartengono 19 1 INSERT INTO Dipartimenti VALUES(30, R&D, , Lista_Progetti(Progetto(1, DBMS, ), Progetto(3, C++, ))); INSERT INTO Dipartimenti VALUES(32, Marketing, , Lista_Progetti(Progetto(1, Nuova Pubblicità, ), Progetto(3, Incentivi Personale, )));

33 Nested table - creazione Nested table: inserimento CREATE TYPE Corso AS OBJECT( id NUMBER(4), nome VARCHAR2(25), crediti NUMBER(1)); CREATE TYPE Lista_Corsi AS TABLE of Corso; INSERT INTO Dipartimenti VALUES( Informatica, Italiani, Lista_Corsi(Corso(1000, Programmazione I,2), Corso(1001, Logica Matematica,1), Corso(1002, Basi di Dati,2), Corso(1003, Grafica,1))); Nested table - creazione CREATE TYPE Dipartimento AS OBJECT( nome VARCHAR2(20), direttore VARCHAR2(20), corsi Lista_Corsi) NESTED TABLE corsi STORE AS corsi_tab; CREATE TABLE Dipartimenti OF Dipartimento NESTED TABLE corsi STORE AS corsi_tab; Tipi collezione - interrogazione Due possibilità selezionare la collezione annidata una tupla per ogni collezione selezionare la collezione, non annidata una tupla per ogni elemento della collezione funzione TABLE applicabili sia a VARRAY che NESTED TABLE Nested Table - creazione Selezione annidata - esempio 19 4 Notare la clausola NESTED TABLE nel lucido precedente Questa clausola è necessaria perché le colonne definite come nested table sono memorizzate come tabelle separate Il formato generale della clausola è NESTED TABLE colname STORE AS tablename La tabella tablename si dice child-table della tabella al cui interno è definita (detta parent-table ) Una child-table può essere acceduta solo tramite la parent-table 19 7 SELECT corsi FROM Dipartimenti; il risultato è Lista_Corsi(Corso(1000, Programmazione I,2), Corso(1001, Logica Matematica,1), Corso(1002, Basi di Dati,2), Corso(1003, Grafica,1))

34 Selezione non annidata - esempio SELECT t.* FROM Dipartimenti d, TABLE(d.corsi) t; il risultato è SELECT * FROM TABLE(SELECT corsi FROM Dipartimenti WHERE nome = Psicologia ); restituisce le informazioni sui corsi del dipartimento Psicologia 19 8 Corso(1000, Programmazione I,2) Corso(1001, Logica Matematica,1) Corso(1002, Basi di Dati,2) Corso(1003, Grafica,1) 20 1 SELECT crediti FROM TABLE(SELECT corsi FROM Dipartimenti WHERE nome = Psicologia ); restituisce i crediti di tutti i corsi del dipartimento Psicologia le interrogazioni sono corrette se le query a cui viene applicata la funzione TABLE restituiscono un solo elemento Funzione TABLE Tipi collezione - DML 19 9 La funzione TABLE prende un valore di tipo collezione e permette di utilizzarlo come una tabella la query precedente realizza un join di ogni tupla della tabella dipartimento con ogni elemento dell oggetto collezione può anche essere applicata a query che restituiscono un singolo valore di tipo collezione 20 2 Nested table: la funzione TABLE può essere utilizzata per modificare una collezione VARRAY: A differenza delle nested table, i singoli elementi di un varray non possono essere manipolati mediante istruzioni SQL Per selezionare o fare l update di un certo elemento di un VARRAY è necessario usare PL/SQL supporto di funzioni specifiche per la manipolazione degli array Nested tables SELECT d.nome, t.* FROM Dipartimenti d, TABLE(d.corsi) t; il risultato è UPDATE TABLE(SELECT corsi FROM Dipartimenti WHERE nome = Psicologia ) SET crediti = crediti + 1 WHERE id IN (2200,3540); 20 0 Informatica Informatica Informatica Informatica Corso(1000, Programmazione I,2) Corso(1001, Logica Matematica,1) Corso(1002, Basi di Dati,2) Corso(1003, Grafica,1) 20 3 DELETE FROM TABLE(SELECT corsi FROM Dipartimenti WHERE nome = Inglese ) p WHERE p.crediti = 2;

35 Varray Sostituibilità a livello di attributo 20 4 DECLARE miei_progetti lista_progetti; SELECT progetti INTO miei_progetti. FROM dipartimenti. WHERE id = 30; IF miei_progetti(i).titolo = DBMS 20 7 Attributo con tipo REF(<tipo1>) può contenere valori di tipo REF(<tipo2>) se <tipo2> sottotipo di <tipo1> Attributo con tipo ADT <tipo1> può contenere valori di tipo ADT <tipo2> se <tipo2> sottotipo di <tipo1> Attributo con tipo collezione su tipo <tipo1> può contenere valori di tipo <tipo2> se <tipo2> sottotipo di <tipo1> Ereditarietà Sostituibilità a livello di tupla Solo a livello di tipi vale quanto detto per SQL-99 in più: Una tabella tipata su tipo <tipo1> può contenere istanze del tipo <tipo2> se <tipo2> sottotipo di <tipo1> sia tipi che metodi possono essere definiti FINAL/NOT FINAL FINAL: overriding non possibile sostituibilità late binding Sostituibilità Possibilità di utilizzare istanze di un sottotipo in ogni contesto in cui può essere utilizzato un supertipo sostituibilità a livello di CREATE TYPE Person_typ AS OBJECT ( ssn NUMBER, name VARCHAR2(30), address VARCHAR2(100)) NOT FINAL; attributo tupla CREATE TYPE Student_typ UNDER Person_typ ( deptid NUMBER, major VARCHAR2(30)) NOT FINAL; CREATE TYPE PartTimeStudent_typ UNDER Student_typ ( numhours NUMBER);

36 (su attributi) Limitare sostituibilità CREATE TABLE Dipartimenti ( Id INTEGER, nome VARCHAR(20), manager Person_typ); INSERT INTO dipartimenti VALUES (1, ricerca, Person_typ(1243, 'Bob', '121 Front St')); CREATE TABLE Dipartimenti ( Id INTEGER, nome VARCHAR(20), manager Person_typ) COLUMN manager IS OF (ONLY Student_typ); Si può specificare solo un sottotipo INSERT INTO dipartimenti VALUES (2, sviluppo,student_typ(3456, 'Joe', '34 View', 12, 'HISTORY')); INSERT INTO dipartimenti 21 VALUES (3, testing,parttimestudent_typ(5678, 'Tim', 13, 'PHYSICS', 20)); (su tuple) Interrogazioni CREATE TABLE persons OF Person_typ; INSERT INTO persons VALUES (Person_typ(1243, 'Bob', '121 Front St')); INSERT INTO persons VALUES (Student_typ(3456, 'Joe', '34 View', 12, 'HISTORY')); Funzioni utili: REF DEREF VALUE IS OF TYPE INSERT INTO persons VALUES (PartTimeStudent_typ(5678, 'Tim', 13, 'PHYSICS', 20)); 21 4 REF, DEREF, VALUE già viste Limitare sostituibilità CREATE TABLE Dipartimenti ( Id INTEGER, nome VARCHAR(20), manager Person_typ) COLUMN manager NOT SUBSTITUTABLE AT ALL LEVELS; Manager può solo essere una persona (sottotipi non ammessi) CREATE TABLE persons OF Person_typ NOT SUBSTITUTABLE AT ALL LEVELS; Si consideri la tabella Dipartimenti presentata in precedenza (senza limitazioni di sostituibilità) SELECT * FROM Dipartimenti p WHERE p.manager IS OF (Student_typ,PartTimeStudent_typ) 21 2 la tabella persons può contenere solo persone 21 5 restituisce i dipartimenti i cui manager sono studenti o studenti part-time

RDBMS: panorama attuale. RDBMS: panorama attuale RDBMS. RDBMS: problemi. RDBMS: problemi. RDBMS: problemi

RDBMS: panorama attuale. RDBMS: panorama attuale RDBMS. RDBMS: problemi. RDBMS: problemi. RDBMS: problemi RDBMS: panorama attuale RDBMS: panorama attuale Gestiscono e manipolano dati semplici (tabellari) Hanno un linguaggio di interrogazione (SQL) semplice, dichiarativo e standard Tool consolidati per lo sviluppo

Dettagli

Basi di Dati Relazionali ad Oggetti RDBMS: panorama attuale

Basi di Dati Relazionali ad Oggetti RDBMS: panorama attuale Basi di Dati Relazionali ad Oggetti 0 RDBMS: panorama attuale Gestiscono e manipolano dati semplici (tabellari) Hanno un linguaggio di interrogazione (SQL) semplice, dichiarativo e standard Tool consolidati

Dettagli

Basi di Dati Relazionali ad Oggetti. RDBMS: panorama attuale. RDBMS: panorama attuale

Basi di Dati Relazionali ad Oggetti. RDBMS: panorama attuale. RDBMS: panorama attuale Basi di Dati Relazionali ad Oggetti 0 RDBMS: panorama attuale Gestiscono e manipolano dati semplici (tabellari) Hanno un linguaggio di interrogazione (SQL) semplice, dichiarativo e standard Tool consolidati

Dettagli

Aspetti relazionali ad oggetti di Oracle 9i. Il sistema di tipi di Oracle. Tipi oggetto

Aspetti relazionali ad oggetti di Oracle 9i. Il sistema di tipi di Oracle. Tipi oggetto Aspetti relazionali ad oggetti di Oracle 9i 158 Il sistema di tipi di Oracle Non distinct type Tipi oggetto Tipi riferimento Tipi collezione Ereditarietà 159 Tipi oggetto Possibilità di definire tipi oggetto

Dettagli

RDBMS: panorama attuale. RDBMS: panorama attuale

RDBMS: panorama attuale. RDBMS: panorama attuale RDBMS: panorama attuale Gestiscono e manipolano dati semplici (tabellari) Hanno un linguaggio di interrogazione (SQL) semplice, dichiarativo e standard Tool consolidati per lo sviluppo di applicazioni

Dettagli

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

Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata Domini Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata numeric [(Precisione [,Scala])] decimal [(Precisione [,Scala])] integer smallint Precisione specifica il numero di

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 2 Vincoli di integrità Proprietà che devono essere soddisfatte da ogni istanza della base di dati. Il soddisfacimento è definito rispetto al

Dettagli

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

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari: SQL SQL (pronunciato anche come l inglese sequel): acronimo di Structured Query Language (linguaggio di interrogazione strutturato) Linguaggio completo che presenta anche proprietà di: DDL (Data Definition

Dettagli

Stringhe di caratteri

Stringhe di caratteri Domini primitivi In SQL sono disponibili alcune famiglie di domini elementari attraverso le quali è possibile definire i domini di appartenenza dei campi. Stringhe di caratteri CHARACTER [VARYING] [(NumeroCaratteri)]

Dettagli

Sistemi di Elaborazione delle Informazioni

Sistemi di Elaborazione delle Informazioni SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2017/2018 1 Settima parte Interrogazione di una

Dettagli

Laboratorio di Basi di Dati e Multimedia

Laboratorio di Basi di Dati e Multimedia Laboratorio di Basi di Dati e Multimedia Laurea in Informatica Multimediale - A.A. 2006/07 Docente: Alessandra Di Pierro Email: dipierro@sci.univr.it Lezione 2 Vincoli intrarelazionali Proprietà che devono

Dettagli

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

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto SQL Università degli Studi di Salerno Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto A.A. 2005/2006 Select La forma di select cui siamo arrivati

Dettagli

Tipi MULTISET: accesso

Tipi MULTISET: accesso Tipi MULTISET: accesso Poiche non e previsto un ordine tra gli elementi un accesso diretto come quello visto per gli array non e possibile E necessario utilizzare funzioni ad hoc Tali funzioni possono

Dettagli

Il linguaggio SQL. Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL Il linguaggio SQL 1 Il linguaggio SQL 2 il linguaggio SQL è un linguaggio per la definizione e la manipolazione dei dati, sviluppato originariamente presso il laboratorio IBM a San Jose (California) è

Dettagli

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL Il linguaggio SQL 1 Il linguaggio SQL 2 il linguaggio SQL è un linguaggio per la definizione e la manipolazione dei dati, sviluppato originariamente presso il laboratorio IBM a San Jose (California) è

Dettagli

PRODOTTO CARTESIANO Caso Generale

PRODOTTO CARTESIANO Caso Generale PRODOTTO CARTESIANO Caso Generale Vincoli di integrità dei dati Un database non deve solamente memorizzare i dati, ma garantire che i dati memorizzati siano corretti; se i dati sono imprecisi o incoerenti,

Dettagli

Corso di Basi di Dati

Corso di Basi di Dati Corso di Basi di Dati Il Linguaggio SQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/ 1 Linguaggi per DBMS Il modello relazionale definisce i concetti generali ed i vincoli per modellare

Dettagli

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

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2 Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2 Vincoli di integrita 2 Cosa e un vincolo di integrita E una proprieta sempre valida

Dettagli

3b-Basi di dati relazionali ad oggetti

3b-Basi di dati relazionali ad oggetti Approccio Object Object-Relational (ORDBMS) 3b-Basi di dati relazionali ad oggetti I database orientati agli oggetti non hanno allo stato avuto adeguato successo perché non hanno offerto efficienza pari

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Esercitazione PostgreSQL Dopo aver lanciato il client grafico pgadmin III di PostgreSQL svolgere le operazioni descritte nel seguito, tenendo presenti i suggerimenti forniti

Dettagli

Manuale SQL. Manuale SQL - 1 -

Manuale SQL. Manuale SQL - 1 - Manuale SQL - 1 - Istruzioni DDL Creazione di una tabella : CREATE TABLE Il comando CREATE TABLE consente di definire una tabella del database specificandone le colonne, con il tipo di dati ad esse associate,

Dettagli

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

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA 3. Panoramica su SQL Prof. Mauro Giacomini Sommario Introduzione Istruzione SELECT Tipi di Join Subquery Comandi DML Creazione delle tabelle Introduzione

Dettagli

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

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste Corso di Basi di Dati 9. Esercitazioni in SQL: Check, asserzioni, viste A.A. 2016 2017 Check Come abbiamo visto, SQL permette di specificare vincoli sugli attributi e le tabelle attraverso il comando check

Dettagli

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

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati Corso di Basi di Dati 7. Esercitazioni in SQL: Definizione e manipolazione dei dati A.A. 2016 2017 Collegarsi a MySQL, caricare e salvare basi di dati Per collegarsi a mysql, aprire un terminale e inserire

Dettagli

Ereditarietà vantaggi rispetto al modello relazionale. Ereditarietà. Ereditarietà - esempio (continua) Ereditarietà - esempio (continua)

Ereditarietà vantaggi rispetto al modello relazionale. Ereditarietà. Ereditarietà - esempio (continua) Ereditarietà - esempio (continua) Ereditarietà Ereditarietà vantaggi rispetto al modello relazionale 81 L ereditarietà è un importante meccanismo di riutilizzo del codice Permette ad una classe, detta sottoclasse, di essere definita a

Dettagli

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio Basi di Dati: Corso di laboratorio Lezione 9 Raffaella Gentilini 1 / 41 Sommario 1 DBMS Attivi e Triggers 2 2 / 41 DBMS Attivi DBMS Attivi I DBMS tradizionale sono passivi: Eseguono delle operazioni solo

Dettagli

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

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi Vincoli Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi Lucidi derivati da quelli di Jeffrey D. Ullman 1 Vincoli e Triggers Un vincolo e una relazione

Dettagli

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

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 : SQL SQL originariamente "Structured Query Language", ora "nome proprio" linguaggio con varie funzionalità: contiene sia il DDL sia

Dettagli

Interpretazione delle query nidificate

Interpretazione delle query nidificate Interpretazione delle query nidificate Per analizzare il risultato di una interrogazione nidificata si può supporre di valutare prima il risultato dell interrogazione nidificata (query interna) per poi

Dettagli

Equivalenza di espressioni. Equivalenze. Equivalenze. Due espressioni sono equivalenti se: Atomizzazione delle selezioni σ F1 F2 (E) σ F1 (σ F2 (E))

Equivalenza di espressioni. Equivalenze. Equivalenze. Due espressioni sono equivalenti se: Atomizzazione delle selezioni σ F1 F2 (E) σ F1 (σ F2 (E)) Equivalenza di espressioni Due espressioni sono equivalenti se: E 1 R E 2 se E 1 (r = E 2 (r per ogni istanza r di R (equivalenza dipendente dallo schema E 1 E 2 se E 1 R E 2 per ogni schema R (equivalenza

Dettagli

DDL (Data Definition Language) schemi DML (Data Manipulation Language) DQL (Data Query Language) DCL (Data Control Language)

DDL (Data Definition Language) schemi DML (Data Manipulation Language) DQL (Data Query Language) DCL (Data Control Language) o o o o o DDL (Data Definition Language): consente di creare e modificare schemi di database; DML (Data Manipulation Language): consente di inserire, modificare e gestire i dati memorizzati; DQL (Data

Dettagli

Structured Query Language

Structured Query Language IL LINGUAGGIO SQL Structured Query Language Contiene sia il DDL sia il DML, quindi consente di: Definire e creare il database Effettuare l inserimento, la cancellazione, l aggiornamento dei record di un

Dettagli

LABORATORIO di INFORMATICA

LABORATORIO di INFORMATICA Università degli Studi di Cagliari Corso di Laurea Magistrale in Ingegneria per l Ambiente ed il Territorio LABORATORIO di INFORMATICA A.A. 2010/2011 Prof. Giorgio Giacinto IL MODELLO RELAZIONALE http://www.diee.unica.it/giacinto/lab

Dettagli

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

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati Corso di Basi di Dati 7. Esercitazioni in SQL: Definizione e manipolazione dei dati A.A. 2016 2017 Collegarsi a MySQL, caricare e salvare basi di dati Per collegarsi a mysql, aprire un terminale e inserire

Dettagli

SQL - Sottointerrogazioni correlate

SQL - Sottointerrogazioni correlate SQL - Sottointerrogazioni correlate negli esempi visti ogni subquery viene eseguita una volta per tutte ed il valore (o insieme di valori) è usato nella clausola WHERE della query esterna è possibile definire

Dettagli

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

SQL-DDL. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste Basi di Dati Prof. Alfredo Cuzzocrea Università degli Studi di Trieste SQL-DDL Credits to: Prof. P. Atzeni UniRoma3 Prof. S. Ceri PoliMI Prof. S. Paraboschi UniBG Prof. R. Torlone UniRoma3 SQL originariamente

Dettagli

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

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) 1 SQL Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) a.a. 2017/2018 http://www.di.uniba.it/~lisi/courses/basi-dati/bd2017-18.htm Prof.ssa Francesca A. Lisi francesca.lisi@uniba.it

Dettagli

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

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto SQL Università degli Studi di Salerno Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto A.A. 2007/2008 Interrogazioni con raggruppamento E possibile

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 1 SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali Il linguaggio SQL è

Dettagli

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

Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno Cognome e nome: Matricola: Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno 2012 Cognome e nome: Matricola: Parte prima Domanda 1 Domanda 2 Domanda 3 Totale Istruzioni: È vietato portare

Dettagli

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

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe SQL SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe Operazioni di aggiornamento Abbiamo visto come creare tabelle e come interrogarle. Vedremo ora come popolarle

Dettagli

IL MODELLO RELAZIONALE

IL MODELLO RELAZIONALE Basi di dati 1 IL MODELLO RELAZIONALE (CAPITOLO 2) Codd 1970 Indipendenza dei dati Distinzione nella descrizione dei dati tra livello fisico e livello logico Vendors IBM,Informix,Microsoft,Oracle,Sybase

Dettagli

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

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi: 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

Dettagli

SQL. Lezione 1. Docente: Alberto Belussi

SQL. Lezione 1. Docente: Alberto Belussi LaboratoriodiBasidiDatieWeb Docente: Alberto Belussi Lezione 1 SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali Il linguaggio SQL è

Dettagli

Viste come strumenti di programmazione

Viste come strumenti di programmazione Viste come strumenti di programmazione Trovare gli impiegati che hanno lo stesso capo di Rossi Senza vista: PROJ Impiegato ((Afferenza JOIN Direzione) JOIN REN ImpR,RepR Impiegato,Reparto ( SEL Impiegato='Rossi'

Dettagli

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

Gestione delle informazioni. Tot. h 10. Base di Dati. Tot. h 56. Grafica in C# - Laboratorio- Tot. h 40. Dipartimento Informatica Materia Informatica Dipartimento Informatica Materia Informatica Classe 5 Tec Ore/anno 198 A.S. 2018-2019 MODULI COMPETENZE UNITA di APPRENDIMENTO Gestione delle informazioni Tot. h 10 Base di Dati Tot. h 56 Grafica in C#

Dettagli

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

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013) SQL quick reference piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013) I tipi dei dati di SQL sono: delimitatori delle costanti: TEXT(n) stringa di caratteri

Dettagli

Cap. 7 -Trigger e loro uso

Cap. 7 -Trigger e loro uso 1 SOMMARIO 2 Introduzione... 3 Definizione standard di trigger... 10 Cap. 7 -Trigger e loro uso Uso dei trigger e integrità referenziale... 18 Comportamento attivo delle BD Si realizza disponendo di un

Dettagli

SQL. Dott.ssa Elisa Quintarelli

SQL. Dott.ssa Elisa Quintarelli Corso Basi di Dati Dott.ssa Elisa Quintarelli SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio universale dei sistemi relazionali È un linguaggio con varie funzionalità:

Dettagli

SQL: DDL, VI, Aggiornamenti e Viste

SQL: DDL, VI, Aggiornamenti e Viste SQL: DDL, VI, Aggiornamenti e Viste 1 SQL è più di un semplice linguaggio di interrogazione v Linguaggio di definizione dati (Data-definition language, DDL): Crea/distrugge/modifica relazioni e viste Definisce

Dettagli

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a Corso di Laurea in Informatica Basi di Dati a.a. 2012-2013 Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio PROGETTAZIONE FISICA SQL-DDL OBIETTIVO: Rappresentare i dati della realtà di interesse

Dettagli

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti Microsoft Access Nozioni di base Contatti: Dott.ssa Silvia Bonfanti silvia.bonfanti@unibg.it Introduzione In questa lezione vedremo lo strumento Microsoft Access ed impareremo come realizzare con esso

Dettagli

SQL: "storia" 31/05/2006 2

SQL: storia 31/05/2006 2 SQL originariamente "Structured Query Language", ora "nome proprio" linguaggio con varie funzionalità: contiene sia il DDL sia il DML ne esistono varie versioni vediamo gli aspetti essenziali, non i dettagli

Dettagli

Corso di Basi di Dati

Corso di Basi di Dati Corso di Laurea in Ingegneria Gestionale Sapienza - Università di Roma Corso di Basi di Dati A.A. 2016/2017 7 SQL : Check, Asserzioni,Viste Tiziana Catarci Ultimo aggiornamento : 22/02/2017 Costrutti Avanzati

Dettagli

8 SQL : Check, Asserzioni,Viste

8 SQL : Check, Asserzioni,Viste Corso di Laurea in Ingegneria Gestionale SAPIENZA Università di Roma Esercitazioni del corso di Basi di Dati Prof.ssa Catarci e Prof.ssa Scannapieco Anno Accademico 2011/2012 8 SQL : Check, Asserzioni,Viste

Dettagli

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

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.1 Data Description Language - 1 Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.1 Data Description Language - 1 SQL Structured Query Language è un linguaggio con varie funzionalità: contiene sia

Dettagli

Progettazione concettuale usando il modello Entità-Relazione (ER)

Progettazione concettuale usando il modello Entità-Relazione (ER) Progettazione concettuale usando il modello Entità-Relazione (ER) 1 Introduzione alla progettazione delle basi di dati Progettazione concettuale (in questa fase si usa il modello ER) Quali sono le entità

Dettagli

Principi di Progettazione del Software a.a Il linguaggio SQL. Prof. Luca Mainetti Università del Salento

Principi di Progettazione del Software a.a Il linguaggio SQL. Prof. Luca Mainetti Università del Salento Principi di Progettazione del Software a.a. 2016-2017 Prof. Università del Salento Linguaggi per DBMS Il modello relazionale definisce i concetti generali ed i vincoli per modellare e strutturare i dati

Dettagli

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

Manuale Comandi SQL SQL. Sito per esercitarsi (on line) SQL Manuale Comandi SQL Sito per esercitarsi (on line)... 1 SQL... 1 Convenzioni e simboli usati... 2 Query Language... 2 Comando Select... 2 Order By:... 3 Sintassi generale:... 3 Ordinamanto su PIU campi...

Dettagli

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

A.A. 2018/2019. Esercitazione 11. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE A.A. 2018/2019 Esercitazione 11 Strutturazione di Istruzioni in Linguaggio SQL [ Possibili Soluzioni ] Docente Prof. Raffaele Pizzolante FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE Esercizio 1 Scrivere

Dettagli

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio Basi di Dati: Corso di laboratorio Lezione 6 Raffaella Gentilini 1 / 40 Sommario 1 Viste 2 3 2 / 40 Viste Viste le viste sono tabelle virtuali corrispondono al risultato di una query (SELECT) valutata

Dettagli

Appunti dalle lezioni. Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale.

Appunti dalle lezioni. Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale. SQl come DDL Angelo Chianese,, Vincenzo Moscato, Antonio Picariello,, Lucio Sansone Basi di dati per la gestione dell'informazione 2/ed McGraw-Hill Capitolo 2 Appunti dalle lezioni SQL come DDL Sistemi

Dettagli

Mattia Fazzi: 14/05/2019

Mattia Fazzi: 14/05/2019 Mattia Fazzi: mattia.fazzi@student.unife.it 14/05/2019 SQL Linguaggio utilizzato per definire i dati nel database. Definire i vincoli. Possibilità di creare, modificare e eliminare le tabelle. CREATE TABLE

Dettagli

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

Corso di Basi di Dati A.A. 2015/2016 Corso di Laurea in Ingegneria Gestionale Sapienza Università di Roma Corso di Basi di Dati A.A. 2015/2016 - Esercizi Tiziana Catarci, Andrea Marrella Ultimo aggiornamento : 06/04/2016 Esercizio 1 Dare

Dettagli

Principi di Progettazione del Software a.a Il linguaggio SQL. Linguaggi per DBMS

Principi di Progettazione del Software a.a Il linguaggio SQL. Linguaggi per DBMS Principi di Progettazione del Software a.a. 2017-2018 Ing. Università del Salento Linguaggi per DBMS Il modello relazionale definisce i concetti generali ed i vincoli per modellare e strutturare i dati

Dettagli

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

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor Interrogare una base di dati: algebra relazionale e SQL Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor Contesto didattico Il seguente materiale didattico è

Dettagli

SQL - Structured Query Language

SQL - Structured Query Language SQL - Structured Query Language Lab 05 Alessandro Lori Università di Pisa 27 Aprile 2012 Riepilogo esercitazione precedente Operatori insiemistici (UNION, INTERSECT, EXCEPT) Riepilogo esercitazione precedente

Dettagli

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

Lezione 13. Il trattamento dei dati. database: il linguaggio SQL seconda parte. Proff. Valle Folgieri Lezione 13 Il trattamento dei dati database: il linguaggio SQL seconda parte Proff. Valle Folgieri Lez13 Trattamento dati. Database: il linguaggio SQL-seconda parte 1 SQL: azioni sui dati Nella scorsa

Dettagli

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

Lezione 12. Il trattamento dei dati. database: il linguaggio SQL seconda parte. Proff. Valle Folgieri Lezione 12 Il trattamento dei dati database: il linguaggio SQL seconda parte Proff. Valle Folgieri Lez13 Trattamento dati. Database: il linguaggio SQL-seconda parte 1 SQL: azioni sui dati Nella scorsa

Dettagli

Fondamenti di Informatica A. A / 1 9

Fondamenti di Informatica A. A / 1 9 Fondamenti di Informatica Prof. Marco Lombardi A. A. 2 0 1 8 / 1 9 Concetti Introduttivi 1/2 SQL (Structured Query Language) permette di manipolare i dati, interrogare un database relazionale e modellarne

Dettagli

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

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1 I.I.S. G. COSSALI - ORZINUOVI DATABASE Marzo 2017 Prof. Dario Tomasoni 1 IMPOSTAZIONE 60 min = Database concetti + Esercizi; 10 min = pausa; 30 min = Linguaggio SQL; 30 min = Database prove LibreOffice

Dettagli

IL MODELLO RELAZIONALE. Patrizio Dazzi a.a

IL MODELLO RELAZIONALE. Patrizio Dazzi a.a IL MODELLO RELAZIONALE Patrizio Dazzi a.a. 2017-2018 COMUNICAZIONE AI MIEI CARI STUDENTI! La mail che mandate per la Mailing List deve avere come Oggetto/Subject [BDD-INFUMA-2017-18] e come contenuto:

Dettagli

Interrogazioni nidificate

Interrogazioni nidificate Interrogazioni nidificate Nella clausola where si possono utilizzare valori prodotti da altre istruzioni select utilizzando any (qualsiasi) o all (tutti) insieme agli operatori di confronto Trovare nome,

Dettagli

Aspetti avanzati nella definizione degli schemi DDL2 1

Aspetti avanzati nella definizione degli schemi DDL2 1 Aspetti avanzati nella definizione degli schemi DDL2 1 Aspetti avanzati del DDL Creazione di indici Modifica degli schemi Gestione di viste Autorizzazioni d'accesso Vincoli di integrità Procedure e regole

Dettagli

IL MODELLO RELAZIONALE

IL MODELLO RELAZIONALE Basi di dati 1 IL MODELLO RELAZIONALE (CAPITOLO 2) Seconda parte: dal diagramma ER allo schema relazionale Progettazione 2 Dominio Applicativo PROGETTAZIONE CONCETTUALE PROGETTAZIONE LOGICA VALUTAZIONE

Dettagli

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami

Dettagli

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

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a. 2013-2014 Docente: Gigliola Vaglini Docente laboratorio: Francesco Pistolesi Lezione 3 Structured Query Language

Dettagli

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

insert into Dipartimento(NomeDip, Città) values('produzione','torino') insert into ProdottiMilanesi (select codice, descrizione from Prodotto Inserimento insert into Dipartimento(NomeDip, Città) values('produzione','torino') Si utilizza in genere mediante una form per consentire agli utenti di inserire dati. L'ordinamento degli attributi (se

Dettagli

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

Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52) Inserimento insert into Dipartimento(NomeDip, Città) values('produzione','torino') Si utilizza in genere mediante una maschera (form) per consentire agli utenti di inserire dati. L'ordinamento degli attributi

Dettagli

Corso di Basi di Dati

Corso di Basi di Dati Corso di Basi di Dati Il Linguaggio SQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/ SQL (Structured Query Language) e il linguaggio di riferimento per le basi di dati relazionali. Diverse

Dettagli

DATABASE PER IL WEB. Programmazione Web 1

DATABASE PER IL WEB. Programmazione Web 1 DATABASE PER IL WEB Programmazione Web 1 Archite3ura web con database Client Tier Web/App Tier DB Tier Client Web / App Server Database Il server web comunica con un altro server che con8ene il la banca

Dettagli

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati Basi di Dati Matteo Longhi Structured Query Language Introduzione Standard creato nel 1976 da IBM Aggiornato (versione 2 nel 1992 (ANSI X3.135 e ISO 9075 Consente di: DDL: definire la struttura del DB

Dettagli

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

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi Corso di Basi di Dati 10. Esercitazioni in SQL: Complementi A.A. 2016 2017 Funzioni condizionali Vediamo qualche altro comando utile di SQL. Il comando coalesce ammette come argomento una sequenza di espressioni

Dettagli

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

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi Corso di Basi di Dati 10. Esercitazioni in SQL: Complementi A.A. 2016 2017 Funzioni condizionali Vediamo qualche altro comando utile di SQL. Il comando coalesce ammette come argomento una sequenza di espressioni

Dettagli

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

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. Linguaggio di interrogazione per basi di dati relazionali SQL Linguaggio di interrogazione per basi di dati relazionali SQL Structured Query Language Linguaggio di interrogazione per basi di dati relazionali. Permette di comunicare con diversi sistemi tramite

Dettagli

La connessione ai database MySQL tramite script PHP versione 5.5

La connessione ai database MySQL tramite script PHP versione 5.5 La connessione ai database MySQL tramite script PHP versione 5.5 Php è un linguaggio di scripting che estende le funzionalità del server Web, mentre MySQL è un programma server che si occupa della gestione

Dettagli

A livello fisico, un istanza di base di dati Oracle è composta. Gubiani & Montanari Oracle Database 3

A livello fisico, un istanza di base di dati Oracle è composta. Gubiani & Montanari Oracle Database 3 Oracle Database Express Edition Donatella Gubiani e Angelo Montanari Gubiani & Montanari Oracle Database 1 (Oracle XE) è una versione gratuita della base di dati È facile da installare e gestire Può essere

Dettagli

Caratteristiche dei linguaggi per Database

Caratteristiche dei linguaggi per Database IL LINGUAGGIO Caratteristiche dei linguaggi per Database I linguaggi per basi di dati relazionali possiedono i comandi per: definizione del data base; manipolazione dei dati; associazione tra tabelle diverse;

Dettagli

Fondamenti di Informatica e Programmazione

Fondamenti di Informatica e Programmazione Fondamenti di Informatica e Programmazione Prof. G ianni D Angelo Email: giadangelo@unisa.it A. A. 2018/ 19 Le Origini di SQL Principali Versioni Anni 70 1986 SEQUEL Structured English QUEry Language Sviluppato

Dettagli

Sistemi di Elaborazione delle Informazioni

Sistemi di Elaborazione delle Informazioni SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2017/2018 1 Sesta parte Interrogazione di una

Dettagli

Il linguaggio SQL: DDL di base

Il linguaggio SQL: DDL di base Il linguaggio SQL: DDL di base Sistemi Informativi T Versione elettronica: 04.1.SQL.DDLbase.pdf SQL: caratteristiche generali SQL (Structured Query Language) è il linguaggio standard de facto per DBMS

Dettagli

Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati

Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati Linguaggio SQL: fondamenti Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati 2007 Politecnico di Torino 1 Creazione di

Dettagli

MS Access Un DBMS relazionale per Windows?

MS Access Un DBMS relazionale per Windows? MS Access Un DBMS relazionale per Windows? Quali DBMS in ambiente PC: dbase (ver. 5 per windows) FoxPro (per windows) Access (per windows) SQL Server (client/server) Oracle (client/server) Informix (client/server)...

Dettagli

Le Basi di Dati Attive

Le Basi di Dati Attive Le Basi di Dati Attive Basi di dati: Architetture e linee di evoluzione - Seconda edizione Capitolo 5 Appunti dalle lezioni SQL in Linguaggi di programmazione L uso diretto dell interprete SQL è tipicamente

Dettagli

Esercitazione 4 SQL: cataloghi e viste

Esercitazione 4 SQL: cataloghi e viste Esercitazione 4 SQL: cataloghi e viste Sistemi Informativi T Versione elettronica: L04.CatView.pdf Cataloghi di sistema Sono insieme di tables e views che descrivono la struttura logica e fisica degli

Dettagli

Elena Baralis 2007 Politecnico di Torino 1

Elena Baralis 2007 Politecnico di Torino 1 Linguaggio SQL: fondamenti Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati Creazione di una tabella (1/3) Si utilizza

Dettagli

Università degli Studi de L Aquila A. A Prof. Giuseppe Della Penna. Software House GRUPPO 19 CANALE A. A cura di:

Università degli Studi de L Aquila A. A Prof. Giuseppe Della Penna. Software House GRUPPO 19 CANALE A. A cura di: Università degli Studi de L Aquila A. A. 2001-2002 Prof. Giuseppe Della Penna PROGETTO DI LABORATORIO DI BASI DI DATI Software House GRUPPO 19 CANALE A A cura di: Giovanni Gasparri Paolo Palleschi Carmine

Dettagli

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

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/2002 4.1 Modelli di Base Dati 4 Un DBMS: Access a.a. 2001/2002 4.1 DBMS 4.2 DBMS = Data Base Management System Software per la costruzione e la gestione di una base dati Esempi di DBMS: Oracle, MySQL, SQLServer,

Dettagli