La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

SQL SERVER Modulo 4 Relatore: Stefano Furlan. Una premessa Lezioni pratiche con in mente il progetto Requisiti Information retrieval Non avere paura di.

Presentazioni simili


Presentazione sul tema: "SQL SERVER Modulo 4 Relatore: Stefano Furlan. Una premessa Lezioni pratiche con in mente il progetto Requisiti Information retrieval Non avere paura di."— Transcript della presentazione:

1 SQL SERVER Modulo 4 Relatore: Stefano Furlan

2 Una premessa Lezioni pratiche con in mente il progetto Requisiti Information retrieval Non avere paura di usare google Capacità progettuale Dove voglio arrivare? (definizione della specifica) Cosa mi serve per arrivarci? (analisi) In che ordine lo faccio? (separazione dei task) Come capisco che sono arrivato? (verifica del risultato) OVVERO: Buonsenso!

3 Cosè un DBMS? In realtà dovremmo chiederci… ? A COSA CI SERVE? A quali domande del nostro committente dobbiamo dare risposta?

4 Architettura di un sistema di telecontrollo Pannelli fotovoltaici Sistema di controllo DB Collettore dati Sistema di reportistica Utente Dati Controllo Applicazione di configurazio ne

5 A cosa serve un DBMS? Storage Dati Ma quali dati? Dati tecnici Configurazioni Logs Siamo fortunati: tipicamente una base dati per il telecontrollo è piuttosto semplice

6 Struttura del DBMS MOTOREDATI QUERY SQL Dati

7 LINGUAGGIO SQL Structured query language Comandi testuali strutturati per il database DML (data manipulation language) DDL (data definition language) Vantaggio: compatibilità TSQL: dialetto di MS Sql Server

8 SQL SERVER È un sw server! Come lo contatto? Meccanismo di istanze (Nomemacchina\nomeserver) Accesso usando tool SSMS Interfaccia user friendly Query testuali

9 Operazioni preliminari Accesso con SSMS Creazione di un DB vuoto Skip delle impostazioni

10 CREAZIONE DI UNA BASE DATI

11 MAPPARE LA STRUTTURA DELLA REALTA PANNELLI (3 pannelli piccoli e uno grande) GRUPPI (divisi in due zone) ENERGIA PRODOTTA (che producono energia ad ogni ora)

12 ENTITÀ FONDAMENTALI in una base dati TABELLE Campi (colonne) tipizzati Chiavi Indici RELAZIONI Chiavi esterne VISTE PROCEDURE

13 OPERAZIONI FONDAMENTALI in una base dati Lettura o selezione (SELECT) Scrittura o inserimento (INSERT) Modifica (UPDATE) Cancellazione (DELETE)

14 TABELLA IdPannelloNomePotenzaDataInstallazione 1Pannello 13kW1/1/2013 2Pannello 22kW1/1/2013 3Pannello 32kW1/3/2013 4Pannello 4null1/3/2013 Esempio di tabella

15 TABELLA CAMPI tipizzati Numerici Interi Tinyint (1 byte)0-255 Smallint(2 bytes) Integer (4 bytes) +-miliardi(+-2^31) Bigint(8 bytes)+- le particelle delluniverso (+-2^63) Frazionari Float(attenzione: errori di arrotondamento) Decimal(x,y)(preciso ma lento) Money(4 cifre decimali) Testuali Char(x) Varchar(x) nvarchar(x)(unicode) Date Datetime Altri (poco usati)

16 TABELLE: chiave primaria Campo o campi che permettono di individuare univocamente ciascuna riga Spesso un codice ID intero ad auto incremento idPannelloNome 1Panel1 2Panel2 3Panel3 CHIAVE PRIMARIA

17 TABELLA: altre features Identity Default value Vincoli check Indici Univoci Valori Nulli e campi nullabili Convenzione: i nomi tabella iniziano con «tab»

18 Un po di pratica Accediamo a SQL server per creare una tabella per i pannelli (Usando SSMS)

