La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Introduzione a SQL Server

Presentazioni simili


Presentazione sul tema: "Introduzione a SQL Server"— Transcript della presentazione:

1 Introduzione a SQL Server

2 Giorno I Introduzione all’architettura di un DBMS
Architettura di SQL Server Componenti di base di un database in SQL Server DDL da Enterprise Manager Cenni DDL da Query Analyzer Manipolazione di un database in SQL Server interrogazioni modifiche esercitazione

3 Giorno II Componenti avanzate Full-text search (cenni architetturali)
Stored procedures triggers Full-text search (cenni architetturali) esercitazione

4 Introduzione all’architettura di un DBMS

5 Che cos’è un DBMS? Un DBMS è un sistema software che permette di gestire grosse quantità di dati in modo: efficiente sicuro concorrente affidabile

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

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

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

9 Funzionalità di un DBMS
Il modello dei dati permette di rappresentare dati a livello logico, che è il livello corretto per gli utenti del DB Affinché però un sistema software possa essere definito DBMS, è necessario che I dati possano essere utilizzati in modo: efficiente strutture di memorizzazione, strutture di accesso, ottimizzazione di interrogazioni concorrente transazioni affidabile sicuro accesso dipendente dal contenuto

10 Efficienza In un DBMS l’efficienza è garantita dalle strutture dati utilizzate per rappresentare lo schema logico e dall’efficienza del sistema nell’operare su tali strutture Esistono varie strutture alternative per implementare un modello dei dati La scelta dalla strutture più efficienti dipende dal tipo di accessi che si eseguono sui dati Normalmente 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
I dati memorizzati in una base di dati devono essere fisicamente memorizzati su un supporto fisico di memorizzazione Basi di dati in genere memorizzate su memoria secondaria (dischi magnetici) troppo grosse per risiedere in memoria principale maggiori garanzie di persistenza dei dati costo per unita' di memorizzazione decisamente inferiore I dati sono trasferiti tra il disco e la memoria principale in unita' chiamate blocchi un blocco e' una sequenza di byte contigui la dimensione del blocco dipende dal sistema operativo

12 Organizzazione di file
I dati sono generalmente memorizzati in forma di record un record è costituito da un insieme di valori (campi) collegati un file e' una sequenza di record Poiche' 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 Se si riesce a memorizzare sullo stesso blocco record che sono spesso richiesti insieme si risparmiano accessi a disco

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

14 Strutture ausiliarie di accesso
Spesso le interrogazioni accedono solo un piccolo sottoinsieme dei dati Per 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) indici Esempio: 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
Quindi quando una query e' presentata al sistema occorre determinare il modo piu' efficiente per eseguirla usando le strutture disponibili Per interrogazioni complesse esistono piu' strategie possibili La scelta della strategia e' fatta principalmente in base al numero di accessi a disco Anche 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 Per mantenere le informazioni consistenti e' necessario controllare opportunamente le sequenze di accessi e aggiornamenti ai dati Tali sequenze sono dette transazioni Ogni 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 Necessita' di garantire che le transazioni eseguite concorrentemente si comportino come se fossero state eseguite in sequenza correttezza concorrenza Necessita' di tecniche per ripristinare uno stato corretto della base di dati a fronte di malfunzionamenti di sistema affidabilità

17 Sicurezza Il controllo dell’accesso regola le operazioni che si possono compiere sulle informazioni e le risorse in una base di dati Scopo: limitare e controllare le operazioni che gli utenti effettuano, prevenendo accidentali o deliberate azioni che potrebbero compromettere la correttezza e la sicurezza dei dati Nel controllo dell’accesso: oggetti: risorse a cui si vuole garantire protezione soggetti: agenti che richiedono di potere esercitare privilegi sui dati

18 Sicurezza I modelli di controllo dell’accesso per basi di dati differiscono da quelli definiti per sistemi operativi: una BD è caratterizzata da un numero maggiore di oggetti rispetto ad un SO deve potere avvenire a diversi livelli di granularità: relazione, tupla, attributo risorse reali e logiche (es. Viste) deve tenere conto anche della semantica dei dati diversi DBMS supportano diverse politiche di controllo dell’accesso SQL permette di specificare alcune di queste politiche

