Basi Di Dati 02

25
Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 1 BASI DI DATI ESERCITAZIONI -2- MSSQL - SQL Email: [email protected] Università di Trento Corso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione

Transcript of Basi Di Dati 02

Page 1: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 1

BASI DI DATI

ESERCITAZIONI -2-MSSQL - SQL

Email: [email protected]

Università di TrentoCorso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione

Page 2: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 2

NORTWIND NORTWIND TABLESTABLES

MSSQL 2000MSSQL 2000

Page 3: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 3

NORTWIND NORTWIND TABLESTABLES

MSSQL 2005MSSQL 2005

Page 4: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 4

MSSQL 2000MSSQL 2000NORTWIND NORTWIND

TABLETABLEOrders TableOrders TableDesign TableDesign Table

Per impostare un contatoreIdentity = Yes

Per impostare Primary KeyPulsante dx -> Set Primary Key

Page 5: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 5

Per impostare un contatoreIdentity = Yes

Per impostare Primary KeyPulsante dx -> Set Primary Key

MSSQL 2005MSSQL 2005NORTWIND NORTWIND

TABLETABLEOrders TableOrders TableDesign TableDesign Table

Page 6: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 6

Vincoli 5 classi di vincoli:

1. NOT NULL specifica che la colonna non accetta valori NULL

2. I vincoli CHECK assicurano l’integrità di dominio tramite la limitazione dei valori che e possibile inserire in una colonna (Sesso può essere solo M o F)