19 Interfaccia di creazione tabella

20 Ultime info su SSMS Gli oggetti non si aggiornano da soli in visualizzazione Refresh Ctrl-shift R Context menu Inserimento dei dati in tabella manualmente

21 TABELLA: relazioni tra tabelle Si chiama «relazionale» per qualche motivo Relazioni tra entità Integrità referenziale enforced da DB (il db impedisce che nella tabella dei consumi esista mai una riga «orfana») idPannelloNome 1Panel1 2Panel2 3Panel3 idPannelloDataEnergia 201/01/ /01/ /01/ /02/ /01/ /02/20135

22 Il diagramma database Metodo facilitato di creazione Permette di tenere sotto controllo in maniera grafica le relazioni Usato per separare parti diverse di un progetto complesso

23 Esempio di semplice diagramma…

24 Torniamo alla nostra realtà… PANNELLI (3 pannelli piccoli e uno grande) GRUPPI (divisi in due zone) ENERGIA PRODOTTA (che producono energia ad ogni ora)

25 Progettazione di una base dati: STEPS Individuazione delle entità (tipicamente ogni entità avrà la sua tabella) Individuazione delle relazioni Alcune tabelle saranno collegate ad altre in maniera naturale Produzione del diagramma Esempio: dati di sistema fotovoltaico Dati di funzionamento (energia prodotta ogni quarto dora) Configurazioni (quanti e quali pannelli ho?) Dati di log (listato diagnostico)

26 REGOLE DI PROGETTAZIONE Buonsenso! Ogni tabella mappa unentità (o una relazione) Deve esistere sempre una chiave primaria Evitare dati non atomici (concatenazione di dati nello stesso campo) Mai lo stesso dato contemporaneamente in due posti diversi! Mai perdere informazioni Evitare che vengano inserite porcherie Forme normali

27 TABELLE: alcuni consigli Usare il tipo di dato più corretto per ogni campo ma pensando con lungimiranza Impedire linserimento di dati scorretti Se qualcosa può andare storto LO FARA ES: Codici fiscali Campi di testo libero a Varchar(max) Vedi la legge di murphy sopra

28 ESERCITAZIONE Che tipo di dato è bene usare per : Per la temperatura del corpo umano? Perché? Per un numero civico? Perché? Per la potenza istantanea di un impianto? Perché? Che vincoli mettereste sui dati di cui sopra? Progettare un SEMPLICE database per gestire un parco fotovoltaico (usando il diagramma) Entità: pannello, energia prodotta ogni quarto dora da ciascun pannello, raggruppamento di pannelli in aree.

29 Esercitazione: data entry Una volta creata la base dati Creare 4 pannelli Creare due zone (una con tre pannelli laltra con uno) Inserire dati di energia prodotta per tutti i giorni di Gennaio 2013 per tutti e 4 i pannelli Possibile utilizzo di excel per il data entry

30 Progettazione di una base dati PROGETTARE UNA BASE DATI È UNATTIVITÀ SOLO APPARENTEMENTE BANALE MOLTI PERICOLI NASCOSTI FARE MODIFICHE IN CORSO DOPERA PUÒ ESSERE DISPENDIOSO MEGLIO PROGETTARE BENE DALLINIZIO Chiara definizione delle entità Buone naming conventions (prefissi, camel-case)

31 APPROFONDIMENTI Indici e Considerazioni di performances

32 UTILIZZO DI UNA BASE DATI

33 Azioni sulla base dati Lettura o selezione (SELECT) Scrittura o inserimento (INSERT) Modifica (UPDATE) Cancellazione (DELETE) QUERY Frase in pseudo inglese ES: seleziona da una quando

34 SELECT La funzione più usata in assoluto Sintassi usata anche in altre funzionalità Ritorna un recordset

35 SELECT: sintassi SELECT FROM WHERE ORDER BY Es: SELECT [idPannello],[Pannello],[Note] FROM tabPannelli Le Keyword in MAIUSCOLO per convenzione