19 Architettura Dalla discussione precedente, segue che un DBMS contiene diverse strutture dati che includono: i file con i dati (cioe' i file per memorizzare il DB stesso) file dei dati di sistema (che includono il dizionario dei dati e le autorizzazioni) indici (esempio B­tree o tabelle hash) dati 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 l’utilizzo di un DBMS

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

22 Architetture client-server

23 Architetture client-server
Nel contesto delle basi di dati sono ormai diffuse portano ad una chiara separazione tra le funzionalità di client e server separazione tra progettazione e gestione caratteristiche macchine client/server: client: adatti ad interazione con l’utente (per ad esempio, interrogazione dati) server: adatti alla gestione dati (memorizzazione e gestione, elevata efficienza)

24 Architetture client-server
SQL offre un paradigma di programmazione ideale per l’identificazione dell’interfaccia di servizi: l’interrogazione sono formulate dal client e inviate al server I risultati delle interrogazioni sono calcolati dal server e inviati al client grazie alla standardizzazione di SQL, è possibile progettare applicazioni che interagiscono con diversi server

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

26 Architettura di SQL Server

27 Architettura SQL Server è un DBMS relazionale, progettato per funzionare efficientemente in due ambienti: client/server desktop

28 Client/server architecture

29 Desktop architecture

30 Architettura La versione Desktop supporta qualche funzionalità in meno in termini di ottimizzazione noi utilizzeremo la versione Desktop I tool supportati sono gli stessi

31 Architettura SQL Server Enterprise Manager SQL Server Engine

32 SQL Server Engine É un motore basato su SQL
compatibile con SQL-92, entry-level il dialetto SQL implementato da SQL Server è chiamato Transact-SQL (T-SQL) T-SQL estende SQL, fornendo versioni semplificate di alcune operazioni supporta 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
Interfaccia di amministrazione permette di amministrare server multipli dalla stessa console permette di gestire ciascun server gestione database: creazione, modifica, cancellazione, mantenimento gestione oggetti contenuti in un database: tabelle, viste, vincoli, ecc. gestione server replicazione sicurezza

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

35 Componenti di base di un database in SQL Server

36 Architettura In SQL Server 2000, I dati sono organizzati in database
esistono due tipi di organizzazione: logica: schema relazionale fisica: strumenti di memorizzazione l’utente interagisce solo con l’organizzazione logica l’amministratore può intervenire anche sull’organizzazione fisica

37 Architettura

38 Database Ogni istanza di SQL Server contiene 4 database di sistema e uno o più database creati dall’utente Master: contiene I dati di sistema (cataloghi) tempdb: contiene dati temporanei msdb: utilizzato da SQL Server Agent, per schedulare attività come backup e replicazioni model: modello dal quale vengono creati tutti I database

39 Database Ogni utente del sistema è associato ad un database di default
quindi quando l’utente si connette, può direttamente lavorare su tale database tale database può comunque essere cambiato é comunque possibile cambiare database (se si hanno I diritti)

40 Database ogni database contiene tabelle e altri oggetti
ogni database viene mappato in un insieme di filegroups uno primario, che contiene informazioni su startup e tabelle uno secondario, utilizzato per motivi di efficienza transaction log, utilizzato per gestire le transazioni l’amministratore può intervenire nell’organizzazione di tali file possono anche essere read-only utilizzati ad esempio per memorizzare dati storici, non più operativi

41 Gestione database da Enterprise Manager
Enterprise Manager permette di eseguire tramite interfaccia molte operazioni sui database: Creazione modifica proprietà cancellazione creazione oggetti associati condivisione con altri server definizione piani di mantenimento (integrità, backup, statistiche,…) import/export dati generazione script backup ...

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

43 Gestione Database tramite SQL
CREATE DATABASE <nome database>; DROP DATABASE <nome database>; USE <nome database>; Esempio CREATE DATABASE prova; DROP DATABASE prova; ; non è obbligatorio, se manca viene aggiunto automaticamente I messaggi indicano la creazione del filegroup primario e del transaction log

44 Elementi di un DB Componenti:
Tabelle Viste Stored Procedures Trigger ... Ogni componente può essere creata direttamente da SQL Server Enterprise Manager Nel seguito: analizzeremo le componenti principali vedremo come crearle da SQL Enterprise Manager e da SQL Query Analyzer tramite DDL

45 Tabelle Ogni database è composto da insieme di tabelle, come in Access
vengono supportate due tipi di tabelle: persistenti temporanee le tabelle temporanee vengono memorizzate nel db tempdb e cancellate quando l’utente si disconnette dal sistema due tipi di tabelle temporanee: locali: iniziano con # e sono visibili solo alla connessione che le ha create globali: iniziano con ## e sono visibili a tutte le connessioni

46 Principali tipi di dato supportati
Binary data types: permettono di memorizzare dati in formato esadecimale binary: dati a lunghezza fissa (fino a 8Kb) varbinary: dati a lunghezza variabile (fino a 8Kb) image: lunghezza arbitraria, fino ad un max di 2Gb utile per memorizzare ad esempio documenti word, immagini, ecc. character data types: permettono di memorizzare informazioni testuali, rappresentate con un set di caratteri stabilito dal sistema (quello della tastiera) char: dati a lunghezza fissa (fino a 8Kb) varchar: dati a lunghezza variabile (fino a 8Kb) text: dati a lunghezza variabile, fino ad un max di 2Gb ad esempio documenti HTML o XML

47 Principali tipi di dato supportati
Unicode Data types:permettono di memorizzare caratteri provenienti da set diversi (es. Alfabero giapponese, russo) nchar: lunghezza fissa, fino a 4000 caratteri nvarchar: lunghezza variabile, fino a 4000 caratteri ntext: lunghezza variabile, maggiore di 4000 caratteri, fino ad un max di 2Gb preceduti da N Date and time data datetime, smalldatetime ...

48 Principali tipi di dato supportati
numeric data int, smallint, numeric, float, real, money,smallmoney special data timestamp: numero crescente, in formato binario, che rappresenta l’istante in cui la riga è stata modificata per l’ultima volta bit uniqueidentifier sql_variant: colonna che memorizza valori di vario tipo, ad eccezione di text, ntext, timestamp, image, sql_variant

49 Gestione tabelle da Enterprise Manager
Le tabelle possono essere create e manipolate direttamente da Enterprise Manager interfaccia simile a quella di Access ma estesa a supporto di aspetti presenti in SQL Server e non in Access permessi constraint indici trigger

50 Gestione tabelle da SQL
CREATE TABLE <nome tabella> ( <nome campo_1> <tipo_1>, <nome campo_n> <tipo_n> ) 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));

