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 (Oracle Developer, Sybase Power Builder, Microsoft Visual Basic) 1 RDBMS: panorama attuale Portabili su diverse piattaforme Esempi di RDBMS: Oracle, Postgre, Microsoft SQL Server, IBM DB2 Buone prestazioni Affidabilità, gestione transazioni Basati su una architettura client-server supportano efficientemente un gran numero di utenti Forniscono meccanismi di controllo dell accesso 2
RDBMS Il mercato dei DBMS relazionali ha raggiunto i 13 miliardi di dollari nel 2004, e si aspetta di arrivare intorno ai 20 miliardi di dollari nel 2008 (IDC 2005) 3 RDBMS: problemi 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 specializzazione/generalizzazione tra gli oggetti di un database 4
RDBMS: problemi Le associazioni tra entità vengono modellate per valore e questo nel caso di associazioni complesse può richiedere la creazione di parecchie tabelle/colonne fittizie 5 RDBMS: problemi R1(A1, A2, A3, A4) R2(B1, B2, B3, B4) Un associazione n-n tra R1 e R2 richiede la creazione della seguente relazione: RA(A1, A2, B1, B2, B3) Oppure si inserisce un codice in R1 e R2, ma viene sempre creata una nuova relazione R1(A, A1, A2, A3, A4) R2(B, B1, B2, B3, B4) RA(A,B) 6
RDBMS: problemi Gli RDBMS non sfruttano gli approcci objectoriented per la progettazione e realizzazione di software che oggi stanno diventando pressochè uno standard UML 7 OODBMS: panorama attuale 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 8
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.) 9 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 10
Il modello relazionale ad oggetti 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 11 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 12
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 Molti ORDBMS commerciali supportano Funzionalità dello standard, ma non sempre la sintassi Funzionalità aggiuntive non previste dallo standard Le caratteristiche object-relational sono state introdotte nello standard SQL-99 (conosciuto anche come SQL-3) 13 SQL-2003 e SQL-99: confronto Rispetto a SQL-99, SQL-2003 supporta le seguente nuove caratteristiche relazionali ad oggetti: Specifica object/relational più chiara Più tipi collezione (oltre a set e array anche multiset) 14
Versioni dello standard SQL anno Nome(alias) Descrizione 1986 SQL-86 (SQL-87) Primo standard pubblicato da ANSI e ratificato da ISO nel 1987 1989 SQL-89 Revisione minimale 1992 SQL-92(SQL2) Revisione sostanziale 1999 SQL:1999 (SQL3) Vengono aggiunti: espressioni regolari, interrogazioni ricorsive, triggers, tipi non scalari e alcune caratteristiche object-oriented (le ultime due molto controverse e non completamente supportate) 15 2003 SQL:2003 (SQL:200n) Trattamento di documenti XML, sequenze standard e colonne con valori autogenerati (comprese colonneidentità), completamento caratteristiche O-O Nel seguito Discutere le caratteristiche object-relational dello standard SQL-2003 introdurremo le caratteristiche relazionali ad oggetti di Oracle 16
Il sistema dei tipi in SQL-2003 17 Tipi in SQL-2003 TIPI Definiti dagli utenti PREDEFINITI (built-in) CONSTRUCTED Tipi semplici ADT (abstract data type) ARRAY COLLECTION MULTISET REF (riferimento) ROW (record) 18
Tipi predefiniti 19 In SQL-2003 i tipi predefiniti sono: numerici (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT, FLOAT, REAL, DOUBLE PRECISION) carattere (CHARACTER, CHARACTER VARYING) temporali (DATE, TIME, TIMESTAMP, INTERVAL) booleani (BOOLEAN) non strutturati (CHARACTER LARGE OBJECT, BINARY LARGE OBJECT) I tipi BIT, BIT VARYING presenti in SQL-1999 vengono rimossi dal nuovo standard perché nessun DBMS li supporta effettivamente Tipi predefiniti Per ogni tipo built-in esistono un insieme finito e predefinito di operazioni che su di esso possono essere eseguite Queste limitazioni rendono spesso difficile la rappresentazione di dati reali 20
Tipi definiti dagli utenti: Tipi semplici 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) Esempio: type euro decimal(8,2) 21 Tipi semplici SQL-2003 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 22
Esempio CREATE TYPE id_impiegato AS INTEGER FINAL; CREATE TABLE Impiegati( id id_impiegato, nome VARCHAR(50), età INTEGER, id_manager id_impiegato); 23 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) 24
Esempio Si consideri il tipo id_impiegato basato sul tipo intero CREATE TYPE id_impiegato AS INTEGER FINAL; Come il tipo intero, id_impiegato è utilizzato per memorizzare valori numerici ma il DBMS tratterà i due tipi come tipi distinti 25 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 I valori dei tipi semplici sono considerati come distinti dai valori del tipo di base Non è fornito alcun meccanismo di ereditarietà e subtyping per i tipi semplici Confronti con il tipo base o con altri tipi semplici definiti sullo stesso tipo base richiedono operazioni di cast 26
Esempio - assegnazione SELECT nome FROM Impiegati WHERE id_manager = 123; errore 27 Esempio - confronto 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); 28
Esempio: confronto 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!!! 29 Tipi semplici: casting L ORDBMS crea automaticamente due funzione di casting quando un nuovo tipo semplice viene creato Il DBMS definisce due funzioni di casting per ogni nuovo tipo semplice: una per passare dal tipo semplice al tipo built-in una per passare dal tipo built-in al tipo semplice 30 Tale funzione puo comunque essere successivamente modificata dall utente
Tipi semplici: casting in SQL-2003 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 31 Tipi semplici: casting in SQL-2003 <segnatura funzione> è la segnatura di una qualunque funzione la funzione deve essere definita come segue: FUNCTION <name> (<source type>) RETURNS <target type> codice... 32
Tipi semplici: casting in SQL-2003 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 33 Tipi semplici: casting in SQL-2003 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) 34
Esempio SELECT nome FROM Impiegati WHERE id_manager = CAST(123 AS id_impiegato); SELECT nome FROM Impiegati WHERE id_manager = 123; 35 Esempio 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)); 36
Esempio - 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; 37 CREATE CAST(Euro AS Dollaro_USA) WITH FUNCTION f(euro); E corretto? SELECT n_cliente,n_ordine FROM Vendite_Europee ERP, Vendite_USA USA WHERE ERP.n_ordine = USA.n_ordine AND ERP.totale > USA.totale; e corretta solo se la funzione di cast e definita cn la clausola AS ASSIGNMENT 38