Introduzione a SQL Server. Giorno I zIntroduzione allarchitettura di un DBMS zArchitettura di SQL...

201
Introduzione a SQL Server

Transcript of Introduzione a SQL Server. Giorno I zIntroduzione allarchitettura di un DBMS zArchitettura di SQL...

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

Introduzione a SQL Server

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

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

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

Giorno II

Componenti avanzate Stored procedures triggers

Full-text search (cenni architetturali) esercitazione

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

Introduzione all’architettura di un DBMS

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

Che cos’è un DBMS?

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

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

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

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

Esempio

Imp#Nomedip#mansionedata_astipendio

Dip# Nome_dipUfficiodivisioneattività dirigente n

n

11

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

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

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

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 transazioni

sicuro accesso dipendente dal contenuto

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

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

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

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

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

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

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

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

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

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

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

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

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

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à

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

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

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

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

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

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

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

Architetture per l’utilizzo di un DBMS

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

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

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

Architetture client-server

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

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)

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

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

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

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

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

Architettura di SQL Server

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

Architettura

SQL Server è un DBMS relazionale, progettato per funzionare efficientemente in due ambienti:

client/server desktop

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

Client/server architecture

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

Desktop architecture

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

Architettura

La versione Desktop supporta qualche funzionalità in meno in termini di ottimizzazione

noi utilizzeremo la versione Desktop

I tool supportati sono gli stessi

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

Architettura

SQL Server Engine

SQL ServerEnterpriseManager

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

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)

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

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

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

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

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

Componenti di base di un database in SQL Server

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

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

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

Architettura

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

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

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

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)

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

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

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

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 ...

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

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

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

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

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

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

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

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

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

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

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

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 ...

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

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

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

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

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

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));

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

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

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

Identificatore locale

CREATE TABLE prova(campo1 int IDENTITY(1,2));

valore iniziale: 1incremento: 2

quando si inserisce una tupla non si devono specificare valori per campo1 vengono gestiti direttamente dal sistema

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

Identificatore globale

CREATE TABLE prova(campo1 uniqueidentifier);

oppure

CREATE TABLE prova(campo1 int ROWGUIDCOL);

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

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

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

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

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

Vincoli strutturali

Per I vincoli di FOREIGN KEY è possibile specificare il comportamento da adottare in caso di cancellazione e/o aggiornamento

ON DELETE CASCADEON DELETE NO ACTION

ON UPDATE CASCADEON UPDATE NO ACTION

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

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));

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

Vincoli semantici

Possono essere specificati tramite I trigger

li vedremo più avanti

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

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

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

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)

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

Modifica e cancellazione

Tutte le proprietà delle tabelle possono essere modificate e cancellate

da Enterprise Manager con T-SQL

non lo vediamo

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

Manipolazione di un database in SQL Server

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

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

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

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

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

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

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

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

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

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';

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

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');

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

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;

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

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

.

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

Esempio LIKE

Determinare tutti gli impiegati che hanno 'R' come terza lettera del cognome

SELECT Nome FROM Impiegati WHERE Nome LIKE '_ _ R%';

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

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

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

Esempio

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

SELECT Mansione, Stipendio, Nome FROM Impiegati ORDER BY Mansione, Stipendio DESC;

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

DISTINCT

Una query può anche restituire duplicati per eliminarli: clausola DISTINCT

SELECT Mansione FROM Impiegati; SELECT DISTINCT Mansione FROM Impiegati;

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

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

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

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#

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

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

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

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;

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

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

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

Funzioni per date

Le date possono essere sommate e sottratte

DATEADD(day, 21, GETDATE())

DATEDIFF(day,date, GETDATE())

GETDATE() restituisce la data corrente

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

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

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

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(*)

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

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#;

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

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;

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

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)

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

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;

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

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

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

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 ? ?

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

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

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

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

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

Viste

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

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

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

Gestione viste da SQL

CREATE VIEW <nome vista>

AS

<query SQL che definisce la vista>

EsempioCREATE VIEW High_salaryASSELECT Name, salaryFROM EmployeeWHERE salary >2000;

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

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;

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

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;

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

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

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

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';

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

Inserimento in SQL

si selezionano tuple dal database e si inseriscono in una nuova tabella