51 User defined data types
SQL Server 2000 permette all’utente di definire nuovi tipi di dato questi tipi di dato non sono altro che sinonimi di tipi di dato direttamente supportati dal sistema nessuna possibilità di definire tipi composti nessun concetto object-oriented per definire un tipo di dato è necessario specificare: nome nome tipo a cui si riferisce possibilità di utilizzare valori nulli questi tipi di dato possono essere generati sia dall’Enterprise 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
È possibile generare in modo automatico valori univoci da assegnare ad un campo l’unicità può essere locale, all’interno di una singola tabella globale, all’interno del database

54 Identificatore locale
CREATE TABLE prova (campo1 int IDENTITY(1,2)); valore iniziale: 1 incremento: 2 quando si inserisce una tupla non si devono specificare valori per campo1 vengono gestiti direttamente dal sistema

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

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

57 Vincoli strutturali PRIMARY KEY: vincolo di chiave primaria
FOREIGN KEY: vincolo di chiave esterna UNIQUE constraint: valori unici all’interno di una tabella DEFAULT: permette di specificare un valore di default per un attributo NULL, NOT NULL: permette di specificare se I valori di un attributo possono o meno essere nulli CHECK: permette di specificare il range di valori ammissibili per un certo attributo

58 Vincoli strutturali Per I vincoli di FOREIGN KEY è possibile specificare il comportamento da adottare in caso di cancellazione e/o aggiornamento ON DELETE CASCADE ON DELETE NO ACTION ON 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 Studente (Sno Char(6), Sname Varchar(20), Residenza Varchar(15), Birthdate Date, PRIMARY KEY (Sno)); 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);

60 Vincoli semantici Possono essere specificati tramite I trigger
li vedremo più avanti

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

62 Esempio Nel 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
Tutte le proprietà delle tabelle possono essere modificate e cancellate da Enterprise Manager con T-SQL non lo vediamo

64 Manipolazione di un database in SQL Server

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

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

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

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

69 Esempio Q2: 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 Q3: 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 condizioni 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 Esempio SELECT Nome, Stipendio FROM Impiegati WHERE Stipendio BETWEEN 1100 AND 1400;

72 Operatori: LIKE confronto tra stringhe di caratteri: l'operatore LIKE permette di eseguire alcune semplici operazioni di pattern matching su colonne di tipo stringa un 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 _ il carattere % denota una sequenza di caratteri arbitrari di lunghezza qualsiasi (anche zero) il carattere _ denota esattamente un carattere .

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

