La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Introduzione a SQL Server. Giorno I zIntroduzione allarchitettura di un DBMS zArchitettura di SQL Server zComponenti di base di un database in SQL Server.

Presentazioni simili


Presentazione sul tema: "Introduzione a SQL Server. Giorno I zIntroduzione allarchitettura di un DBMS zArchitettura di SQL Server zComponenti di base di un database in SQL Server."— Transcript della presentazione:

1 Introduzione a SQL Server

2 Giorno I zIntroduzione allarchitettura di un DBMS zArchitettura di SQL Server zComponenti di base di un database in SQL Server yDDL da Enterprise Manager yCenni DDL da Query Analyzer zManipolazione di un database in SQL Server yinterrogazioni ymodifiche zesercitazione

3 Giorno II zComponenti avanzate yStored procedures ytriggers zFull-text search z(cenni architetturali) zesercitazione

4 Introduzione allarchitettura di un DBMS

5 Che cosè un DBMS? zUn DBMS è un sistema software che permette di gestire grosse quantità di dati in modo: yefficiente ysicuro yconcorrente yaffidabile

6 Il modello dei dati zUn DBMS permette di descrivere I dati in base ad un modello dei dati zil modello supportato da Access è il modello relazionale, in base al quale I dati vengono rappresentati in tabelle, ciascuna composta da tuple - o record - zun insieme di dati rappresentati secondo un determinato modello prende il nome di schema zI dati contenuti nelle tabelle possono poi venire collegati attraverso il meccanismo delle chiavi

7 Esempio Imp# Nome dip# mansione data_a stipendio Dip# Nome_dip Ufficio divisione attività dirigente n n 1 1

8 I linguaggi zUn DBMS in genere supporta tre tipi di linguaggi yData Definition Language (DDL) xpermette di descrivere lo schema yData Manipulation Language (DML) xpermette di interrogare I dati (Query Language) e di modificarli yData Storage Language (DSL) xpermette di influenzare la memorizzazione dei dati prevista dal sistema zSQL (Structured Query Language) è un linguaggio standard per laccesso a basi di dati relazionali che supporta tutte le funzionalità sopra elencate

9 Funzionalità di un DBMS zIl modello dei dati permette di rappresentare dati a livello logico, che è il livello corretto per gli utenti del DB zAffinché però un sistema software possa essere definito DBMS, è necessario che I dati possano essere utilizzati in modo: yefficiente xstrutture di memorizzazione, strutture di accesso, ottimizzazione di interrogazioni yconcorrente xtransazioni yaffidabile xtransazioni ysicuro xaccesso dipendente dal contenuto

10 Efficienza zIn un DBMS lefficienza è garantita dalle strutture dati utilizzate per rappresentare lo schema logico e dallefficienza del sistema nelloperare su tali strutture zEsistono varie strutture alternative per implementare un modello dei dati zLa scelta dalla strutture più efficienti dipende dal tipo di accessi che si eseguono sui dati zNormalmente un DBMS ha le proprie strategie di implementazione di un modello dei dati; tuttavia l'utente (esperto) può influenzare le scelte fatte dal sistema

11 Supporti di memorizzazione zI dati memorizzati in una base di dati devono essere fisicamente memorizzati su un supporto fisico di memorizzazione zBasi di dati in genere memorizzate su memoria secondaria (dischi magnetici) ytroppo grosse per risiedere in memoria principale ymaggiori garanzie di persistenza dei dati ycosto per unita' di memorizzazione decisamente inferiore zI dati sono trasferiti tra il disco e la memoria principale in unita' chiamate blocchi yun blocco e' una sequenza di byte contigui yla dimensione del blocco dipende dal sistema operativo

12 Organizzazione di file zI dati sono generalmente memorizzati in forma di record zun record è costituito da un insieme di valori (campi) collegati zun file e' una sequenza di record zPoiche' i dati sono trasferiti in blocchi tra la MS e la MM, e' importante assegnare i record ai blocchi in modo tale che uno stesso blocco contenga record tra loro interrelati zSe si riesce a memorizzare sullo stesso blocco record che sono spesso richiesti insieme si risparmiano accessi a disco

13 Organizzazione di file zPer DBMS di piccole dimensioni (es. per PC) una soluzione spesso adottata e' di memorizzare ogni relazione in un file separato zPer DBMS large scale una strategia frequente e' di allocare per il DBMS un unico grosso file, in cui sono memorizzate tutte le relazioni yla gestione di questo file e' lasciata al DBMS yes. Access

14 Strutture ausiliarie di accesso zSpesso le interrogazioni accedono solo un piccolo sottoinsieme dei dati zPer risolvere efficientemente le interrogazioni puo' essere utile allocare delle strutture ausiliarie che permettano di determinare direttamente i record che verificano una data query (senza scandire tutti i dati) yindici zEsempio: se voglio determinare lo stipendio del Sig. Rossi, un indice permette di recuperare direttamente la tupla che memorizza le informazioni relative al Sig. Rossi, senza scandire tutta la tabella

15 Esecuzione di interrogazioni zQuindi quando una query e' presentata al sistema occorre determinare il modo piu' efficiente per eseguirla usando le strutture disponibili zPer interrogazioni complesse esistono piu' strategie possibili zLa scelta della strategia e' fatta principalmente in base al numero di accessi a disco zAnche se il costo di determinare la strategia ottima puo' essere alto, il vantaggio in termini di efficienza che se ne ricava e' tale che in genere conviene eseguire l'ottimizzazione

16 Transazioni zPer mantenere le informazioni consistenti e' necessario controllare opportunamente le sequenze di accessi e aggiornamenti ai dati zTali sequenze sono dette transazioni zOgni transazione e eseguita o completamente (cioe' effettua il commit), oppure per nulla (cioe' effettua l'abort) se si verifica un qualche errore (hardware o software) durante l'esecuzione zNecessita' di garantire che le transazioni eseguite concorrentemente si comportino come se fossero state eseguite in sequenza ycorrettezza concorrenza zNecessita' di tecniche per ripristinare uno stato corretto della base di dati a fronte di malfunzionamenti di sistema yaffidabilità

17 Sicurezza zIl controllo dellaccesso regola le operazioni che si possono compiere sulle informazioni e le risorse in una base di dati zScopo: limitare e controllare le operazioni che gli utenti effettuano, prevenendo accidentali o deliberate azioni che potrebbero compromettere la correttezza e la sicurezza dei dati zNel controllo dellaccesso: yoggetti: risorse a cui si vuole garantire protezione ysoggetti: agenti che richiedono di potere esercitare privilegi sui dati

18 Sicurezza zI modelli di controllo dellaccesso per basi di dati differiscono da quelli definiti per sistemi operativi: yuna BD è caratterizzata da un numero maggiore di oggetti rispetto ad un SO ydeve potere avvenire a diversi livelli di granularità: relazione, tupla, attributo yrisorse reali e logiche (es. Viste) ydeve tenere conto anche della semantica dei dati zdiversi DBMS supportano diverse politiche di controllo dellaccesso zSQL permette di specificare alcune di queste politiche