SELECT Nome, Sipendio, Premio_P INTO PromozioniFROM Impiegati WHERE Premio_P > 0.25*Stipendio AND Mansione = 'ingegnere';

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

Cancellazione in SQL

Si specifica la condizione che devono soddisfare le tuple da cancellare

DELETE FROM Dipartimenti WHERE Dip# = 40;

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

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';

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

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

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

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à)

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

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)

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

Componenti avanzate di un database in SQL Server

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

Statement multipli

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

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

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

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

EsempioCREATE 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

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

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

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

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

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

Store procedures

Esistono stored procedure predefinite, associate al database Master

I nomi di tali procedure iniziano con sp_ nel seguito ne vedremo alcune

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

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

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

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 da @

DECLARE @ImpID int

SET @ImpID = 1234

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

Esempio

DECLARE @ImpID INTSET @ImpID = 1234GOCREATE PROCEDURE ImpSelectASSELECT * FROM ImpiegatiWhere #Imp = @ImpID;GO

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

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)

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

Parametri di input

CREATE PROCEDURE ImpSelect @ImpID INTASSELECT * FROM ImpiegatiWhere Imp# = @ImpID;GOEXEC ImpSelect @ImpID = 1234GO

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

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 = 1234ASSELECT * FROM ImpiegatiWhere Imp# = @ImpID;GOEXEC ImpSelect GO

EXEC ImpSelect

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

Parametri di Output Per restituire valori all’ambiente chiamante, è possibile

utilizzare parametri di output

CREATE PROCEDURE AvgSal@Dip int, @Avg int OUTPUTAS SELECT @Avg = avg(stipendio)FROM ImpiegatiWHERE Dip# = @Dip;GODECLARE @AVGex intEXEC AvgSal @Dip = 1, @Avg = @AVGex OUTPUTPRINT @AVGexGO

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

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

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

Esempio

CREATE PROCEDURE AvgSal@Dip int, @Avg int OUTPUTAS DECLARE @ErrorSave INTSET @ErrorSave = 0SELECT avg(stipendio)FROM ImpiegatiWHERE Dip# = @Dip;IF (@@ERROR <>0)

SET @ErrorSave = @@ERRORRETURN @ErrorSaveGO

DECLARE @AVGex intDECLARE @ReturnStatus INTEXEC @ReturnStatus = AvgSal

@Dip = 1, @Avg = @AVGex OUTPUTPRINT 'Return Status= ' + CAST(@ReturnStatus AS CHAR(10))PRINT @AVGexGO

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

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

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

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

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

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

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

Cursori Dichiarazione

DECLARE <nome cursore> CURSOR FOR<select statement>

Apertura OPEN <nome cursore>

Recupero tupla successivaFETCH NEXT FROM <nome cursore> INTO <lista variabili>

ChiusuraCLOSE <nome cursore>

DeallocazioneDEALLOCATE <nome cursore>

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

Cursori

@@FETCH_STATUSVariabile 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)

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

Esempio

DECLARE ImpCursor CURSOR FOR SELECT Nome FROM Impiegati

OPEN ImpCursorDECLARE @NomeImp VARCHAR(10)FETCH NEXT FROM ImpCursor INTO @NomeImpWHILE (@@FETCH_STATUS = 0)

BEGINPRINT @NomeImpFETCH NEXT FROM ImpCursor INTO @NomeImp

ENDCLOSE ImpCursorDEALLOCATE ImpCursor

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

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

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

Esempio

DECLARE @SQLString NVARCHAR(100)SET @SQLSTRING = N'SELECT * FROM Impiegati'EXEC sp_executesql @SQLString

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

ProblemaDECLARE @SQLString NVARCHAR(100)DECLARE @MyImp =12SET @SQLSTRING = N'SELECT * FROM Impiegati’ +

‘WHERE Imp# = @MyImp’EXEC sp_executesql @SQLString

DECLARE @MyImp =14SET @SQLSTRING = N'SELECT * FROM Impiegati’ +

‘WHERE Imp# = @MyImp’EXEC sp_executesql @SQLString

La stessa stringa viene compilata due volte

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

Soluzione: uso di parametri

SET @SQLSTRING = N'SELECT * FROM Impiegati’ +‘WHERE Imp# = @MyImp’

SET @ParamDef = N’@MyImp INT’