74 Ordinamento Negli esempi visti, l'ordine delle tuple risultato di una interrogazione e' determinato dal sistema (dipende dalla strategia usata per eseguire l'interrogazione) e' 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 ORDER BY Mansione, Stipendio DESC;

76 DISTINCT Una query può anche restituire duplicati
per eliminarli: clausola DISTINCT SELECT Mansione FROM Impiegati; SELECT DISTINCT Mansione FROM Impiegati;

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

78 Esempio Esempio: 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
i predicati usati nelle interrogazioni possono coinvolgere, oltre a nomi di colonna, anche espressioni aritmetiche tali espressioni sono formulate applicando gli operatori aritmetici (+, , *, /) ai valori delle colonne delle tuple le espressioni artimetiche possono comparire nella clausola di proiezione e nelle espressioni di assegnamenti del comando di UPDATE

80 Esempio trovare 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 Concatenazione:
SELECT Cognome + ' ' + Nome + ' ' + Indirizzo FROM Persone; Funzioni: len(str): calcola la lunghezza di un stringa WHERE len(Cognome) > 3 substring(str, m, n) (m ed n sono interi) estrae dalla stringa 'str' la sottostringa dal carattere di posizione m per una lunghezza n

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

83 Funzioni di gruppo Una funzione di gruppo permette di estrarre informazioni da gruppi di tuple di una relazione Le funzioni di gruppo si basano su due concetti fondamentali: partizionamento delle tuple di una relazione in base al valore di una o piu' colonne della relazione le colonne da usare sono specificate tramite la clausola GROUP BY calcolo della funzione di gruppo per ogni gruppo ottenuto dal partizionamento una 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 le funzioni di gruppo comunemente presenti sono: MAX, MIN, SUM, AVG, COUNT tutte 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 la funzione COUNT puo' avere due tipi di argomenti un nome di colonna in tal caso nello standard SQL2 e' obbligatorio l'uso del qualificatore DISTINCT esempio: COUNT (DISTINCT Stipendio) il carattere speciale '*' la funzione restituisce il numero di tuple presenti in un dato gruppo esempio: COUNT(*)

85 Esempio si 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 supponiamo 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 importante restrizione: una clausola di proiezione di una query contenente la clausola GROUP BY puo' solo includere: una o piu' colonne tra le colonne che compaiono nella clausola GROUP BY le funzioni di gruppo possono apparire in espressioni aritmetiche esempio: SUM(Stipendio) + SUM(Premio_p)

88 Having e' possibile specificare condizioni di ricerca su gruppi di tuple Esempio: 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
si applica la condizione di ricerca specificata nella clausola WHERE a tutte le tuple della relazione oggetto della query la valutazione avviene tupla per tupla alle tuple ottenute al passo precedente, si applica il partizionamento specificato dalla clausola GROUP BY ad ogni gruppo di tuple ottenuto al passo precedente, si applica la condizione di ricerca specificata dalla clausola HAVING i gruppi ottenuti al passo precedente sono i gruppi di tuple che verificano la query per tali gruppi, vengono calcolate le funzioni di gruppo specificate nella clausola di proiezione della query i valori restituiti da tali funzioni costituiscono il risultato della query

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

91 IS NULL il predicato IS NULL applicato ad un dato attributo di una tupla restituisce True se la tupla ha valore nullo per l'attributo il 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 Una vista è una tabella virtuale
il contenuto della tabella non è infatti memorizzato su disco ma definito tramite una query, al cui risultato viene assegnato un nome tale nome identifica la vista una vista può essere utilizzata in ogni contesto in cui può essere utilizzata una tabella In genere vengono utilizzate per semplificate la percezione che l’utente ha del database possono essere utilizzate come base per definire politiche di sicurezza

93 Viste

94 Gestione viste da Enterprise Manager
L’interfaccia fornita è del tutto simile a quella di Access per definire le query La 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 AS CREATE VIEW <nome vista>
<query SQL che definisce la vista> Esempio CREATE VIEW High_salary SELECT Name, salary FROM Employee WHERE salary >2000;

96 Esempio si 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 Le viste possono essere utilizzate nelle query
ogni volta che ci si riferisce ad una vista, il nome della vista viene rimpiazzato dalla sua definizione (query) quindi la query di partenza viene composta con la query che definisce la vista, ottenendo una nuova query, che viene eseguita le viste possono anche essere definite in termini di altre viste, in questo caso si itera il procedimento precedente Esempio: selezionare le tuple della vista Imp10 SELECT * FROM Imp10;

98 Aggiornamenti in SQL Tre possibili aggiornamenti:
inserimento cancellazione modifica eseguibili da Enterprise Manager tramite interfaccia grafica, simile a quella di Access oppure da Query Analyzer con SQL

99 Inserimento in SQL Tre possibilità: si inserisce una nuova tupla
INSERT INTO Dipartimenti VALUES (40, 'Edilizia Industriale', 6100, 'D2',7698); si 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 si 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 Si specifica la condizione che devono soddisfare le tuple da cancellare DELETE FROM Dipartimenti WHERE Dip# = 40;

102 Modifica in SQL Si 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
Ogni volta che vengono modificate le tabelle di base di una view, cambia implicitamente anche il contenuto della view è comunque possibile aggiornare direttamente una view sotto alcune condizioni, tra cui: e' possibile eseguire l'operazione di DELETE se l'interrogazione di definizione della vista soddisfa le seguenti condizioni: e' su una sola relazione non contiene la clausola GROUP BY, la clausola DISTINCT, o una funzione di gruppo e' 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 e' 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
Utilizzare l’utente “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: database tabelle vincoli una vista per una specifica operazione inserire 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 modificare un corso (provare da Enterprise Manager e da SQL) cancellare un corso (provare da Enterprise Manager e da SQL)

106 Componenti avanzate di un database in SQL Server

107 Statement multipli Per eseguire operazioni che processano più statement SQL, SQL Server fornisce 4 possibilità: batches script stored procedure trigger

108 Batch Gruppi di statement T-SQL inviati ed eseguiti contemporanemante all’SQL Engine vengono compilati in un singolo piano di esecuzione se si verifica errore di compilazione il piano non viene generato se si verifica un errore in esecuzione gli statement seguenti non vengono eseguiti per speficare un batch da SQL Query Analyzer: GO

109 Esempio GO SELECT Nome, Dip# FROM Impiegati
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 Sequenza di statement T-SQL memorizzati in un file e quindi eseguiti, utilizzando una funzionalità particolare di SQL Server possono essere eseguiti dalla shell del DOS mediante il comando: osql osql -U <nome utente> -i <nome file input> -o <nome file risultato> viene chiesta la password

111 Stored Procedures Le stored procedure sono simili al concetto di procedura (o funzione) presente nei linguaggi di programmazione come vedremo le applicazioni possono poi utilizzare le stored procedure per interagire con il DBMS funzionamento di base: accettano parametri di input usano T-SQL per elaborare I dati contenuti nel DB settano parametri di output restituiscono valori di stato per indicare se l’esecuzione ha avuto successo Possono essere create sia da Enterprise Manager che da Query Analyzer, ma è sempre necessario specificare il codice T-SQL

112 Store procedures Esistono stored procedure predefinite, associate al database Master I nomi di tali procedure iniziano con sp_ nel seguito ne vedremo alcune

113 Creazione Come per le tabelle anche le stored procedure possono essere temporanee valgono le stesse convenzioni viste per le tabelle CREATE PROCEDURE <nome> <parametri> AS <codice> EXECUTE <nome> CREATE PROCEDURE deve essere l’unico comando all’interno di un batch

114 Dichiarazioni In T-SQL è possibile dichiarare variabili locali, valide all’interno del batch eseguito e assegnare valori per ogni tipo supportato da T-SQL I nomi di variabili devono essere preceduti int = 1234

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

116 Parametri I parametri sono utilizzati per scambiare valori tra la procedura e l’applicazioni o il tool che la richiama Tipi di parametri: input output valore di ritorno (se non specificato si assume 0)

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

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

119 Parametri di Output Per restituire valori all’ambiente chiamante, è possibile utilizzare parametri di output CREATE PROCEDURE AvgSal @Dip int OUTPUT AS = avg(stipendio) FROM Impiegati WHERE Dip# GO int EXEC = OUTPUT

120 Valori di ritorno L’istruzione RETURN permette di restituire un valore all’ambiente chiamanete Per default 0 indica che l’esecuzione è andata a buon fine 1 indica che l’esecuzione ha generato errori

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

122 Costrutti di controllo
Classici costrutti imperativi per alterare il flusso sequenziale di esecuzione degli statement specificati BEGIN END stesso ruolo {} in Java IF ELSE classico costrutto di scelta WAITFOR WAITFOR DELAY ‘00:00:02’ aspetta due secondi WAITFOR TIME ‘22:00’ riparte alle 22 WHILE come in Java

123 Costrutti di controllo
CASE SELECT 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 Gli statement SQL restituiscono un insieme di tuple
può capitare di dovere analizzare le tuple una per una in questo caso è necessario associare al risultato un cursore, cioè un puntatore che permette di muoversi all’interno di un insieme di tuple risultato un cursore deve: essere dichiarato aperto utilizzato per muoversi sulle tuple chiuso è possibile dichiarare una variabile di tipo cursore

125 Cursori Dichiarazione DECLARE <nome cursore> CURSOR FOR
<select statement> Apertura OPEN <nome cursore> Recupero tupla successiva FETCH NEXT FROM <nome cursore> INTO <lista variabili> Chiusura CLOSE <nome cursore> Deallocazione DEALLOCATE <nome cursore>

126 Cursori @@FETCH_STATUS
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 END CLOSE ImpCursor DEALLOCATE ImpCursor

128 Creazione statement a runtime
É possibile creare a run time stringhe che rappresentano statement SQL tali statement devono essere rappresentati come stringhe Unicode vengono eseguiti utilizzando la stored procedure di sistema sp_executesql ogni 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 DECLARE @SQLString NVARCHAR(100)
= N'SELECT * FROM Impiegati' EXEC

130 Problema DECLARE @SQLString NVARCHAR(100) DECLARE @MyImp =12
= N'SELECT * FROM Impiegati’ + ‘WHERE Imp# EXEC =14 La stessa stringa viene compilata due volte

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

132 Trigger I 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 Vengono spesso utilizzati per: forzare vincoli di integrità semantici, che coinvolgono più di una relazione per aggiornare viste per attivare azioni esterne

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

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

135 Trigger CREATE TRIGGER <nome trigger> ON <nome tabella>
INSTEAD OF INSERT| INSTEAD OF UPDATE| INSTEAD OF DELETE| AFTER INSERT| AFTER UPDATE| AFTER DELET| AS <corpo del trigger, simile a stored procedure, con qualche estensione>

136 Trigger Prima vengono eseguiti INSTEAD OF trigger (una sola volta, non possono essere attivati ricorsivamente) poi vengono eseguiti AFTER trigger trigger INSTEAD OF sono soggetti a limitazioni Non possono essere definiti su tabelle che hanno almeno una chiave esterna associata ad un vincolo per l’operazione di cancellazione e/o aggiornamento

137 Condizioni speciali Test 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'

138 Tabelle speciali Un’operazione di UPDATE può essere vista come un’operazione di DELETE seguita da un’operazione di INSERT SQL Server 2000 mantiene automaticamente, per ogni tabella, due ulteriori tabelle: INSERTED: contiene tutte le tuple inserite con INSERT o UPDATE DELETED: contiene tutte le tuple cancellate con DELETE o UPDATE Queste tabelle, temporanee, possono essere utilizzate nel corpo dei trigger

139 Esempio Se 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
Creare una stored procedure per eseguire le seguenti operazioni: prende in input un argomento e un costo determina tutti I corsi relativi a quell’argomento e con costo minore a quello dato stampa I corsi determinati in ordine crescente rispetto al costo provare ad eseguire la stored procedure attribuendo diversi valori ai parametri

141 Esercitazione proposta
Creare 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 Le tabelle possono contenere campi contenenti informazioni testuali Char Varchar Text Image Nasce il problema di come effettuare ricerche su tali campi

144 Esempio Supponiamo che la tabella DIPARTIMENTI contenga un campo ATTIVITA’, che contiene una descrizione testuale delle attivita’ portate avanti dal dipartimento Il campo ATTIVITA’ puo’ essere definito come VARCHAR(200) Supponiamo di volere determinare tutti I dipartimenti che si occupano di ricerca In questo caso, ragionevolmente il campo ATTIVITA’ dovra’ contenere parole come “ricerca”, “ricerche”, ma anche magari “attivita’ scientifiche”, in quanto identificano ricerche La 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 SQL Server permette di eseguire ricerche di questo tipo su campi testuali, mediante un procedimento in due passi: Indicizzazione: durante questa fase, si istruisce il sistema sul contenuto delle colonne testuali da interrogare Interrogazione: durante questa fase, si possono eseguire le interrogazioni sulle colonne testuali Permette inoltre di indicizzare e interrogare Documenti binari (file WORD, ecc.) File memorizzati su file system

146 Full-text index Per potere interrogare campi testuali e’ necessario istruire il sistema sul contenuto di tali campi Cioe’ il sistema deve processare il contenuto di tali campi ed identificare le parole significative, da utilizzare poi in fase di ricerca Esempio di informazione: La colonna 3 della tabella DIPARTIMENTI contiene nel campo ATTIVITA’ la parola “ricerca” a partire dalla posizione 25, come parola numero 5 Non tutte le parole sono significative Noise word (es. articoli) Le parole non significative non vengono considerate nella fase di indicizzazione

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

148 Query Full-text T-SQL supporta due predicati per interrogare campi testuali: CONTAINS FREETEXT Due funzioni: CONTAINSTABLE FREETEXTTABLE Questi predicati possono essereutilizzati nella clausola WHERE degli statement di interrogazione

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

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

151 Ricerche esprimibili Una o piu’ parole e/o frasi
Inflectional forms di una parola (drive, drives, drove, droven Parole con un certo prefisso: auto* Parole o frasi pesate, in relazione all’importanza Parole o frasi simili ad altre (proximity search) Ricerche combinate con OR, AND, NOT

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

153 Ricerche per specifiche parole e/o frasi
Si possono utilizzare anche piu’ campi nella ricerca SELECT title_id, title, price FROM titles WHERE CONTAINS( *, ' "French gourmet" ' ) La 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 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*" ' ) WHERE CONTAINS (Description, ' "light bread*" ' )

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

157 Ricerche pesate Ogni parola o frase puo’ essere pesata
Peso minimo 0 Peso 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 Permette di trovare sequenze di parole vicine nel testo SELECT title, notes FROM titles WHERE CONTAINS (notes, 'user NEAR computers') Equivalente a WHERE CONTAINS (notes, 'user ~ computers') WHERE CONTAINS(Description, ' "wheat*" ~ "bread mix" ')

159 Freetext Implementa una query “by example”
Forniamo una parola o una frase e il sistema trova tutti I testi simili Idea: Il sistema costruisce una query dalla parola o frase specificata Usa 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
I 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
CONTAINS e FREETEXT sono predicati, quindi per ogni tupla restituiscono vero o falso Utilizzati nella clausola WHERE CONTAINSTABLE e FREETEXTTABLE sono funzioni che restituiscono tabelle Utilizzati nella clausola FROM La tabella restituita ha due attributi: KEY: identificatore tupla (chiave) RANK: 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
Per 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 Permettono di ritrovare I k testi che maggiormente assomigliano alla query Si 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
Creare un full-text index su un campo testuale della tabella corsi Modificare la stored procedure definita in modo che prenda in input una stringa ed esegua un’operazione full-text provare vari operatori full text e analizzarne il risultato provare ad eseguire la procedura con vari input

166 Alcuni cenni architetturali

167 Cosa vedremo Indici (cenni) transazioni (cenni) sicurezza (cenni)

168 Strutture ausiliarie di accesso
Spesso le interrogazioni accedono solo un piccolo sottoinsieme dei dati Per 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) tali strutture sono chiamate indici

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

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

171 Indici

172 Indici

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

174 Indici Data un’interrogazione, il sistema determina tutti I possibili modi con cui la stessa può essere eseguita: senza usare indice usando indici, in vari modi (potrebbero essercene più di uno) ogni modalità = piano di esecuzione viene determinato il piano di esecuzione con il minor costo (in termini di numero di accesso a disco) si esegue il piano con il minor costo

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

176 Perché ottimizzare? Consideriamo 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) Se 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) Se 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 Clusterizzati/non clusterizzati
valori unici/valori non unici colonna singola/colonna multipla coprenti/non coprenti