36 SELECT : lista campi SELECT Nome,Potenza as PotKWH FROM tabPannelli IdPannelloNomePotenzaDataInstallazione 1Pannello 13kW1/1/2013 2Pannello 22kW1/1/2013 3Pannello 32kW1/3/2013 4Pannello 4null1/3/2013 NomePotKWH Pannello 13kW Pannello 22kW Pannello 32kW Pannello 4null

37 SELECT: lista campi Asterisco= tutti i campi Es: select * from tabella Alias Es: SELECT nome as NomePannello from tabPannelli Sono possibili alcune operazioni in fase di select (concatenazione di stringhe) ES: SELECT il pannello + idpannello + è rotto as Anomalia FROM tabPannelli 3 part naming convention Es: SELECT * FROM dbFotovoltaico.dbo.tabPannelli Parentesi quadre se campo contiene spazio ES: SELECT nome as [il mio nome] FROM tabPannelli

38 SELECT : condizioni WHERE Es: WHERE idpannello=1 WHERE IN (lista elementi) Es: WHERE idpannello IN (1,2,3) WHERE IN (query) Es: WHERE idpannello IN (select idpannello from tabPannelli where nomepannello=pannello1) WHERE LIKE Es: WHERE nome LIKE Pannello% Uso di valori testuali Padding SQL iniection

39 SELECT: condizioni Usabili tutti gli operatori di confronto (, =, !=, <>) Es: WHERE idPannello=1 Altri operatori (LIKE, BETWEEN) Tutti i costrutti booleani (AND, OR, NOT) Usare sempre le parentesi Es: SELECT * FROM tabPannelli WHERE idpannello=1 AND (nomepannello=Pannello1 OR nomepannello=Pannello2 )

40 SELECT: ordinamento La clausola ORDER BY specifica il criterio di ordinamento Es: SELECT * FROM tabPannelli ORDER BY idPannello ASC,NomePannello DESC

41 JOIN idPannelloNome 1Panel1 2Panel2 3Panel3 idPannelloDataEnergia 201/01/ /01/ /01/ /02/ /01/ /02/20135 Come collegare i dati di tabelle distinte? tabPannelli tabEnergia

42 JOIN (collegamento di più tabelle) INNER È lopzione più comune Vengono restituite solo le righe comuni a entrambe le tabelle Se in una delle tabelle non ho un match la riga «scompare» Possono essere restituite più righe delle due tabelle! (tipicamente è un errore) idPannelloNomeidPannelloDataEnergia 1Panel1null 2Panel2201/01/ Panel3301/01/ null 401/01/ null 401/02/ null 501/01/ null 501/02/20135

43 JOIN LEFT righe a sx più righe a dx che matchano RIGTH è una left con le tabelle scambiate (da non usare per problemi di leggibilità) idPannelloNomeidPannelloDataEnergia 1Panel1null 2Panel2201/01/ Panel3301/01/ null 401/01/ null 401/02/ null 501/01/ null 501/02/20135 idPannell oNomeidPannelloDataEnergia 1Panel1null 2Panel22########100 3Panel33########200 null 4########250 null 4########10 null 5########40 null 5########5

44 JOIN FULL OUTER CROSS Fa il cartesiano(tutte le combinazioni). Con le tabelle sopra sono 18 righe… idPannelloNomeidPannelloDataEnergia 1Panel1null 2Panel2201/01/ Panel3301/01/ null 401/01/ null 401/02/ null 501/01/ null 501/02/20135

45 JOIN: sintassi SELECT FROM as INNER JOIN as ON Alias1.campo = Alias2.campo Es: SELECT * FROM tabEnergia INNER JOIN tabPannelli ON tabEnergia.idPannello=tabPannelli.idPannello

46 ESERCITAZIONE: Mostrare la tabella consumi ma, al posto dellidPannello mostrare il nome del pannello