EXEC sp_executesql @SQLString, @ParamDef, @MyImp = 12EXEC sp_executesql @SQLString, @ParamDef, @MyImp = 24

in questo caso alla seconda esecuzione il sistema si accorge di avere già compilato lo statement e riutilizza il piano generato

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

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

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

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

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

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

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

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>

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

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

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

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'

GO

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

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

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

Esempio Se lo stipendio di Rossi è stato modificato e supera

2000 allora Rossi passa al dipartimento 4

CREATE TRIGGER updateRossi ON ImpiegatiAFTER UPDATE, INSERTASDECLARE @StipRossi INTSELECT @StipRossi = Stipendio FROM INSERTED WHERE Nome = ‘Rossi’IF @StipRossi > 2000

BEGINUPDATE ImpiegatiSET Dip# = 4WHERE Nome = ‘Rossi’

END

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

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

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

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

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

Full-text search

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

Problema

Le tabelle possono contenere campi contenenti informazioni testuali Char Varchar Text Image

Nasce il problema di come effettuare ricerche su tali campi

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

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

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

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

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

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

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

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)

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

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

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

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))

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

Esempio di base

SELECT Description FROM Categories WHERE Description LIKE '%bean curd%'

SELECT Description FROM Categories WHERE CONTAINS(Description, ' "bean curd" ')

FRASE

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

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

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

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

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

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

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

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 ' )

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

Prefissi

SELECT Description, CategoryName FROM Categories WHERE CONTAINS (Description, ' "ice*" ' )

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

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

Inflection form

SELECT Description, CategoryName FROM Categories WHERE CONTAINS (Description,

'FORMSOF(INFLECTIONAL, "dry")')

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

Ricerche pesate

Ogni parola o frase puo’ essere pesata Peso minimo 0 Peso massimo 1

SELECT CompanyName, ContactName, AddressFROM Customers WHERE CONTAINS(Address, 'ISABOUT ("*des*", Rue WEIGHT(0.5),

Bouchers WEIGHT(0.9) ) ' )

NON PESATO

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

Proximity terms

Permette 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 titlesWHERE CONTAINS(Description, ' "wheat*" ~ "bread mix" ')

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

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." ')

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

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”

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

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

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

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]

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

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]

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

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 KWHERE C.CustomerID = K.[KEY]

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

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

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

Alcuni cenni architetturali

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

Cosa vedremo

Indici (cenni) transazioni (cenni) sicurezza (cenni)

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

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

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

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

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

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)

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

Indici

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

Indici

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

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

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

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

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

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

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

Perché ottimizzare?

Consideriamo un database con 2.000 studenti e 20.000 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 40.000.000 tuple, da queste si estraggono poi le 50 tuple desiderate (costo proporzionale a 120.000.000 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 120.050

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

Indici in SQL Server

Clusterizzati/non clusterizzati valori unici/valori non unici colonna singola/colonna multipla coprenti/non coprenti

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

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

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

Clusterizzazione

Gli indici non clusterizzati sono utili per ricerche su singolo valore

una tabella può essere associata a più indici non clusterizzati

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

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

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

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

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

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

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

Operazioni sugli indici

Gli indici possono essere: creati ricalcolati cancellati modificati (per quanto riguarda le proprietà)

con Enterprise Manager possiamo solo: crearli modificarli cancellarlima NON possiamo ricalcolarli (non lo vediamo)

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

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à

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

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)

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

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

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

Transazioni

Isolamento 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

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

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

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

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

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

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)

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

Transazioni esplicite

Vengono utilizzati comandi T-SQL per specificare l’inizio e la fine della transazione

Inizio: BEGIN TRANSACTION

Fine: COMMIT TRANSACTION ROLLBACK TRANSACTION

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

EsempioBEGIN TRANSACTIONUPDATE ImpiegatiSET Stipendio = Stipendio * 1.2;UPDATE DipartimentiSET Dirigente = 3IF (@@ERROR = 0)

BEGINPRINT 'Transazione eseguita'COMMIT TRANSACTION

ENDELSE

BEGINPRINT 'Errore'ROLLBACK TRANSACTION

END

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

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

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

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

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

Sicurezza (cenni)

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

Sicurezza

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

per scopi

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

Livelli di sicurezza

Due fasi: autenticazione

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

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

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)

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

Modi di autenticazione

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

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

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

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

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

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

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

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