178 Clusterizzazione SQL Server Supporta sia indici clusterizzati che non clusterizzati viene automaticamente creato un indice clusterizzato sulla chiave primaria della tabella gli indici possono essere creati da Enterprise Manager o con SQL poiché un indice clusterizzato stabilisce l’ordine con cui I dati vengono memorizzati su file, una tabella può essere associata ad un solo indice clusterizzato è possibile stabilire se I dati devono essere organizzati secondo l’ordinamento crescente o decrescente utile su colonne utilizzate per range queries o ricerca valore

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

180 Unicità Unique index: la colonna indicizzata non contiene duplicati
Non-Unique index: la colonna indicizzata può contenere duplicati necessari vincoli UNIQUE o PRIMARY KEY per garantire l’unicità dei dati

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

182 Fill factor Ogni volta che si inseriscono nuove tuple, l’indice deve essere aggiornato questo aggiornamento permette di inserire I nuovi valori in una pagina dell’indice se la pagina è piena, è necessario dividerla in due pagine (split) questa operazione è piuttosto costosa soluzione: lasciare parzialmente vuote le pagine in modo da ridurre il costo in fase di inserimento fill factor: stabilisce la percentuale delle pagine che deve essere occupata al momento della creazione dell’indice viene considerato solo al momento della creazione dell’indice