47 JOIN in cascata È possibile combinare più tabelle in una serie di join successivi Es: SELECT * FROM tabEnergia INNER JOIN tabPannelli ON tabEnergia.idPannello=tabPannelli.idPannello INNER JOIN tabGruppi ON tabGruppi.idGruppo=tabPannelli.idGruppo

48 Best practices su SELECT e JOIN Attenzione ai cartesiani! Attenzione alle INNER su campi non chiave: potrebbero «sparire righe» o uscire «righe in più» Ordinare le tabelle nella clausola di join a partire dalla più informativa Usare solo left join e mai right join per facilità di lettura Formattazione delle query

49 AGGREGAZIONE E RAGGRUPPAMENTO Che succede se voglio sommare dei valori? Es: sapere quanto ha prodotto ogni pannello in un certo periodo? Ma io ho questo: PannelloEnergia Prodotta In Gennaio Pannello11230 Pannello2132 Pannello31244 idPannelloDataEnergia 201/01/ /01/ /01/ /02/ /01/ /02/20135

50 AGGREGAZIONE E RAGGRUPPAMENTO SELECT FROM WHERE HAVING Es: SELECT tabPannelli.Pannello, SUM(tabEnergiav2.Energia) AS EnergiaTot FROM tabEnergiav2 INNER JOIN tabPannelli ON tabEnergiav2.idPannello = tabPannelli.idPannello GROUP BY tabPannelli.idPannello, tabPannelli.Pannello

51 ESERCITAZIONE Mostrare in una lista tutti i pannelli e, per ognuno mostrare lenergia prodotta (sia che il pannello abbia prodotto, sia no!)

52 ESERCITAZIONE Mostrare la quantità di energia prodotta da ogni pannello (specificando il nome pannelloe non lID!) In totale Raggruppata per giorno Per la prima settimana di gennaio 2013 Raggruppata per mese e salvare la query Raggruppata per settimana(!) (non si può fare con la base dati che abbiamo: perché? Come si può fare?) Mostrare in una lista tutti i pannelli e, per ognuno mostrare lenergia prodotta (sia che il pannello abbia prodotto, sia no!)

53 INSERT INSERT VALUES INSERT INTO tabella (lista campi) VALUES (lista valori) INSERT RESULTS INSERT INTO tabella (lista campi) SELECT FROM tabella WHERE

54 UPDATE Aggiornamento di tabelle Sintassi UPDATE SET campo= FROM Es: UPDATE tabEnergia SET energia=0 FROM tabEnergia WHERE (Ora >23 OR Ora<5)

55 DELETE Sintassi: DELETE FROM tabella WHERE idpannello=1 In caso di join DELETE FROM tabella FROM tabella INNER JOIN tabella2 ON tabella.id=tabella2.id WHERE tabella2.Nome=Pannello2 Attenzione in caso di relazioni con cascade!

56 ESERCITAZIONE Creare una tabella con i giorni dellanno e alimentarla Eliminare tutti i dati di energia prodotta Inserire nuovi dati di consumo per tutto il 2013 (con QTA casuali da 50 a 100 di giorno, 0 di notte) per i pannelli 1,2,4 A marzo 2013 simulare un malfunzionamento del pannello 2 (aggiornando i dati con NULL in tabella) Lanciare la query salvata nella precedente esercitazione per visualizzare i dati di ogni pannello per ogni mese

57 NOZIONI AVANZATE

58 UNA PREMESSA DATA ENCAPSULATION INFORMATION HIDING LOGICA N-TIERED Garanzie di successo del progetto Divisione efficiente in tasks Manutenibilità

59 VISTE Sono in pratica delle query di tipo SELECT nel DB Calcolate «on the fly» Piccole differenze tutti i campi devono essere univoci Ogni campo deve avere un nome Possono essere create con designer Ma fa un po schifo

60 VISTE: sintassi CREATE VIEW AS ES: CREATE VIEV vwPannelli AS SELECT * FROM tabpannelli

