Oracle Lessons

Oracle Tipi Dati Astratti Lezione 3


 Riprendiamo la nostra tabella CLIENTI, essa è composta da una colonna di tipo semplice e da una colonna strutturata: create table CLIENTI(Cliente_id number,Persona PERSONA_TY); Dove il tipo PERSONA_TY è strutturato nel seguente modo: create type PERSONA_TY as object(Nome varchar2(…),Indirizzo UTE1.INDIRIZZO_TY); Gli attributi del tipo di dati vengono completamente qualificati quando si fa riferimento alle colonne all’interno dei tipi di dato astratti, anteponendo al nome dell’attributo il nome della colonna, e facendo procedere quest’ultimo da una variabile di correlazione.Ad esempio la seguente query restituisce la colonna Cliente_id, e la colonna Nome. La colonna Nome è un attributo del tipo di dati che definisce la colonna Persona, per cui si dovrà fare riferimento all’attributo con la notazione Persona.Nome : select Cliente_id, c.Persona.Nomefrom CLIENTE c;  Nota.Quando si esegue una query sugli attributi di un tipo di dati astratto, è necessario utilizzare una variabile di correlazione per la tabella, come mostrato in questo esempio. Per impostare gli attributi di visualizzazione per gli attributi di un tipo di dati astratto in SQL*Plus si utilizza il comando column, specificando il nome del tipo di dati e l’attributo: column Cliente_id format 9999999;column Persona.Nome format A25; Per fare riferimento ad attributi all’interno del tipo di dati INDIRIZZO_TY, occorre specificare il percorso completo attraverso le colonne correlate. Ad esempio per fare riferimento alla colonna via occorre scrivere: Persona.Indirizzo.Via Descrivendo per esteso la sua collocazione all’interno della struttura della tabella. Select c.Persona.Nome, c.Persona.Indirizzo.CittaFrom CLIENTE cWhere c.Persona.Indirizzo.Cirra like ‘C%’; Dato che la colonna Citta viene utilizzata con un intervallo di ricerca all’interno della clausola where, l’ottimizzatore di Oracle è in grado di utilizzare un’indice al momento di risolvere la query. Per creare un indice su una colonna che faccia parte di un tipo di dati astratto, si deve specificare il percorso completo sino alla colonna come parte del comando create index. Create index I_CLIENTE$CITTAOn CLIENTE(Persona.Indirizzo.Citta); Con questo indice ogni volta che si accede alla colonna Citta, l’ottimizzatore di Oracle potrà valutare il suo utilizzo.   ImportantePer creare indici su tabelle basate su tipi di dati astratto, è necessario considerare come avviene l’accesso alle colonne all’interno di tali tipi di dato. Se, come avviene per la colonna Citta, nell’esempio precedente, alcune colonne vengono utilizzate normalmente nelle query come parte delle condizioni di limitazione, queste colonne devono essere indicizzate. A questo riguardo, la rappresentazione di più colonne in un unico tipo di dati astratto può determinare un peggioramento delle prestazioni dell’applicazione, in quanto può mascherare l’esigenza di indicizzare colonne specifiche all’interno del tipo di dati. Con i tipi di dato astratti, ci si abitua a trattare un gruppo di colonne come un’unica entità. E’ importante ricordare però che l’ottimizzatore, in sede di valutazione dei percorsi di accesso all’informazione, prende in considerazione le colonne singolarmente. Inoltre l’indice agisce sulla tabella e non sul tipo INDIRIZZO_TY.  Pertanto, uno dei vantaggi offerti dai tipi di dato astratti ossia la capacità di migliorare l’aderenza agli standard per la rappresentazione di dati logici, non si estende alla rappresentazione dei dati fisici. Ciascuna implementazione fisica deve essere curata separatamente.