183 Operazioni sugli indici
Gli indici possono essere: creati ricalcolati cancellati modificati (per quanto riguarda le proprietà) con Enterprise Manager possiamo solo: crearli modificarli cancellarli ma NON possiamo ricalcolarli (non lo vediamo)

184 Transazioni Gli utenti interagiscono con la base di dati attraverso programmi applicativi ai quali viene dato il nome di transazioni Una transazione e' un insieme parzialmente ordinato di operazioni di lettura e scrittura L'insieme di operazioni che costituiscono una transazione deve soddisfare alcune proprieta', note come proprieta' ACID: Atomicita' Consistenza Isolamento Durabilità

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

186 Transazioni Consistenza
una transazione deve agire sulla base di dati in modo corretto se 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 l'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 Isolamento Durabilita' (persistenza)
ogni transazione deve sempre osservare una base di dati consistente, cioe', non puo' leggere risultati intermedi di altre transazioni la proprieta' di isolamento e' assicurata dal sottosistema di controllo della concorrenza che isola gli effetti di una transazione fino alla sua terminazione Durabilita' (persistenza) i risultati di una transazione terminata con successo devono essere resi permanenti nella base di dati nonostante possibili malfunzionamenti del sistema la persistenza e' assicurata dal sottosistema di ripristino

