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 oggetti di un DB, ovvero contengono metadati Gli schemi relativi sono: SYSIBM: tables a uso interno di DB2 SYSCAT: viste definite sulle tables in SYSIBM, a uso degli utenti SYSSTAT: statistiche sul DB Le viste in SYSCAT costituiscono il cosiddetto INFORMATION SCHEMA e alcune di queste sono standardizzate Vediamo le principali (DB2 ne include circa 150!) Es. 4: cataloghi e viste Sistemi Informativi T 2
SYSCAT.SCHEMATA Ogni tupla descrive uno schema SCHEMANAME CREATE_TIME Nome dello schema Utente che ha creato lo schema Timestamp di creazione Es. 4: cataloghi e viste Sistemi Informativi T 3 SYSCAT.TABLES Ogni tupla descrive una table o view ( oggetti ) del DB Tables e views dei cataloghi sono anch esse incluse TYPE CREATE_TIME COLCOUNT CHILDREN PARENTS SELFREFS CHECKCOUNT KEYCOLUMNS Schema dell oggetto Nome dell oggetto Proprietario dell oggetto Tipo dell oggetto ( T tabella, V vista) Timestamp in cui l oggetto è stato creato Numero di colonne Numero di vincoli di foreign key che fanno riferimento a una key di questo oggetto Numero di foreign key definite per questo oggetto Numero di foreign key autoreferenziali Numero di check per questo oggetto Numero di colonne nella primary key Es. 4: cataloghi e viste Sistemi Informativi T 4
SYSCAT.VIEWS Ogni tupla descrive una vista VIEWSCHEMA VIEWNAME VIEWCHECK READONLY TEXT Schema della vista Nome della vista Utente che ha creato la vista Tipo di check applicato per le modifiche alla vista ( C = cascaded check option, L = local check option, N = no check option) N = la vista può essere modificata dagli utenti con gli opportuni privilegi, Y = la vista non può essere aggiornata a causa della sua definizione CLOB contenente la definizione della vista CLOB = Character Large Object ; per la memorizzazione di testi fino a 2 GB. Per vederne il contenuto è indispensabile usare CAST Es. 4: cataloghi e viste Sistemi Informativi T 5 SYSCAT.TABDEP Ogni tupla descrive una dipendenza di una vista da qualche altro oggetto BTYPE BSCHEMA BNAME Schema della vista Nome della vista Utente che ha creato la vista Tipo dell oggetto da cui si dipende (valori rilevanti: T = tabella, V = vista) Nome dello schema dell oggetto da cui dipende la vista Nome dell oggetto da cui si dipende Es. 4: cataloghi e viste Sistemi Informativi T 6
SYSCAT.COLUMNS Ogni tupla descrive una colonna di una vista o di una tabella COLNAME TYPENAME LENGTH DEFAULT NULLS KEYSEQ Schema dell oggetto cui appartiene la colonna Nome dell oggetto cui appartiene la colonna Nome della colonna Nome del tipo della colonna (VARCHAR, SMALLINT, ecc.) Massima lunghezza dei valori della colonna Valore di default se definito, altrimenti NULL Y se la colonna ammette NULL, altrimenti N Posizione numerica della colonna all interno della primary key Es. 4: cataloghi e viste Sistemi Informativi T 7 SYSCAT.TABCONST Ogni tupla descrive un constraint di tipo CHECK, UNIQUE, PRIMARY KEY o FOREIGN KEY TYPE ENFORCED Nome del constraint Schema della tabella cui si applica questo constraint Nome della tabella cui si applica questo constraint Utente che ha creato il constraint Tipo di constraint ( F = foreign key, K = check, P = primary key, U = unique) Y se il constraint è attivo, altrimenti N Es. 4: cataloghi e viste Sistemi Informativi T 8
SYSCAT.KEYCOLUSE Ogni tupla descrive una colonna coinvolta nella definizione di una chiave primaria, chiave o foreign key COLNAME COLSEQ Nome del constraint Schema di appartenenza Nome della tabella Nome della colonna coinvolta Posizione della colonna nella definizione della chiave Es. 4: cataloghi e viste Sistemi Informativi T 9 SYSCAT.REFERENCES Ogni tupla descrive una foreign key Utile da utilizzare assieme a SYSCAT.KEYCOLUSE! REF REF REFKEYNAME COLCOUNT DELETERULE UPDATERULE Nome del constraint Schema di appartenenza della tabella dipendente (quella che contiene la FK) Nome della tabella dipendente Utente che ha creato il constraint Schema della tabella cui si fa riferimento Nome della tabella cui si fa riferimento Nome del constraint nella tabella cui si fa riferimento (SYSCAT.KEYCOLUSE.) Numero di colonne coinvolte nella foreign key Politica per la cancellazione ( A = no action, C = cascade, N = set null, R = restrict) Politica per l aggiornamento ( A = no action, R = restrict) Es. 4: cataloghi e viste Sistemi Informativi T 10
SYSCAT.CHECKS Ogni tupla descrive un check constraint CREATE_TIME TEXT Nome del check Utente che ha creato il check Schema di appartenenza Nome della tabella cui è applicato il check Timestamp di creazione Campo CLOB contenente la definizione del check Es. 4: cataloghi e viste Sistemi Informativi T 11 SYSCAT.COLCHECKS Ogni tupla descrive una colonna coinvolta in un check constraint Utile da utilizzare assieme a SYSCAT.CHECKS! COLNAME USAGE Nome del check Schema di appartenenza Nome della tabella cui è applicato il check Nome della colonna coinvolta Uso della colonna, vale R per i check, altri valori per altri usi non trattati nel corso Es. 4: cataloghi e viste Sistemi Informativi T 12
Esercizio 1: query su cataloghi (1) Risolvere le seguenti query tramite CLP Attenzione ai join: usare sempre (almeno) e!: Sul database SAMPLE: Q1) Determinare per ogni table (TYPE = T ), il numero di foreign key, ignorando quelle autoreferenziali (escludere le tabelle con 0 foreign key) e ordinare per valori decrescenti (a parità per nome di schema e di tabella) Q2) Mostrare, in ordine decrescente di n. di oggetti table (T) e view (V), gli schemi con almeno 5 table o view Q3) Per ogni vista di SYSCAT, determinare da quanti oggetti di ciascun tipo dipende Q4) Senza usare l attributo TABLES.COLCOUNT, né viste, determinare la table (TYPE = T ) con il maggior numero di colonne Q5) Per ogni tipo di dato (COLUMNS.TYPENAME), il n. di oggetti in cui quel tipo è il più usato Es. 4: cataloghi e viste Sistemi Informativi T 13 Esercizio 1: query su cataloghi Database SIT_STUD: eseguire le stesse query, inoltre: Q6) La coppia di nomi di table che compaiono più frequentemente insieme in uno stesso schema Q7) Determinare le 4 table più popolari su SIT_STUD, fornendo per ognuna il nome e i timestamp di creazione minimo e massimo Q8) Usando una table a scelta definita in una precedente esercitazione, usare i cataloghi per ottenere le informazioni per eliminare un vincolo di tipo check e una foreign key NB: Per ottenere solo i primi K risultati di un interrogazione (caratteristica diffusa, ma non standard), DB2 prevede la clausola FETCH FIRST K ROWS ONLY da inserire come ultima della query, e tipicamente preceduta da ORDER BY Es. 4: cataloghi e viste Sistemi Informativi T 14
Esercizio 2: cataloghi personali Scopo dell esercizio è fare pratica con la definizione di viste In particolare, si vogliono creare una serie di cataloghi personalizzati che, ad esempio, includano solo le proprie table, solo le proprie view, ecc. Per ogni catalogo personale vanno anche definiti in modo opportuno gli attributi, considerando che: non tutti quelli dei cataloghi in SYSCAT sono rilevanti ai nostri scopi la lunghezza dei campi rende poco agevole la lettura dei risultati: casting! Una caratteristica che si vuole realizzare è far sì che i cataloghi personali funzionino anche a casa, ovvero se ci si collega con un diverso account Per far questo bisogna prima introdurre il concetto di registro di sistema (detto special register in DB2) Es. 4: cataloghi e viste Sistemi Informativi T 15 Special registers Uno special register è un area di memoria che DB2 usa per memorizzare informazione utilizzabile dalle istruzioni SQL Registri notevoli sono: CURRENT USER CURRENT DATE CURRENT TIME CURRENT TIMESTAMP CURRENT SCHEMA Il valore di un registro può essere usato come parametro in una query, e quindi anche nella definizione di una vista SELECT * FROM SYSCAT.TABLES WHERE = CURRENT USER Es. 4: cataloghi e viste Sistemi Informativi T 16
Visualizzare i registri (e calcolare espressioni) Cogliamo l occasione per introdurre una caratteristica di SQL sinora ignorata, l istruzione VALUES(di fatto già vista per l INSERT) Ad esempio: VALUES(1+3, abc ) costruisce (e produce in output) la tupla (4, abc ) In pratica possiamo usare DB2 per calcolare espressioni! Pertanto VALUES(CURRENT DATE, HOUR(CURRENT TIME)) mostra data e ora corrente, e così per gli altri registri DAYS è una funzione SQL utile per contare quanti giorni sono passati tra 2 date. Restituisce il numero di giorni a partire dal 01/01/0001. Adesempio: DAYS(CURRENT DATE) DAYS( 01/02/2013 ) Funziona anche con dati di tipo TIMESTAMP Es. 4: cataloghi e viste Sistemi Informativi T 17 Esercizio 2: i cataloghi da creare Definiamo delle viste che fungano da cataloghi personali sfruttando le viste in SYSCAT e i registri Connettersi al database SIT_STUD e creare le seguenti viste: CAT_TABLECOLS(,TABTYPE,COLNAME,COLTYPE) mostra per ogni tabella o vista nel proprio schema il nome delle colonne e il rispettivo tipo CAT_TABFK(,FKNAME,FKCOLNAME,TARGETTAB,KEYCOLNAME) mostra per ogni tabella nel proprio schema: il nome della tabella, il nome di ogni colonna coinvolta in una foreign key (di nome FKNAME), il nome della tabella cui si fa riferimento e il nome della corrispondente colonna Suggerimento: il campo SYSCAT.KEYCOLUSE.COLSEQ ha lo stesso valore per la colonna che partecipa a una foreign key e per la colonna cui si riferisce CAT_FRESHTABLES(, FRESH) mostra l elenco dei nomi delle tabelle nel proprio schema; il campo FRESHvale Y se è stata creata oggi, altrimenti N. Es. 4: cataloghi e viste Sistemi Informativi T 18