2.41k likes | 2.54k Views
Basi di Dati Relazionali ad Oggetti. RDBMS: panorama attuale. Gestiscono e manipolano dati semplici (tabellari) Hanno un linguaggio di interrogazione (SQL) semplice, dichiarativo e standard
E N D
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)
RDBMS: panorama attuale • 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
RDBMS: panorama attuale • Oggi il mercato mondiale dei RDBMS supera i 50 billioni di dollari all’anno, ma… i RDBMS presentano anche alcuni limiti
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 sotto-tipo tra gli oggetti di un database
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” • Gli RDBMS non sfruttano gli approcci object-oriented per la progettazione e realizzazione di software che oggi stanno diventando pressochè uno standard
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
OODBMS: panorama attuale • Semplici modelli transazionali • Limitate funzionalità di controllo dell’accesso • Coprono un mercato di nicchia che richiede accessi navigazionali efficienti (disegno di chip, ecc.)
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 (SQL-like)
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
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
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
ORDBMS: caratteristiche generali • 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
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
ORDBMS: panorama attuale • Le estensioni differiscono per: • Le funzionalità che supportano • Il modo di realizzarle • Le estensioni apportate ad SQL • E questo nonostante SQL-99 ...
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
Lo standard SQL-99 • 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
Nel seguito … • 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
Sistema dei tipi in SQL92 • 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)
Sistema dei tipi in SQL92 • 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
Estensione del sistema di tipi • Tipi semplici • Abstract data types • User-defined types • Tipi riferimento • Tipi complessi: • tipi record e tipi collezione
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 user-defined)
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)
Tipi semplici • 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
Esempio • 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 in SQL-99 • 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
Esempio CREATE TYPE id_impiegato AS INTEGER FINAL; CREATE TABLE Impiegati( id id_impiegato, nome VARCHAR(50), età INTEGER, id_manager id_impiegato);
Casting • 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
Esempio - assegnazione SELECT nome FROM Impiegati WHERE id_manager = 123; errore
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);
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!!!
Casting in SQL-99 • Il DBMS definisce due funzioni di casting per ogni nuovo tipo semplice: • una per passare dal distinct type al tipo built-in • una per passare dal tipo built-in al distinct type
Funzioni di 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
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 ...
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
Funzioni di casting in SQL-99 • Le funzioni di casting per i tipi semplici vengano create automaticamento dal sistema con la clausola AS ASSIGNMENT
Casting in SQL-99 • 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)
Esempio SELECT nome FROM Impiegati WHERE id_manager = CAST(123 AS id_impiegato); SELECT nome FROM Impiegati WHERE id_manager = 123;
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));
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; CREATE CAST(Euro AS Dollaro_USA) WITH FUNCTION f(Euro);
ADT • Un abstract data type include: • uno o più attributi • uno o più metodi
ADT in SQL-99 • 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
ADT in SQL-99 • 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
Esempio • 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
Esempio 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 • Gli ADT possono anche essere annidati: CREATE TYPE t_impiegato AS id id_impiegato, nome CHAR(20), curriculum TEXT, indirizzo t_indirizzo NOT FINAL;
ADT • Gli ADT possono essere usati come: • tipi di una colonna in una relazione • tipi di una tabella (row type)
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);
ADT come tipo di colonna Tabella Impiegati curriculum indirizzo nome imp# numero_civico via città stato cap