188 Controllo di transazioni
Facciamo 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) Tutte le istruzioni eseguite devono essere contenute tra le istruzioni BeginWork e CommitWork l'istruzione BeginWork dichiara l'inizio di una transazione flat l'istruzione CommitWork e' invocata per indicare che il sistema ha raggiunto un nuovo stato consistente La transazione puo’: terminare la propria esecuzione con successo (commit) e rendere definitivi i cambiamenti prodotti sulla base di dati dalle istruzioni eseguite tra BeginWork e CommitWork oppure sara' disfatta (cioe' i suoi effetti saranno annullati) e tutti gli aggiornamenti eseguiti andranno persi (abort) In questo caso, si dice che viene eseguito il rollback della transazione

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

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

191 Transazioni esplicite
Vengono utilizzati comandi T-SQL per specificare l’inizio e la fine della transazione Inizio: BEGIN TRANSACTION Fine: COMMIT TRANSACTION ROLLBACK 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 PRINT 'Errore' ROLLBACK TRANSACTION

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

194 Transazioni implicite
Simili alle esplicite, ma non si deve specificare l’inizio delle transazioni al termine di ogni transazione (COMMIT o ROLLBACK) viene automaticamente iniziata una nuova transazione Per attivare le transazioni implicite: SET IMPLICIT_TRANSACTION ON Per disattivarle: SET IMPLICIT_TRANSACTION OFF