3. I vincoli UNIQUE garantiscono l’univocità dei valori in un set di colonne (in un vincolo UNIQUE non e consentito che due righe della stessa tabella contengano gli stessi valori diversi da Null per le colonne. L'univocità viene garantita anche dalle chiavi primarie che pero non consentono valori Null)

4. I vincoli PRIMARY KEY identificano la colonna o il set di colonne contenente valori che identificano in modo univoco una riga in una tabella (Non e possibile immettere un valore NULL per una colonna di chiave primaria)

5. I vincoli FOREIGN KEY identificano le relazioni tra le tabelle (Non e possibile inserire una riga con un valore di chiave esterna, ad eccezione di NULL, se non e presente una chiave candidata con tale valore = INTEGRITA’ REFERENZIALE)

Page 7: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 7

Data types -1- Numeri esatti

Bigint Int Smallint Tinyint Bit Decimal e Numeric Money e Smallmoney

Numeri approssimati Float Real Datetime e Smalldatetime

Stringhe di caratteri Char Varchar Text

Stringhe di carattere unicode Nchar Nvarchar Ntext

Stringhe binarie Binary Varbinary Image

Altri tipi di dati Cursor Sql_variant Table Timestamp Uniqueidentifier

Definite dall’utente

Page 8: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 8

Data types -2- Int

Dati Integer compresi tra -2.147.483.648 e 2.147.483.647 [-231 e (231-1)] Le dimensioni di archiviazione sono pari a 4 byte.

BitTipo di dati Integer con valori possibili 1 o 0In MSSQL è implementata un’archiviazione ottimizzata per i dati di tipo bit; se una tabella contiene più colonne di tipo bit, le colonne vengono archiviate 8 in 8 in un singolo byte.

DatetimeDati relativi alla data e all'ora dal 1° gennaio 1753 al 31 dicembre 9999, con un margine di precisione di tre centesimi di secondo.I valori di tipo datetime vengono archiviati internamente in MSSQL come due valori integer a 4 byte. Nei primi 4 byte viene archiviato il numero di giorni precedente o successivo alla data di base. Negli altri 4 byte viene archiviata l'ora del giorno espressa come numero di millisecondi dopo la mezzanotte.

NTextE’ un tipo dati a lunghezza variabile, che può memorizzare fino a 2.147.483.647 caratteri.

NvarcharLa domensione massima della colonna corrisponde a 4000 caratteriHa una lunghezza variabile e può contenere fino a 4000 caratteri UNICODE (cioè 8000 bytes, nei caratteri UNICODE servono 2 bytes per memorizzare un carattere)

Page 9: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 9

Data types -3-

TextAreatipico campo da

NText

TextFieldtipico campo da

Nvarchar

Page 10: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 10

Data Types Description

bigint Integer data from -2^63 through 2^63-1

int Integer data from -2^31 through 2^31 - 1

smallint Integer data from -2^15 through 2^15 - 1

tinyint Integer data from 0 through 255

bit Integer data with either a 1 or 0 value

decimal Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1

numeric Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1

money Monetary data values from -2^63 through 2^63 - 1

smallmoney Monetary data values from -214,748.3648 through +214,748.3647

float Floating precision number data from -1.79E + 308 through 1.79E + 308

real Floating precision number data from -3.40E + 38 through 3.40E + 38

datetime Date and time data from January 1, 1753, through December 31, 9999, with an accuracy of 3.33 milliseconds

smalldatetime Date and time data from January 1, 1900, through June 6, 2079, with an accuracy of one minute

char Fixed-length character data with a maximum length of 8,000 characters

varchar Variable-length data with a maximum of 8,000 characters

text Variable-length data with a maximum length of 2^31 - 1 characters

nchar Fixed-length Unicode data with a maximum length of 4,000 characters

nvarchar Variable-length Unicode data with a maximum length of 4,000 characters

ntext Variable-length Unicode data with a maximum length of 2^30 - 1 characters

binary Fixed-length binary data with a maximum length of 8,000 bytes

varbinary Variable-length binary data with a maximum length of 8,000 bytes

image Variable-length binary data with a maximum length of 2^31 - 1 bytes

cursor A reference to a cursor

sql_variant A data type that stores values of various data types, except text, ntext, timestamp, and sql_variant

table A special data type used to store a result set for later processing

timestamp A database-wide unique number that gets updated every time a row gets updated

uniqueidentifier A globally unique identifier

Page 11: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 11

Da sapere Cosa è lo standard UNICODE ?

Lo standard UNICODE a differenza dello standard ANSI mira a supportare tutti i caratteri dei linguaggi e alfabeti del mondo.UNICODE è ben supportato nei programma che girano nella galassia Windows: NT, W 95, 98 ME, 2000, XP ma non efficacemente nei sistemi UNIX, IBM, e DOS.La memoria necessaria per memorizzare un carattere UNICODE è doppia (2 byte per carattere) rispetto a quella per i caratteri ANSI (1 byte per carattere)I caratteri codificabili con UNICODE sono oltre 65.000 con ANSI solo 256.

Le colonne di dati binari (binary, varbinary, image), permettono di archiviare documenti binari (Word, Excel, Jpg, Gif..).Nel caso superino gli 8kb si utilizza esclusivamente imageImage come anche text e ntext permette di archiviare fino a 2GB

Page 12: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 12

Views

La View è una tabella virtuale il cui contenuto è definito da una Query.

La View eredita la stessa struttura dei campi delle tabelle che la compongono

La View ha una funzione di filtro sulle tabelle che la compongono

La View risulta come una tabella virtuale. Non esiste realmente come set di valori archiviati nel db.

Page 13: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 13

Le Views permettono di applicare selects SQL. Sono richiamabili dall’applicazione esterna. In questo modo la

stringa è direttamente sul server.

NORTWIND NORTWIND VIEWSVIEWS

Design ViewDesign View

Page 14: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 14

Page 15: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 15

Stored Procedures

Sviluppando un software che si interfacci con SqlServer si possono utilizzare 2 differenti approcci: Archiviare i programmi a livello locale e creare applicazioni

(funzioni) che inviino i comandi a SqlServer e ne elaborino i risultati

Archiviare i programmi come Stored Procedure dentro SqlServer e creare applicazioni che richiamino le Stored Procedure stesse e ne elaborino poi i risultati

In SqlServer esistono Stored Procedures definite di Sistema che permettono la gestione del DB e la visualizzazione delle sue caratteristiche.

Page 16: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 16

Le Stored Procedures permettono di togliere tutto il carico di lavoro dall’applicazione esterna. L’applicazione non fa

altro che passare le variabili alla SP.

Page 17: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 17

Sintassi tabelle“t” seguito dal nome della tabella con la prima

lettera maiuscola.

Nome legato alla rappresentazione del suo significato.

Sempre in forma singolare.

tUtente

tCliente

Page 18: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 18

Sintassi tabelle di relazione“t” seguito da una dicitura stabilita (Lk o Rel)

e i nomi delle tabelle relazionate distinte dalla lettera maiuscola o da “_”.

tRelUtenteCliente

tRel_Utente_Cliente

tLk_Utente_Cliente

Page 19: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 19

Sintassi Views e Stored Procedures

La stessa logica della sintassi delle tabelle.

Le View precedute dalla lettera minuscola “v” al posto di “t”

Le Stored Procedure precedute dalle due lettere minuscole “sp”

spCancellaUtentevListaIscritti

Page 20: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 20

Riassunto sulla sintassi in SQL Una sintassi ottimizzata dovrebbe essere univoca In un db con molte decine di tabelle e consigliabile

utilizzare la sintassi abbreviata: 4 lettere, le prime 4 consonanti del nome della tabella, in assenza di sufficienti consonanti si utilizzano anche le vocali.

ES: Tabella “Clienti” tCliente

Id Cliente Clienti_Id (CLNT_Id) Nome Cliente Clienti_Nome (CLNT_Nome)

Tabella “Ordini” tOrdine Id Ordine Ordini_Id (ORDN_Id) Titolo Ordine Ordini_Titolo (ORDN_Titolo) Id Cliente di quell’ordine Ordini_Clienti_Id (ORDN_CLNT_Id)

View “Ordini” con “Clienti” vOrdiniClienti

Page 21: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 21

ESERCIZIO Realizzare un DB per raccolta CD

CDs Titolo Prezzo Anno Immagine Copertina

Canzoni (La stessa canzone può essere in più CD)

Titolo Testo

Cantanti/Gruppi (Informazioni riferite ai CD)

Nome Descrizione Sito internet

Generi (Informazioni riferite ai Cantanti)

Tipo genere Label

Nome Immagine Logo

Page 22: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 22

ESERCIZIO

Page 23: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 23

Page 24: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 24

Lavorando sulle Views(e iniziando a guardare Sql)

Visualizzare tutti i titoli dei cd e i rispettivi titoli delle canzoni

Cambiare nome alle colonne: “Titoli miei cd” & “Titoli canzoni nei miei cd”

Visualizzare il risultato in ordine ascendente rispetto la colonna “Titoli miei cd”

Aggiungere nella visualizzazione la colonna dell’anno del cd. Chiamarla “Anno miei cd”

Visualizzare il risultato in ordine ascendente rispetto alla colonna del “Anno miei cd”

Tenendo l’ordine corrente, non visualizzare la colonna “Anno miei cd”

Page 25: Basi Di Dati 02

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 25

Lavorando sulle Views(e iniziando a guardare Sql)

Aggiungere tabelle cantanti e generi. Aggiungere alla visualizzazione il nome

del cantante e il suo genere. Filtrare la visualizzazione per il genere. Il

filtro deve fare riferimento al valore Identity del genere senza farlo visualizzare.