19 Architettura zDalla discussione precedente, segue che un DBMS contiene diverse strutture dati che includono: yi file con i dati (cioe' i file per memorizzare il DB stesso) yfile dei dati di sistema (che includono il dizionario dei dati e le autorizzazioni) yindici (esempio B­tree o tabelle hash) ydati statistici (esempio il numero di tuple in una relazione) che sono usati dallo strategy selector per determinare la strategia ottima di esecuzione

20 Architetture per lutilizzo di un DBMS

21 Architetture client-server zModello generale di interazione tra processi software, in cui I processi che interagiscono si suddividono in: yclient: richiedono servizi xruolo attivo yserver: forniscono servizi xruolo reattivo zI client richiedono un insieme limitato di servizi ad uno o più server z I server rispondono a molte richieste provenienti da molti processi client

22 Architetture client-server

23 zNel contesto delle basi di dati sono ormai diffuse zportano ad una chiara separazione tra le funzionalità di client e server yseparazione tra progettazione e gestione zcaratteristiche macchine client/server: yclient: adatti ad interazione con lutente (per ad esempio, interrogazione dati) yserver: adatti alla gestione dati (memorizzazione e gestione, elevata efficienza)

24 Architetture client-server zSQL offre un paradigma di programmazione ideale per lidentificazione dellinterfaccia di servizi: ylinterrogazione sono formulate dal client e inviate al server yI risultati delle interrogazioni sono calcolati dal server e inviati al client ygrazie alla standardizzazione di SQL, è possibile progettare applicazioni che interagiscono con diversi server

25 Esempi zAlcuni DBMS supportano sia la versione Desktop (Oracle, SQL Server) che la versione client/server zAccess può essere visto come un Desktop database znon può essere definito un DBMS in quanto non supporta tutte le funzionalità elencate in precedenza

26 Architettura di SQL Server

27 Architettura zSQL Server è un DBMS relazionale, progettato per funzionare efficientemente in due ambienti: yclient/server ydesktop

28 Client/server architecture

29 Desktop architecture

30 Architettura zLa versione Desktop supporta qualche funzionalità in meno in termini di ottimizzazione znoi utilizzeremo la versione Desktop zI tool supportati sono gli stessi

31 Architettura SQL Server Engine SQL Server Enterprise Manager

32 SQL Server Engine zÉ un motore basato su SQL zcompatibile con SQL-92, entry-level zil dialetto SQL implementato da SQL Server è chiamato Transact-SQL (T-SQL) zT-SQL estende SQL, fornendo versioni semplificate di alcune operazioni zsupporta inoltre costrutti tipici dei linguaggi di programmazione (es. IF-THEN-ELSE) e permette di organizzare sequenze di statement SQL in procedure (stored procedure)

33 SQL Server Enterprise Manager zInterfaccia di amministrazione zpermette di amministrare server multipli dalla stessa console zpermette di gestire ciascun server ygestione database: creazione, modifica, cancellazione, mantenimento ygestione oggetti contenuti in un database: tabelle, viste, vincoli, ecc. ygestione server xreplicazione xsicurezza

34 SQL Query Analyzer zPermette di eseguire interattivamente statement T-SQL zè possibile visualizzare il piano di esecuzione prescelto per lo statement specificato zè possibile determinare quali indici associare alle tabelle considerate in una query (Index Tuning Wizard) zè possibile visualizzare statistiche sulle query eseguite

35 Componenti di base di un database in SQL Server

36 Architettura zIn SQL Server 2000, I dati sono organizzati in database zesistono due tipi di organizzazione: ylogica: schema relazionale yfisica: strumenti di memorizzazione zlutente interagisce solo con lorganizzazione logica zlamministratore può intervenire anche sullorganizzazione fisica

37 Architettura

38 Database zOgni istanza di SQL Server contiene 4 database di sistema e uno o più database creati dallutente zMaster: contiene I dati di sistema (cataloghi) ztempdb: contiene dati temporanei zmsdb: utilizzato da SQL Server Agent, per schedulare attività come backup e replicazioni zmodel: modello dal quale vengono creati tutti I database

39 Database zOgni utente del sistema è associato ad un database di default zquindi quando lutente si connette, può direttamente lavorare su tale database ztale database può comunque essere cambiato zé comunque possibile cambiare database (se si hanno I diritti)

40 Database zogni database contiene tabelle e altri oggetti zogni database viene mappato in un insieme di filegroups yuno primario, che contiene informazioni su startup e tabelle yuno secondario, utilizzato per motivi di efficienza ytransaction log, utilizzato per gestire le transazioni zlamministratore può intervenire nellorganizzazione di tali file zpossono anche essere read-only yutilizzati ad esempio per memorizzare dati storici, non più operativi

41 Gestione database da Enterprise Manager zEnterprise Manager permette di eseguire tramite interfaccia molte operazioni sui database: yCreazione ymodifica proprietà ycancellazione ycreazione oggetti associati ycondivisione con altri server ydefinizione piani di mantenimento (integrità, backup, statistiche,…) yimport/export dati ygenerazione script ybackup y...

42 Gestione Database tramite SQL zLa generazione script da Enterprise Manager permette di generare gli script SQL per la creazione e la cancellazione degli oggetti contenuti nel database zquesti sono comandi DDL, perché permettono di modificare lo schema del database zgli stessi comandi SQL possono essere specificati ed eseguiti dalla finestra del Query Analyzer

43 Gestione Database tramite SQL zCREATE DATABASE ; zDROP DATABASE ; zUSE ; zEsempio CREATE DATABASE prova; DROP DATABASE prova; z; non è obbligatorio, se manca viene aggiunto automaticamente zI messaggi indicano la creazione del filegroup primario e del transaction log

44 Elementi di un DB zComponenti: yTabelle yViste yStored Procedures yTrigger y... zOgni componente può essere creata direttamente da SQL Server Enterprise Manager zNel seguito: yanalizzeremo le componenti principali yvedremo come crearle da SQL Enterprise Manager e da SQL Query Analyzer tramite DDL

45 Tabelle zOgni database è composto da insieme di tabelle, come in Access zvengono supportate due tipi di tabelle: ypersistenti ytemporanee zle tabelle temporanee vengono memorizzate nel db tempdb e cancellate quando lutente si disconnette dal sistema zdue tipi di tabelle temporanee: ylocali: iniziano con # e sono visibili solo alla connessione che le ha create yglobali: iniziano con ## e sono visibili a tutte le connessioni

46 Principali tipi di dato supportati zBinary data types: permettono di memorizzare dati in formato esadecimale ybinary: dati a lunghezza fissa (fino a 8Kb) yvarbinary: dati a lunghezza variabile (fino a 8Kb) yimage: lunghezza arbitraria, fino ad un max di 2Gb xutile per memorizzare ad esempio documenti word, immagini, ecc. zcharacter data types: permettono di memorizzare informazioni testuali, rappresentate con un set di caratteri stabilito dal sistema (quello della tastiera) ychar: dati a lunghezza fissa (fino a 8Kb) yvarchar: dati a lunghezza variabile (fino a 8Kb) ytext: dati a lunghezza variabile, fino ad un max di 2Gb xad esempio documenti HTML o XML

47 Principali tipi di dato supportati zUnicode Data types:permettono di memorizzare caratteri provenienti da set diversi (es. Alfabero giapponese, russo) ynchar: lunghezza fissa, fino a 4000 caratteri ynvarchar: lunghezza variabile, fino a 4000 caratteri yntext: lunghezza variabile, maggiore di 4000 caratteri, fino ad un max di 2Gb ypreceduti da N zDate and time data ydatetime, smalldatetime y...

48 Principali tipi di dato supportati znumeric data yint, smallint, numeric, float, real, money,smallmoney zspecial data ytimestamp: numero crescente, in formato binario, che rappresenta listante in cui la riga è stata modificata per lultima volta ybit yuniqueidentifier ysql_variant: colonna che memorizza valori di vario tipo, ad eccezione di text, ntext, timestamp, image, sql_variant

49 Gestione tabelle da Enterprise Manager zLe tabelle possono essere create e manipolate direttamente da Enterprise Manager zinterfaccia simile a quella di Access ma estesa a supporto di aspetti presenti in SQL Server e non in Access ypermessi yconstraint yindici ytrigger

50 Gestione tabelle da SQL zCREATE TABLE (, … ) zEsempio:CREATE TABLE Impiegati (Imp# numeric(4) PRIMARY KEY, Nome VarChar(20), Mansione VarChar(20), Data_A Datetime, Stipendio Numeric(7,2), Premio_P Numeric(7,2), Dip# Numeric(2));

51 User defined data types zSQL Server 2000 permette allutente di definire nuovi tipi di dato zquesti tipi di dato non sono altro che sinonimi di tipi di dato direttamente supportati dal sistema znessuna possibilità di definire tipi composti znessun concetto object-oriented yper definire un tipo di dato è necessario specificare: ynome ynome tipo a cui si riferisce ypossibilità di utilizzare valori nulli zquesti tipi di dato possono essere generati sia dallEnterprise Manager che usando T-SQL

52 Esempio in T-SQL EXEC sp_addtype phone_number, 'varchar(20)', 'not null' CREATE TABLE customer (cust_id smallint NOT NULL, cust_name varchar(50) NOT NULL, cust_addr1 varchar(50) NOT NULL, cust_addr2 varchar(50) NOT NULL, cust_city varchar(50) NOT NULL, cust_state char(2) NOT NULL, cust_zip varchar(10) NOT NULL, cust_phone phone_number, cust_fax varchar(20) NOT NULL, cust_ varchar(30) NOT NULL, cust_web_url varchar(20) NOT NULL)

53 Generazione automatica di valori zÈ possibile generare in modo automatico valori univoci da assegnare ad un campo zlunicità può essere ylocale, allinterno di una singola tabella yglobale, allinterno del database

54 Identificatore locale zCREATE TABLE prova (campo1 int IDENTITY(1,2)); zvalore iniziale: 1 incremento: 2 zquando si inserisce una tupla non si devono specificare valori per campo1 yvengono gestiti direttamente dal sistema

55 Identificatore globale zCREATE TABLE prova (campo1 uniqueidentifier); oppure zCREATE TABLE prova (campo1 int ROWGUIDCOL);

56 Vincoli di integrità (constraints) zI vincoli di integrità rappresentano condizioni che I dati devono soddisfare per essere coerenti con la realtà che rappresentano zI vincoli possono essere ystrutturali: rappresentano relazioni tra I dati memorizzati nel database ysemantici: rappresentano condizioni semantiche sui dati

57 Vincoli strutturali zPRIMARY KEY: vincolo di chiave primaria zFOREIGN KEY: vincolo di chiave esterna zUNIQUE constraint: valori unici allinterno di una tabella zDEFAULT: permette di specificare un valore di default per un attributo zNULL, NOT NULL: permette di specificare se I valori di un attributo possono o meno essere nulli zCHECK: permette di specificare il range di valori ammissibili per un certo attributo

58 Vincoli strutturali zPer I vincoli di FOREIGN KEY è possibile specificare il comportamento da adottare in caso di cancellazione e/o aggiornamento zON DELETE CASCADE ON DELETE NO ACTION zON UPDATE CASCADE ON UPDATE NO ACTION

59 Esempio CREATE TABLE Docente (Dno Char(7), Dnome Varchar(20) NOT NULL, Residenza Varchar(15), PRIMARY KEY (Dno)); CREATE TABLE Relatore (Dno Char(7), Sno Char(6) DEFAULT 23, PRIMARY KEY (Sno), FOREIGN KEY (Dno) REFERENCES Docente ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (Sno) REFERENCES Studente(Sno) ON DELETE CASCADE, ON UPDATE CASCADE); CREATE TABLE Studente (Sno Char(6), Sname Varchar(20), Residenza Varchar(15), Birthdate Date, PRIMARY KEY (Sno));

60 Vincoli semantici zPossono essere specificati tramite I trigger yli vedremo più avanti

61 Diagrammi zI diagrammi sono oggetti di database che permettono di rappresentare le relazioni, in termini di chiavi esterne, esistenti tra tabelle zpermettono inoltre di definire tramite interfaccia grafica tali vincoli zanalogo alle relazioni di Access

62 Esempio zNel seguito utilizzeremo le seguenti tabelle negli esempi: Impiegati(Imp#, Nome, Mansione, Data_A, Stipendio, Premio_P, Dip#) Dipartimenti(Dip#, Nome_Dip, Ufficio, Divisione, Attività, Dirigente)

63 Modifica e cancellazione zTutte le proprietà delle tabelle possono essere modificate e cancellate yda Enterprise Manager ycon T-SQL xnon lo vediamo

64 Manipolazione di un database in SQL Server

65 Manipolazione dei dati zDopo avere progettato il database, è necessario potere interrogarlo e modificarlo zSQL Server permette di interrogare e aggiornare I dati in due modi differenti: ytramite SQL dal Query Analyzer ytramite interfaccia grafica simile a quella di Access, dallEnterprise Manager

66 Interrogazioni in SQL SELECT Ri1.C1, Ri2.C2,....., Rin.Cn FROM R1, R2,....., Rk WHERE F; dove zR1, R2,....., Rk e' una lista di nomi distinti di relazioni; zRi1.C1, Ri2.C2,....., Rin.Cn e' una lista di nomi di colonne zla notazione R.C indica la colonna di nome C nella relazione R zse una sola relazione nella lista di relazioni nella clausola FROM ha una colonna di nome C, si puo' usare C invece di R.C zF e' un predicato

67 Significato interrogazione zGenera il prodotto Cartesiano d R1, R2,....., Rk (cioè combina in tutti I modi possibili le tuple di R1, R2,....., Rk) zApplica alla relazione risultante la selezione F zRestituisci solo le componenti Ri1.C1, Ri2.C2,....., Rin.Cn

68 Esempio zQ1: selezionare gli impiegati che hanno uno stipendio maggiore di 2000 SELECT * FROM Impiegati WHERE Stipendio>2000; zIl simbolo * nella clausola di proiezione indica che tutte le colonne delle relazione devono essere ritrovate

69 Esempio zQ2: selezionare il nome e il numero di dipartimento degli impiegati che hanno uno stipendio maggiore di 2000 e hanno mansione di ingegnere SELECT Nome, Dip# FROM Impiegati WHERE Stipendio>2000 AND Mansione = 'ingegnere';

70 Esempio zQ3: selezionare il numero degli impiegati che lavorano nel dipartimento 30 e sono ingegneri o tecnici SELECT Imp# FROM Impiegati WHERE Dip#=30 AND (Mansione = 'ingegnere' OR Mansione = 'tecnico');

71 Operatori: Between zcondizioni su intervalli di valori: l'operatore BETWEEN permette di determinare le tuple che contengono in un dato attributo valori in un intervallo dato; C BETWEEN v1 AND v2 forma negata C NOT BETWEEN v1 AND v2 zEsempio SELECT Nome, Stipendio FROM Impiegati WHERE Stipendio BETWEEN 1100 AND 1400;

72 Operatori: LIKE zconfronto tra stringhe di caratteri: l'operatore LIKE permette di eseguire alcune semplici operazioni di pattern matching su colonne di tipo stringa zun predicato di confronto espresso con l'operatore LIKE ha il seguente formato C LIKE pattern dove pattern e' una stringa di caratteri che puo' contenere i caratteri speciali % e _ yil carattere % denota una sequenza di caratteri arbitrari di lunghezza qualsiasi (anche zero) yil carattere _ denota esattamente un carattere.

73 Esempio LIKE zDeterminare tutti gli impiegati che hanno 'R' come terza lettera del cognome SELECT Nome FROM Impiegati WHERE Nome LIKE '_ _ R%';

74 Ordinamento zNegli esempi visti, l'ordine delle tuple risultato di una interrogazione e' determinato dal sistema (dipende dalla strategia usata per eseguire l'interrogazione) ze' possibile specificare un ordinamento diverso aggiungendo alla fine dell'interrogazione la clausola ORDER BY, ORDER BY DESC

75 Esempio SELECT Stipendio, Mansione, Nome FROM Impiegati WHERE Dip#=30 ORDER BY Stipendio; SELECT Mansione, Stipendio, Nome FROM Impiegati ORDER BY Mansione, Stipendio DESC;

76 DISTINCT zUna query può anche restituire duplicati zper eliminarli: clausola DISTINCT zSELECT Mansione FROM Impiegati; zSELECT DISTINCT Mansione FROM Impiegati;

77 Join zL'operazione di join rappresenta un'importante operazione in quanto permette di correlare dati rappresentati da relazioni diverse zIn genere il join e' espresso in SQL tramite un prodotto Cartesiano a cui sono applicati uno o piu' predicati di join zun predicato di join esprime una relazione che deve essere verificata dalle tuple risultato dell'interrogazione

78 Esempio zEsempio: determinare il nome del dipartimento in cui lavora l'impiegato Rossi SELECT Nome_Dip FROM Impiegati, Dipartimenti WHERE Nome = 'Rossi' AND Impiegati.Dip# = Dipartimenti.Dip#; il predicato di join e' Impiegati.Dip# = Dipartimenti.Dip#

79 Espressioni e funzioni aritmetiche zi predicati usati nelle interrogazioni possono coinvolgere, oltre a nomi di colonna, anche espressioni aritmetiche ztali espressioni sono formulate applicando gli operatori aritmetici (+,, *, /) ai valori delle colonne delle tuple zle espressioni artimetiche possono comparire nella clausola di proiezione e nelle espressioni di assegnamenti del comando di UPDATE

80 Esempio ztrovare il nome, lo stipendio, il premio di produzione, e la somma dello stipendio e del premio di produzione di tutti gli ingegneri per cui la somma dello stipendio e del premio di produzione e' maggiore di 2000 SELECT Nome, Stipendio, Premio_P, Stipendio+Premio_P FROM Impiegati WHERE Mansione = 'ingegnere' AND Stipendio+Premio_P > 2000;

81 Funzioni per stringhe zConcatenazione: SELECT Cognome + ' ' + Nome + ' ' + Indirizzo FROM Persone; zFunzioni: ylen(str): calcola la lunghezza di un stringa WHERE len(Cognome) > 3 y substring(str, m, n) (m ed n sono interi) xestrae dalla stringa 'str' la sottostringa dal carattere di posizione m per una lunghezza n

82 Funzioni per date zLe date possono essere sommate e sottratte DATEADD(day, 21, GETDATE()) DATEDIFF(day,date, GETDATE()) zGETDATE() restituisce la data corrente

83 Funzioni di gruppo zUna funzione di gruppo permette di estrarre informazioni da gruppi di tuple di una relazione zLe funzioni di gruppo si basano su due concetti fondamentali: ypartizionamento delle tuple di una relazione in base al valore di una o piu' colonne della relazione xle colonne da usare sono specificate tramite la clausola GROUP BY ycalcolo della funzione di gruppo per ogni gruppo ottenuto dal partizionamento zuna funzione di gruppo ha come argomento una colonna e si applica all'insieme di valori di questa colonna, estratti dalle tuple che appartengono allo stesso gruppo

84 Funzioni di gruppo zle funzioni di gruppo comunemente presenti sono: MAX, MIN, SUM, AVG, COUNT ztutte le funzioni di gruppo, ad accezione di COUNT, possono essere applicate solo su insiemi che consistono di valori semplici e non su insiemi di tuple zla funzione COUNT puo' avere due tipi di argomenti yun nome di colonna in tal caso nello standard SQL2 e' obbligatorio l'uso del qualificatore DISTINCT xesempio: COUNT (DISTINCT Stipendio) zil carattere speciale '*' yla funzione restituisce il numero di tuple presenti in un dato gruppo xesempio: COUNT(*)

85 Esempio zsi vuole raggruppare gli impiegati in base al numero di dipartimento e si vuole determinare il massimo stipendio di ogni gruppo SELECT Dip#, MAX(Stipendio) FROM Impiegati GROUP BY Dip#;

86 Esempio zsupponiamo di voler raggruppare gli impiegati sulla base del dipartimento e della mansione; per ogni gruppo si vuole determinare il nome del dipartimento, la somma degli stipendi, quanti impiegati appartengono ad ogni gruppo, e la media degli stipendi SELECT Nome_Dip, Mansione, SUM(Stipendio), COUNT(*), AVG(Stipendio) FROM Dipartimenti, Impiegati WHERE Dipartimenti.Dip#=Impiegati.Dip# GROUP BY Nome_Dip, Mansione;

87 Funzioni di gruppo zimportante restrizione: una clausola di proiezione di una query contenente la clausola GROUP BY puo' solo includere: yuna o piu' colonne tra le colonne che compaiono nella clausola GROUP BY zle funzioni di gruppo possono apparire in espressioni aritmetiche yesempio: SUM(Stipendio) + SUM(Premio_p)

88 Having ze' possibile specificare condizioni di ricerca su gruppi di tuple zEsempio: supponiamo di voler eseguire una query come la precedente ma di essere interessati solo ai gruppi che contengono almento due impiegati SELECT Nome_Dip, Mansione, SUM(Stipendio), COUNT(*), AVG(Stipendio) FROM Dipartimenti, Impiegati WHERE Dipartimenti.Dip#=Impiegati.Dip# GROUP BY Nome_Dip, Mansione HAVING COUNT(*) > 2;

89 Un modello di esecuzione zsi applica la condizione di ricerca specificata nella clausola WHERE a tutte le tuple della relazione oggetto della query yla valutazione avviene tupla per tupla zalle tuple ottenute al passo precedente, si applica il partizionamento specificato dalla clausola GROUP BY zad ogni gruppo di tuple ottenuto al passo precedente, si applica la condizione di ricerca specificata dalla clausola HAVING zi gruppi ottenuti al passo precedente sono i gruppi di tuple che verificano la query zper tali gruppi, vengono calcolate le funzioni di gruppo specificate nella clausola di proiezione della query zi valori restituiti da tali funzioni costituiscono il risultato della query

90 Valori nulli zSQL usa una logica a tre valori per valutare il valore di verita' di una condizione di ricerca (clausola where) zTrue (T), False (F), Unknown (?) zun predicato semplice valutato su un attributo a valore nullo da' come risultato della valutazione ? zil valore di verita' di un predicato complesso viene calcolato in base alle seguenti tabelle di verita' AND OR T F ? T T F ? T T T T F F F F F T F ? ? ? F ? ? T ? ? zuna tupla per cui il valore di verita' e' ? non viene restituita dalla query NOT T F F T ?

91 IS NULL zil predicato IS NULL applicato ad un dato attributo di una tupla restituisce True se la tupla ha valore nullo per l'attributo zil predicato IS NOT NULL applicato ad un dato attributo di una tupla restituisce True se la tupla ha valore non nullo per l'attributo

92 Viste zUna vista è una tabella virtuale zil contenuto della tabella non è infatti memorizzato su disco ma definito tramite una query, al cui risultato viene assegnato un nome ztale nome identifica la vista zuna vista può essere utilizzata in ogni contesto in cui può essere utilizzata una tabella zIn genere vengono utilizzate per semplificate la percezione che lutente ha del database zpossono essere utilizzate come base per definire politiche di sicurezza

93 Viste

94 Gestione viste da Enterprise Manager zLinterfaccia fornita è del tutto simile a quella di Access per definire le query zLa stessa interfaccia può essere utilizzata per definire la vista e per eseguire la query corrispondente, in modo da verificarne il risultato

95 Gestione viste da SQL zCREATE VIEW AS Esempio CREATE VIEW High_salary AS SELECT Name, salary FROM Employee WHERE salary >2000;

96 Esempio zsi vuole creare una vista costituita da un sottoinsieme delle tuple della relazione Impiegati; piu' precisamente la vista deve elencare le colonne Imp#, Nome e Mansione degli impiegati del dipartimento 10 CREATE VIEW Imp10 AS SELECT Imp#, Nome, Mansione FROM Impiegati WHERE Dip#=10;

97 View resolution zLe viste possono essere utilizzate nelle query zogni volta che ci si riferisce ad una vista, il nome della vista viene rimpiazzato dalla sua definizione (query) zquindi la query di partenza viene composta con la query che definisce la vista, ottenendo una nuova query, che viene eseguita zle viste possono anche essere definite in termini di altre viste, in questo caso si itera il procedimento precedente zEsempio: selezionare le tuple della vista Imp10 SELECT * FROM Imp10;

98 Aggiornamenti in SQL zTre possibili aggiornamenti: yinserimento ycancellazione ymodifica zeseguibili da Enterprise Manager tramite interfaccia grafica, simile a quella di Access oppure da Query Analyzer con SQL

99 Inserimento in SQL zTre possibilità: ysi inserisce una nuova tupla INSERT INTO Dipartimenti VALUES (40, 'Edilizia Industriale', 6100, 'D2',7698); ysi selezionano tuple dal database e si inseriscono in una tabella esistente INSERT INTO Promozioni (Nome, Stipendio, Premio_P) SELECT Nome, Stipendio, Premio_P FROM Impiegati WHERE Premio_P > 0.25*Stipendio AND Mansione = 'ingegnere';

100 Inserimento in SQL ysi selezionano tuple dal database e si inseriscono in una nuova tabella SELECT Nome, Sipendio, Premio_P INTO Promozioni FROM Impiegati WHERE Premio_P > 0.25*Stipendio AND Mansione = 'ingegnere';

101 Cancellazione in SQL zSi specifica la condizione che devono soddisfare le tuple da cancellare DELETE FROM Dipartimenti WHERE Dip# = 40;

102 Modifica in SQL zSi deve specificare quali tuple devono essere modificate e come UPDATE Impiegati SET Mansione = 'dirigente', Stipendio = 1.10*Stipendio WHERE Nome = 'Gianni';

103 Aggiornamento di viste zOgni volta che vengono modificate le tabelle di base di una view, cambia implicitamente anche il contenuto della view zè comunque possibile aggiornare direttamente una view sotto alcune condizioni, tra cui: ye' possibile eseguire l'operazione di DELETE se l'interrogazione di definizione della vista soddisfa le seguenti condizioni: x e' su una sola relazione x non contiene la clausola GROUP BY, la clausola DISTINCT, o una funzione di gruppo ye' possibile eseguire l'operazione di UPDATE se l'interrogazione di definizione della vista soddisfa le due condizioni precedenti ed inoltre la colonna modificata non e' definita da un'espressione ye' possibile eseguire l'operazione di INSERT se l'interrogazione di definizione della vista soddisfa le tre condizioni precedenti ed inoltre qualsiasi colonna per cui valga il vincolo NOT NULL sia presente nella vista

104 Esercitazione proposta zUtilizzare lutente giunti, passwd: corsodbms èCreare da Enterprise Manager un database corsi, che mantenga le informazioni relative ai corsi on-line che si intendono gestire. In particolare, creare: ydatabase ytabelle yvincoli yuna vista per una specifica operazione zinserire opportuni dati nella tabella da Enterprise Manager e/o da Query Analyzer (provare entrambe le modalità)

105 Esercitazione proposta èda Query Analyzer, eseguire una decina di interrogazioni, ritenute significative in SQL e salvarne il testo in un file zmodificare un corso (provare da Enterprise Manager e da SQL) zcancellare un corso (provare da Enterprise Manager e da SQL)

106 Componenti avanzate di un database in SQL Server

107 Statement multipli zPer eseguire operazioni che processano più statement SQL, SQL Server fornisce 4 possibilità: ybatches yscript ystored procedure ytrigger

108 Batch zGruppi di statement T-SQL inviati ed eseguiti contemporanemante allSQL Engine zvengono compilati in un singolo piano di esecuzione zse si verifica errore di compilazione yil piano non viene generato zse si verifica un errore in esecuzione ygli statement seguenti non vengono eseguiti zper speficare un batch da SQL Query Analyzer: GO

109 Esempio CREATE TABLE Impiegati (Imp# numeric(4) PRIMARY KEY, Nome VarChar(20), Mansione VarChar(20), Data_A Datetime, Stipendio Numeric(7,2), Premio_P Numeric(7,2), Dip# Numeric(2)); SELECT Nome, Dip# FROM Impiegati WHERE Stipendio>2000 AND Mansione = 'ingegnere'; GO

110 Script zSequenza di statement T-SQL memorizzati in un file e quindi eseguiti, utilizzando una funzionalità particolare di SQL Server zpossono essere eseguiti dalla shell del DOS mediante il comando: osql zosql -U -i -o zviene chiesta la password

111 Stored Procedures zLe stored procedure sono simili al concetto di procedura (o funzione) presente nei linguaggi di programmazione zcome vedremo le applicazioni possono poi utilizzare le stored procedure per interagire con il DBMS zfunzionamento di base: yaccettano parametri di input yusano T-SQL per elaborare I dati contenuti nel DB ysettano parametri di output yrestituiscono valori di stato per indicare se lesecuzione ha avuto successo zPossono essere create sia da Enterprise Manager che da Query Analyzer, ma è sempre necessario specificare il codice T-SQL

112 Store procedures zEsistono stored procedure predefinite, associate al database Master zI nomi di tali procedure iniziano con sp_ znel seguito ne vedremo alcune

113 Creazione zCome per le tabelle anche le stored procedure possono essere temporanee zvalgono le stesse convenzioni viste per le tabelle zCREATE PROCEDURE AS zEXECUTE zCREATE PROCEDURE deve essere lunico comando allinterno di un batch

114 Dichiarazioni zIn T-SQL è possibile dichiarare variabili locali, valide allinterno del batch eseguito e assegnare valori per ogni tipo supportato da T-SQL zI nomi di variabili devono essere preceduti int = 1234

115 Esempio INT = 1234 GO CREATE PROCEDURE ImpSelect AS SELECT * FROM Impiegati Where #Imp GO

116 Parametri zI parametri sono utilizzati per scambiare valori tra la procedura e lapplicazioni o il tool che la richiama zTipi di parametri: yinput youtput yvalore di ritorno (se non specificato si assume 0)

117 Parametri di input CREATE PROCEDURE INT AS SELECT * FROM Impiegati Where Imp# GO EXEC = 1234 GO

118 Parametri di input zÉ possibile specificare un valore di default zin questo caso, non sarà necessario passare un valore per il parametro CREATE PROCEDURE INT = 1234 AS SELECT * FROM Impiegati Where Imp# GO EXEC ImpSelect GO EXEC ImpSelect

119 Parametri di Output zPer restituire valori allambiente chiamante, è possibile utilizzare parametri di output CREATE PROCEDURE int OUTPUT AS = avg(stipendio) FROM Impiegati WHERE Dip# GO int EXEC = OUTPUT GO

120 Valori di ritorno zListruzione RETURN permette di restituire un valore allambiente chiamanete zPer default y0 indica che lesecuzione è andata a buon fine y1 indica che lesecuzione ha generato errori

121 Esempio CREATE PROCEDURE int OUTPUT AS INT = 0 SELECT avg(stipendio) FROM Impiegati WHERE Dip# IF <>0) = GO int INT = = OUTPUT PRINT 'Return Status= ' + AS CHAR(10)) GO

122 Costrutti di controllo zClassici costrutti imperativi per alterare il flusso sequenziale di esecuzione degli statement specificati zBEGIN END ystesso ruolo {} in Java zIF ELSE yclassico costrutto di scelta zWAITFOR yWAITFOR DELAY 00:00:02aspetta due secondi yWAITFOR TIME 22:00riparte alle 22 zWHILE ycome in Java

123 Costrutti di controllo zCASE zSELECT name, CASE state WHEN 'CA' THEN 'California' WHEN 'KS' THEN 'Kansas' WHEN 'TN' THEN 'Tennessee' WHEN 'OR' THEN 'Oregon' WHEN 'MI' THEN 'Michigan' WHEN 'IN' THEN 'Indiana WHEN 'MD' THEN 'Maryland' WHEN 'UT' THEN 'Utah' END AS StateName FROM Authors

124 Cursori zGli statement SQL restituiscono un insieme di tuple zpuò capitare di dovere analizzare le tuple una per una zin questo caso è necessario associare al risultato un cursore, cioè un puntatore che permette di muoversi allinterno di un insieme di tuple risultato zun cursore deve: yessere dichiarato yaperto yutilizzato per muoversi sulle tuple ychiuso zè possibile dichiarare una variabile di tipo cursore

125 Cursori zDichiarazione DECLARE CURSOR FOR zApertura OPEN zRecupero tupla successiva FETCH NEXT FROM INTO zChiusura CLOSE zDeallocazione DEALLOCATE

126 Cursori Variabile di sistema, è uguale a 0 se la tupla è stata letta, è < 0 se si è verificato qualche problema (ad esempio la tupla non esiste, siamo arrivati alla fine del result set)

127 Esempio DECLARE ImpCursor CURSOR FOR SELECT Nome FROM Impiegati OPEN ImpCursor VARCHAR(10) FETCH NEXT FROM ImpCursor WHILE = 0) BEGIN FETCH NEXT FROM ImpCursor END CLOSE ImpCursor DEALLOCATE ImpCursor

128 Creazione statement a runtime zÉ possibile creare a run time stringhe che rappresentano statement SQL ztali statement devono essere rappresentati come stringhe Unicode zvengono eseguiti utilizzando la stored procedure di sistema sp_executesql zogni batch eseguito con sp_executesql non può accedere le variabili definite nel batch a cui appartiene la chiamata di sp_executesql e viceversa

129 Esempio NVARCHAR(100) = N'SELECT * FROM Impiegati' EXEC

130 Problema NVARCHAR(100) =12 = N'SELECT * FROM Impiegati + WHERE Imp# EXEC =14 = N'SELECT * FROM Impiegati + WHERE Imp# EXEC zLa stessa stringa viene compilata due volte

131 Soluzione: uso di parametri = N'SELECT * FROM Impiegati + WHERE Imp# = INT @MyImp = 12 @MyImp = 24 zin questo caso alla seconda esecuzione il sistema si accorge di avere già compilato lo statement e riutilizza il piano generato

132 Trigger zI trigger possono essere visti come un tipo particolare di stored procedure che viene attivata automaticamente quando I dati di una certa tabella vengono inseriti, modificati, cancellati zVengono spesso utilizzati per: yforzare vincoli di integrità semantici, che coinvolgono più di una relazione yper aggiornare viste yper attivare azioni esterne

133 Esempio zSupponiamo di avere un campo n_imp nella tabella Dipartimenti che tiene conto di quanti impiegati lavorano in un dato dipartimento zun trigger potrebbe essere utilizzato per aggiornare automaticamente questo valore quando si inserisce o si cancella un impiegati

134 Trigger zIn base ai vincoli fissati su una relazione, ogni operazione di aggiornamento richiede una verifica dei vincoli di integrità come side effect zIn SQL Server esistono due tipi di trigger, classificati in base al loro comportamento rispetto al side effect delle operazioni di aggiornamento: yINSTEAD OF: eseguiti prima di side effect yAFTER: eseguiti dopo side effect zogni tabella può avere al più un INSTEAD OF trigger per ogni operazione di aggiornamento ma più AFTER trigger

135 Trigger zCREATE TRIGGER ON INSTEAD OF INSERT| INSTEAD OF UPDATE| INSTEAD OF DELETE| AFTER INSERT| AFTER UPDATE| AFTER DELET| AS

136 Trigger zPrima vengono eseguiti INSTEAD OF trigger (una sola volta, non possono essere attivati ricorsivamente) zpoi vengono eseguiti AFTER trigger ztrigger INSTEAD OF sono soggetti a limitazioni yNon possono essere definiti su tabelle che hanno almeno una chiave esterna associata ad un vincolo per loperazione di cancellazione e/o aggiornamento

137 Condizioni speciali zTest per stabilire se INSERT e UPDATE hanno aggiornato I valori contenuti in una certa colonna CREATE TABLE my_table(a int NULL, b int NULL) GO CREATE TRIGGER my_trig ON my_table FOR INSERT AS IF UPDATE(b) PRINT 'Column b Modified' GO

138 Tabelle speciali zUnoperazione di UPDATE può essere vista come unoperazione di DELETE seguita da unoperazione di INSERT zSQL Server 2000 mantiene automaticamente, per ogni tabella, due ulteriori tabelle: yINSERTED: contiene tutte le tuple inserite con INSERT o UPDATE yDELETED: contiene tutte le tuple cancellate con DELETE o UPDATE zQueste tabelle, temporanee, possono essere utilizzate nel corpo dei trigger

139 Esempio zSe lo stipendio di Rossi è stato modificato e supera 2000 allora Rossi passa al dipartimento 4 CREATE TRIGGER updateRossi ON Impiegati AFTER UPDATE, INSERT AS INT = Stipendio FROM INSERTED WHERE Nome = Rossi > 2000 BEGIN UPDATE Impiegati SET Dip# = 4 WHERE Nome = Rossi END

140 Esercitazione proposta zCreare una stored procedure per eseguire le seguenti operazioni: yprende in input un argomento e un costo ydetermina tutti I corsi relativi a quellargomento e con costo minore a quello dato ystampa I corsi determinati in ordine crescente rispetto al costo zprovare ad eseguire la stored procedure attribuendo diversi valori ai parametri

141 Esercitazione proposta zCreare un trigger per la tabella corsi in modo che, quando viene inserito un nuovo corso, stampi il numero totale di corsi esistenti nel database

142 Full-text search

143 Problema zLe tabelle possono contenere campi contenenti informazioni testuali yChar yVarchar yText yImage zNasce il problema di come effettuare ricerche su tali campi

144 Esempio zSupponiamo che la tabella DIPARTIMENTI contenga un campo ATTIVITA, che contiene una descrizione testuale delle attivita portate avanti dal dipartimento zIl campo ATTIVITA puo essere definito come VARCHAR(200) zSupponiamo di volere determinare tutti I dipartimenti che si occupano di ricerca zIn questo caso, ragionevolmente il campo ATTIVITA dovra contenere parole come ricerca, ricerche, ma anche magari attivita scientifiche, in quanto identificano ricerche zLa ricerca potrebbe essere eseguita utilizzando il predicato LIKE, ma le possibiita a nostra disposizione in questo caso sarebbero ridotte rispetto a quelle supportate, come vedremo, da ricerche full-text

145 Full-text search zSQL Server permette di eseguire ricerche di questo tipo su campi testuali, mediante un procedimento in due passi: yIndicizzazione: durante questa fase, si istruisce il sistema sul contenuto delle colonne testuali da interrogare yInterrogazione: durante questa fase, si possono eseguire le interrogazioni sulle colonne testuali zPermette inoltre di indicizzare e interrogare yDocumenti binari (file WORD, ecc.) yFile memorizzati su file system

146 Full-text index zPer potere interrogare campi testuali e necessario istruire il sistema sul contenuto di tali campi zCioe il sistema deve processare il contenuto di tali campi ed identificare le parole significative, da utilizzare poi in fase di ricerca zEsempio di informazione: yLa colonna 3 della tabella DIPARTIMENTI contiene nel campo ATTIVITA la parola ricerca a partire dalla posizione 25, come parola numero 5 zNon tutte le parole sono significative yNoise word (es. articoli) zLe parole non significative non vengono considerate nella fase di indicizzazione

147 Full-text index zSe si vogliono utilizzare ricerche testuali sui campi di determinate tabelle, per ciascuno di questi campi e necessario: yCreare un indice (da SQL Server Enterprise Manager) yPopolare lindice, cioe fare in modo che contenga informazioni circa il contenuto della colonna considerata zSolo dopo avere eseguito I passi precedenti, sara possibile eseguire full-text query sulla colonna considerata zLa popolazione dellindice puo essere automatica o manuale e automatica ma deve essere fatta manualmente, o schedulata zE possibile definire un solo indice per tabella (lindice puo coinvolgere piu colonne)

148 Query Full-text zT-SQL supporta due predicati per interrogare campi testuali: yCONTAINS yFREETEXT zDue funzioni: yCONTAINSTABLE yFREETEXTTABLE zQuesti predicati possono essereutilizzati nella clausola WHERE degli statement di interrogazione

149 Contains zAlcune delle ricerche che possono essere espresse con CONTAINS possono anche essere espresse con LIKE, ma non tutte zCONTAINS e case insensitive, al contrario di LIKE zNel seguito, per gli esempi useremo le seguenti strutture: yDB: Northwind, Tabella: Categories, Campo: Description(ntext(16)) yDB: pubs, Tabella: titles, Camp1: notes (varchar(80)), title (varchar(200))

150 Esempio di base SELECT Description FROM Categories WHERE Description LIKE '%bean curd%' SELECT Description FROM Categories WHERE CONTAINS(Description, ' "bean curd" ') FRASE

151 Ricerche esprimibili zUna o piu parole e/o frasi zInflectional forms di una parola (drive, drives, drove, droven zParole con un certo prefisso: auto* zParole o frasi pesate, in relazione allimportanza zParole o frasi simili ad altre (proximity search) zRicerche combinate con OR, AND, NOT

152 Ricerche per specifiche parole e/o frasi SELECT title_id, title, notes FROM titles WHERE CONTAINS(notes, 'business') SELECT title_id, title, notes FROM titles WHERE CONTAINS(notes, ' "common business applications" ') FRASE PAROLA

153 Ricerche per specifiche parole e/o frasi zSi possono utilizzare anche piu campi nella ricerca SELECT title_id, title, price FROM titles WHERE CONTAINS( *, ' "French gourmet" ' ) zLa ricerca viene effettuata in tutte le colonne indicizzate

154 Ricerche combinate SELECT title, notes FROM titles WHERE CONTAINS( notes, ' "favorite recipes" OR "gourmet recipes" ' ) SELECT title_id, title, ytd_sales FROM titles WHERE CONTAINS( title, ' cooking AND NOT ("computer*" )' ) SELECT CategoryName, Description FROM Categories WHERE CONTAINS( Description, ' beers AND ales ' )

155 Prefissi SELECT Description, CategoryName FROM Categories WHERE CONTAINS (Description, ' "ice*" ' ) SELECT Description, CategoryName FROM Categories WHERE CONTAINS (Description, ' "light bread*" ' )

156 Inflection form SELECT Description, CategoryName FROM Categories WHERE CONTAINS (Description, 'FORMSOF(INFLECTIONAL, "dry")')

157 Ricerche pesate zOgni parola o frase puo essere pesata yPeso minimo 0 yPeso massimo 1 SELECT CompanyName, ContactName, Address FROM Customers WHERE CONTAINS(Address, 'ISABOUT ("*des*", Rue WEIGHT(0.5), Bouchers WEIGHT(0.9) ) ' ) NON PESATO

158 Proximity terms zPermette di trovare sequenze di parole vicine nel testo SELECT title, notes FROM titles WHERE CONTAINS (notes, 'user NEAR computers') Equivalente a SELECT title, notes FROM titles WHERE CONTAINS (notes, 'user ~ computers') SELECT title, notes FROM titles WHERE CONTAINS(Description, ' "wheat*" ~ "bread mix" ')

159 Freetext zImplementa una query by example zForniamo una parola o una frase e il sistema trova tutti I testi simili zIdea: yIl sistema costruisce una query dalla parola o frase specificata yUsa CONTAINS per risolvere la nuova query SELECT Description, CategoryName FROM Categories WHERE FREETEXT (description, ' "The Fulton County Grand Jury said Friday an investigation of Atlanta recent primary election produced no evidence that any irregularities took place." ')

160 Combinazione predicati full-text con altri predicati zI predicati full-text possono essere combinati nella clausola WHERE con altri predicati non full-text SELECT Description, CategoryName FROM Categories WHERE CONTAINS (Description, ' "ice*" ' ) AND Category_name = Beverage

161 Containstable e Freetexttable zCONTAINS e FREETEXT sono predicati, quindi per ogni tupla restituiscono vero o falso yUtilizzati nella clausola WHERE zCONTAINSTABLE e FREETEXTTABLE sono funzioni che restituiscono tabelle yUtilizzati nella clausola FROM yLa tabella restituita ha due attributi: xKEY: identificatore tupla (chiave) xRANK: valore da 0 a 1000 che rappresenta la similarita del testo con la query specificata, piu e alto, piu e simile

162 Containstable e Freetexttable zPer utilizzare il campo RANK, e necessario fare il join della tabella CONTAINSTABLE o FREETEXTTABLE con la tabella considerata nella query SELECT C.Description, C.CategoryName, K.RANK FROM Categories AS C, CONTAINSTABLE (Categories, Description, '("sweet and savory" NEAR sauces) OR ("sweet and savory" NEAR candies)', 10 ) AS K WHERE C.CategoryID = K.[KEY]

163 Esempio SELECT K.RANK, CompanyName, ContactName, Address FROM Customers AS C, CONTAINSTABLE(Customers,Address, 'ISABOUT ("des*", Rue WEIGHT(0.5), Bouchers WEIGHT(0.9) ) ' ) AS K WHERE C.CustomerID = K.[KEY]

164 Ranked queries zPermettono di ritrovare I k testi che maggiormente assomigliano alla query zSi estende CONTAINSTABLE e FREETEXTTABLE con una parametro che indica quanto vale k SELECT K.RANK, CompanyName, ContactName, Address FROM Customers AS C, CONTAINSTABLE(Customers,Address, 'ISABOUT ("des*", Rue WEIGHT(0.5), Bouchers WEIGHT(0.9))', 3) AS K WHERE C.CustomerID = K.[KEY]

165 Esercitazione proposta zCreare un full-text index su un campo testuale della tabella corsi zModificare la stored procedure definita in modo che prenda in input una stringa ed esegua unoperazione full-text zprovare vari operatori full text e analizzarne il risultato zprovare ad eseguire la procedura con vari input

166 Alcuni cenni architetturali

167 Cosa vedremo zIndici (cenni) ztransazioni (cenni) zsicurezza (cenni)

168 Strutture ausiliarie di accesso zSpesso le interrogazioni accedono solo un piccolo sottoinsieme dei dati zPer risolvere efficientemente le interrogazioni puo' essere utile allocare delle strutture ausiliarie che permettano di determinare direttamente i record che verificano una data query (senza scandire tutti i dati) ztali strutture sono chiamate indici

169 Strutture ausiliarie di accesso zUna ricerca puo' essere effettuata per: ychiave primaria: il valore della chiave identifica un unico record xil contribuente con codice fiscale GRRGNN69R48 ychiave secondaria: il valore della chiave puo' identificare piu' record (es. i contribuenti di Genova) yintervallo di valori (sia per chiave primaria che per secondaria) x(es. i contribuenti con reddito compreso tra 60 e 90 milioni) ycombinazioni delle precedenti x(es. i contribuenti di Genova e La Spezia con reddito compreso tra 60 e 90 milioni) zPer effettuare la ricerca in modo piu' efficiente si puo' pensare di mantenere il file ordinato secondo il valore di una chiave di ricerca zil costo di ricerca e' lineare nel numero di blocchi del file zla ricerca su altri campi e' inefficiente

170 Indici zIdea base: associare al file dei dati una ``tabella''nella quale l'entrata i­esima memorizza una coppia (ki,ri ) dove: yki e'un valore di chiave del campo su cui l'indice e' costruito yri e'un riferimento al record (eventualmente il solo) con valore di chiave ki yil riferimento puo' essere un indirizzo (logico o fisico) di record o di blocco zquesta tabella può poi essere memorizzata in vari modi zspesso viene rappresentata come albero (B-tree)

171 Indici

172

173 zOrdinamento dei record nel file dei dati yindice clusterizzato (o indice primario): indice sull'attributo secondo i cui valori il file dei dati e' mantenuto ordinato yindice non clusterizzato (o indice secondario): indice su un attributo secondo i cui valori il file dei dati non e' mantenuto ordinato zl'uso di piu' indici secondari rende l'esecuzione delle interrogazioni piu' efficiente, ma rende piu' costosi gli aggiornamenti yquando si esegue l'inserzione o la cancellazione di un record e' necessario modificare tutti gli indici allocati sul file

174 Indici zData uninterrogazione, il sistema determina tutti I possibili modi con cui la stessa può essere eseguita: ysenza usare indice yusando indici, in vari modi (potrebbero essercene più di uno) zogni modalità = piano di esecuzione zviene determinato il piano di esecuzione con il minor costo (in termini di numero di accesso a disco) zsi esegue il piano con il minor costo

175 Perché ottimizzare? zStudenti(MatrS,Nome,Ind,AltreInfo) zEsami(Corso,MatrS,Voto,Data) zSupponiamo di voler trovare il nome degli studenti e la data degli esami per gli studenti che hanno sostenuto BD con 30 zSELECT Nome,Data FROM Studenti NATURAL JOIN Esami WHERE Corso ='BD' AND Voto =30

176 Perché ottimizzare? zConsideriamo un database con studenti e esami, di cui 500 di BD e di questi solo 50 con 30 (consideriamo solo la scansione sequenziale delle relazioni) zSe si fa il prodotto cartesiano delle due relazioni, si ottiene una relazione temporanea con tuple, da queste si estraggono poi le 50 tuple desiderate (costo proporzionale a accessi) zSe si selezionano i 50 esami di BD con 30 e poi si fa il join di questa relazione temporanea con Studenti si ha un costo proporzionale a

177 Indici in SQL Server zClusterizzati/non clusterizzati zvalori unici/valori non unici zcolonna singola/colonna multipla zcoprenti/non coprenti

178 Clusterizzazione zSQL Server Supporta sia indici clusterizzati che non clusterizzati zviene automaticamente creato un indice clusterizzato sulla chiave primaria della tabella zgli indici possono essere creati da Enterprise Manager o con SQL zpoiché un indice clusterizzato stabilisce lordine con cui I dati vengono memorizzati su file, una tabella può essere associata ad un solo indice clusterizzato zè possibile stabilire se I dati devono essere organizzati secondo lordinamento crescente o decrescente zutile su colonne utilizzate per range queries o ricerca valore

179 Clusterizzazione zGli indici non clusterizzati sono utili per ricerche su singolo valore zuna tabella può essere associata a più indici non clusterizzati

180 Unicità zUnique index: la colonna indicizzata non contiene duplicati zNon-Unique index: la colonna indicizzata può contenere duplicati znecessari vincoli UNIQUE o PRIMARY KEY per garantire lunicità dei dati

181 Numero colonne zUn indice può essere costruito su una singola colonna o su una combinazione di colonne zin questo ultimo caso, vengono indicizzate le tuple ottenute dalla combinazione

182 Fill factor zOgni volta che si inseriscono nuove tuple, lindice deve essere aggiornato zquesto aggiornamento permette di inserire I nuovi valori in una pagina dellindice zse la pagina è piena, è necessario dividerla in due pagine (split) zquesta operazione è piuttosto costosa zsoluzione: lasciare parzialmente vuote le pagine in modo da ridurre il costo in fase di inserimento zfill factor: stabilisce la percentuale delle pagine che deve essere occupata al momento della creazione dellindice zviene considerato solo al momento della creazione dellindice

183 Operazioni sugli indici zGli indici possono essere: ycreati yricalcolati ycancellati ymodificati (per quanto riguarda le proprietà) zcon Enterprise Manager possiamo solo: ycrearli ymodificarli ycancellarli ma NON possiamo ricalcolarli (non lo vediamo)

184 Transazioni zGli utenti interagiscono con la base di dati attraverso programmi applicativi ai quali viene dato il nome di transazioni zUna transazione e' un insieme parzialmente ordinato di operazioni di lettura e scrittura zL'insieme di operazioni che costituiscono una transazione deve soddisfare alcune proprieta', note come proprieta' ACID: yAtomicita' yConsistenza yIsolamento yDurabilità

185 Transazioni zAtomicita' yproprieta' tutto­o­niente ytutte le operazioni di una transazione devono essere trattate come una singola unita': o vengono eseguite tutte, oppure non ne viene eseguita alcuna yl'atomicita' delle transazioni e' assicurata dal sottosistema di ripristino (recovery)

186 Transazioni zConsistenza yuna transazione deve agire sulla base di dati in modo corretto yse viene eseguita su una base di dati in assenza di altre transazioni, la transazione trasforma la base di dati da uno stato consistente (cioe' che riflette lo stato reale del mondo che la base di dati deve modellare) ad un altro stato ancora consistente yl'esecuzione di un insieme di transazioni corrette e concorrenti deve a sua volta mantenere consistente la base di dati il sottosistema di controllo della concorrenza (concurrency control) sincronizzale transazioni concorrenti in modo da assicurare esecuzioni concorrenti libere da interferenze

187 Transazioni zIsolamento yogni transazione deve sempre osservare una base di dati consistente, cioe', non puo' leggere risultati intermedi di altre transazioni yla proprieta' di isolamento e' assicurata dal sottosistema di controllo della concorrenza che isola gli effetti di una transazione fino alla sua terminazione zDurabilita' (persistenza) yi risultati di una transazione terminata con successo devono essere resi permanenti nella base di dati nonostante possibili malfunzionamenti del sistema yla persistenza e' assicurata dal sottosistema di ripristino

188 Controllo di transazioni zFacciamo riferimento al modello di transazioni piu' semplice (transazioni flat), che prevede un solo livello di controllo a cui appartengono tutte le transazioni eseguite (e' il modello usato nei DBMS commerciali) zTutte le istruzioni eseguite devono essere contenute tra le istruzioni BeginWork e CommitWork yl'istruzione BeginWork dichiara l'inizio di una transazione flat yl'istruzione CommitWork e' invocata per indicare che il sistema ha raggiunto un nuovo stato consistente zLa transazione puo: yterminare la propria esecuzione con successo (commit) e rendere definitivi i cambiamenti prodotti sulla base di dati dalle istruzioni eseguite tra BeginWork e CommitWork yoppure sara' disfatta (cioe' i suoi effetti saranno annullati) e tutti gli aggiornamenti eseguiti andranno persi (abort) xIn questo caso, si dice che viene eseguito il rollback della transazione

189 Tipi di transazioni zEsistono vari modelli per rappresentare e gestire transazioni zil modello più semplice è quello delle flat transaction zper definire una flat transaction è necessario specificare: yl'inizio di una transazione flat yla fine della transazione e il risultato transazionale zLa transazione puo: yterminare la propria esecuzione con successo (commit) e rendere definitivi i cambiamenti prodotti sulla base di dati dalle istruzioni eseguite tra BeginWork e CommitWork yoppure sara' disfatta (cioe' i suoi effetti saranno annullati) e tutti gli aggiornamenti eseguiti andranno persi (abort) yIn questo caso, si dice che viene eseguito il rollback della transazione

190 Transazioni in SQL Server zSQL Server supporta flat transaction e transazioni con savepoints (non le vediamo) zDiversi modi per iniziare una transazione: ytransazioni esplicite ytransazioni autocommit ytransazioni implicite zdue possibili risultati transazionali: ycommit: tutte le modifiche effettuate dalla transazione vengono rese permanenti yrollback: nessuna modifica viene eseguita a causa di errori zil rollback viene effettuato automaticamente nel caso di gravi errori, non gestiti a livello di applicazione (es. Si rompe il disco)

191 Transazioni esplicite zVengono utilizzati comandi T-SQL per specificare linizio e la fine della transazione zInizio: yBEGIN TRANSACTION zFine: yCOMMIT TRANSACTION yROLLBACK TRANSACTION

192 Esempio BEGIN TRANSACTION UPDATE Impiegati SET Stipendio = Stipendio * 1.2; UPDATE Dipartimenti SET Dirigente = 3 IF = 0) BEGIN PRINT 'Transazione eseguita' COMMIT TRANSACTION END ELSE BEGIN PRINT 'Errore' ROLLBACK TRANSACTION END

193 Transazioni autocommit zDefault zviene effettuato il commit di ogni statement T-SQL che non genera errori zse viene generato almeno un errore, lo statement viene abortito zin presenza di batch, lautocommit rimane a livello di singolo statement zlautocommit viene annullato quando si comincia in modo esplicito una transazione zviene ripristinato quando la transazione esplicita termina

194 Transazioni implicite zSimili alle esplicite, ma non si deve specificare linizio delle transazioni zal termine di ogni transazione (COMMIT o ROLLBACK) viene automaticamente iniziata una nuova transazione zPer attivare le transazioni implicite: ySET IMPLICIT_TRANSACTION ON zPer disattivarle: ySET IMPLICIT_TRANSACTION OFF

195 Sicurezza (cenni)

196 Sicurezza zUtenti (Windows, SQL Server) zgruppi (Windows): insieme di gruppi e/o utenti zruoli (SQL Server): gruppi di utenti, organizzati per scopi

197 Livelli di sicurezza zDue fasi: yautenticazione xstabilisce se un utente si può connettere ad una istanza di SQL Server yvalidazione permessi: xdopo la validazione, vengono analizzati I permessi per stabilire cosa lutentepuò fare sullistanza

198 Modi di autenticazione zDue possibilità (in NT e 2000): yAutenticazione Windows xautenticazione basata su login e password Windows yautenticazione mista xuso di account Windows e account creati direttamente in SQL Server zIn Windows 9x e ME: ysolo autenticazione mista (ma in realtà si considerano solo gli account SQL Server)

199 Modi di autenticazione

200 Validazione permessi zUn utente autenticato ha bisogno di un account per ogni database che deve accedere zogni account specifica quali oggetti possono essere acceduti dallutente e in che modo zper ogni statement T-SQL eseguito da un utente, si verifica che lutente abbia I permessi per poterlo eseguire, altrimenti viene rilevato un errore

201 Quindi... zPer ogni SQL Server, un insieme di account di autenticazione: ylogin (utenti/gruppi Windows, login SQL Server) yruoli (SQL Server) zper ogni database: yun insieme di utenti e ruoli ai quali è garantito laccesso al database yper ogni accesso, si devono specificare I permessi particolari per ogni oggetto

202 Database owner zdbo è un utente che implicitamente ha il permesso di eseguire ogni possibile operazione su un database zogni membro del ruolo sysadmin che utilizza un database viene mappato nellutente speciale dbo zogni oggetto creato da un membro del ruolo sysadmin ha come owner dbo

203 Database owner zQuando un utente crea un oggetto ne diventa proprietario zha permessi totali sulloggetto e può delegare I permessi ad altri utenti yanche tramite Enterprise Manager


Scaricare ppt "Introduzione a SQL Server. Giorno I zIntroduzione allarchitettura di un DBMS zArchitettura di SQL Server zComponenti di base di un database in SQL Server."

Presentazioni simili


Annunci Google