61 VISTE: alcune considerazioni Vengono calcolate ogni volta Possibili lentezze Se varia un campo la modifica non è a cascata Utili per comunicare con lesterno Nascondono complessità implementative (information hiding) Utenti Sistemi di reportistica Possono essere richiamate nelle query in maniera semplice e comoda

62 STORED PROCEDURES Esigenze di data encapsulation e information hiding Molto potenti A differenza delle viste Possono eseguire azioni Possono non ritornare un recordset (dati tabellari) Possono usare step intermedi di calcolo (es: temp tables) Ammettono variabili in ingresso e uscita Svantaggi Non posso fare join sul risultato di una store

63 STORED PROCEDURES: sintassi CREATE PROCEDURE ( ) AS BEGIN END CREATE PROCEDURE spMostraEnergiaPerPannello as int ) AS BEGIN Select sum(energia) From tabEnergiaProdotta WHERE END

64 STORED PROCEDURE: chiamata Sintassi: EXEC spVisualizzaPannello 1 OPPURE EXEC

65 ESERCITAZIONE Creare una procedura che cancelli la tabella dellenergia prodotta (spResetData) Creare una procedura che chiamata con parametro IdPannello mostri lenergia prodotta da quel pannello

66 SINTASSI TSQL: una piccola toolbox Variabili Strutture di controllo IF Cicli FOR WHILE Cursori Da vedere poi…

67 SINTASSI TSQL: VARIABILI Iniziano Vanno dichiarate as int=10 Se non inizializzate sono NULL! as int è NULLA Si impostano con istruzione SET =10

68 SINTASSI TSQL: Strutture condizionali IF ( ) BEGIN END ELSE BEGIN END ES: IF BEGIN DELETE FROM tabPannello WHERE END

69 SINTASSI SQL CONDIZIONE SU RISULTATO QUERY IF EXISTS( ) BEGIN END ELSE BEGIN END

70 SINTASSI TSQL: altro CASE WHEN THEN WHEN THEN ELSE END CICLI FOR WHILE

71 ESERCITAZIONE Allo scopo di generare dei dati da analizzare: Creare una procedura sp_generaDatiDEmoPannello che, dato un idpannello Elimini dalla tabella energia prodotta tutti i dati di quel pannello Generi per ogni giorno dellanno 2013 una riga di misurazione con una quantità randomica da 50 a 100 ( per tutte le ore dalle 8 alle 19) solo alle ore 12 Cercare su google la funzione RAND per la funzione random Se il pannello è il 3 corregga il dato così prodotto simulando un malfunzionamento per tutto marzo e aprile2013(tutte le qta andranno a NULL)

72 ESERCITAZIONE Creare una procedura spGeneraDatiDemo che chiami la procedura precedente per ogni pannello esistente in tabella La soluzione adottata come reagisce al fatto che io aggiungo un pannello? Si adatta? Cosa mi servirebbe? Eseguirla e Verificare usando la vista dellenergia prodotta i risultati ottenuti

73 CASE STUDY: import massivo dati

74 Progettazione di una Procedura di controlloper limport dati. Una stored proc (parametro=idtrasmissione) Che la trasmissione sia arrivata(che sia arrivato almeno un dato) Il pannello esiste?(lo facciamo dopo) La qta non negativa Qta inferiore a soglia 500 La data della misurazione deve essere univoca e non già presente nel database(per pannello) Chiamare la store:spVerificaTrasmissione Alla fine aggiornare il campo stato con 1 se successo, 0 se fallimento AS int FROM tabella (approfondire problema della quantizzazione temporale)

75 ALTRE FUNZIONALITA FUNZIONI Richiamabili da query Solitamente non usate: problematiche di performances TABLE FUNCTIONS «viste» parametriche Anche qui problemi di performances


Scaricare ppt "SQL SERVER Modulo 4 Relatore: Stefano Furlan. Una premessa Lezioni pratiche con in mente il progetto Requisiti Information retrieval Non avere paura di."

Presentazioni simili


Annunci Google