195 Sicurezza (cenni)

196 Sicurezza Utenti (Windows, SQL Server)
gruppi (Windows): insieme di gruppi e/o utenti ruoli (SQL Server): gruppi di utenti, organizzati per scopi

197 Livelli di sicurezza Due fasi: autenticazione validazione permessi:
stabilisce se un utente si può connettere ad una istanza di SQL Server validazione permessi: dopo la validazione, vengono analizzati I permessi per stabilire cosa l’utentepuò fare sull’istanza

198 Modi di autenticazione
Due possibilità (in NT e 2000): Autenticazione Windows autenticazione basata su login e password Windows autenticazione mista uso di account Windows e account creati direttamente in SQL Server In Windows 9x e ME: solo autenticazione mista (ma in realtà si considerano solo gli account SQL Server)

199 Modi di autenticazione

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

201 Quindi ... Per ogni SQL Server, un insieme di account di autenticazione: login (utenti/gruppi Windows, login SQL Server) ruoli (SQL Server) per ogni database: un insieme di utenti e ruoli ai quali è garantito l’accesso al database per ogni accesso, si devono specificare I permessi particolari per ogni oggetto

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

203 Database owner Quando un utente crea un oggetto ne diventa proprietario ha permessi totali sull’oggetto e può delegare I permessi ad altri utenti anche tramite Enterprise Manager


Scaricare ppt "Introduzione a SQL Server"

Presentazioni simili


Annunci Google