Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Corso di Complementi di Informatica MS SQL Server Componenti Logici Prof. Pasquale Basile pabasile@unina.it Implementazione Un database è implementato fisicamente mediante due o più files su memoria di massa Implementazione fisica trasparente Solo gli amministratori hanno occasione di lavorare con l implementazione fisica database di sistema (master, tempdb, mdsb, model) Uno o più database utente in funzione del modello aziendale
Tipi di dati binary bigint bit Char datetime decimal Float image Int Money nchar ntext nvarchar Numeric Real smalldatetime Smallint smallmoney sql_variant sysname text timestamp tinyint varbinary varchar uniqueidentifier TABLE nchar, ntext e nvarchar sono le versioni UNICODE timestamp non identifica una data e un orario e non corrisponde allo standard SQL-92 (datetime) Tipi di dati: TABLE e UDF Il tipo TABLE si usa soltanto per variabili TSQL e valori di ritorno delle funzioni utente contiene un result-set di uno statement SQL Valori NULL Assenza di valori Raccomandazione: non far accettare valori nulli UDT (User Defined Types) EXEC sp_addtype datanascita, datetime, 'NULL' CREATE TABLE impiegato ( imp_id char(5), imp_nome char(30), imp_cognome char(40), imp_datanascita datanascita ) Tabelle di Sistema e Temporanee Tabelle di sistema contengono dati relativi alla configurazione del server e dei database Tabelle temporanee locali (#) visibili soltanto alla connessione che le ha create. Rimosse automaticamente globali (##) visibili a tutte le connessioni rimosse manualmente o automaticamente
Viste (View) Tabella virtuale o Query memorizzata (stored query) è una relazione in senso formale i dati non sono memorizzati fisicamente Utilizzo: limitare l accesso a proiezioni, selezioni, join) espandere l accesso ad aggregazioni (union) Aggiornabili Richiamabili in tutte le sintassi ove è prevista una relazione Viste Indicizzate Prestazioni elevate Dati memorizzati fisicamente e aggiornati automaticamente Viste: esempi CREATE VIEW titleview AS SELECT title, au_ord, au_lname, price, ytd_sales, pub_id FROM authors AS a JOIN titleauthor AS ta ON (a.au_id = ta.au_id) JOIN titles AS t ON (t.title_id = ta.title_id) SELECT * FROM titleview CREATE VIEW PartitionedView AS SELECT * FROM dbase.dbo.tabella1 UNION ALL SELECT * FROM Server2.dbase.dbo.Tabella2 UNION ALL SELECT * FROM Server3.dbase.dbo.Tabella3 Stored Procedures Gruppo di istruzioni TSQL compilate in un unico execution plan Ritorno Dati: parametri in OUTPUT (dati o variabile cursore) Codici di ritorno (interi) un result set per ogni SELECT della SP un cursore globale che può essere referenziato al di fuori della procedura Migliorano la codifica della logica Incapsulano operazioni su tabelle delicate Migliorano le prestazioni essendo eseguite dal lato server i risultati intermedi non vengono restituiti al client in caso di confronti con SELECT
Definizione di una stored procedure USE Northwind DROP PROCEDURE OrderSummary CREATE PROCEDURE OrderSummary @MaxQuantity INT OUTPUT AS -- SELECT ritorna la sintesi delle vendite per impiegato SELECT Ord.EmployeeID, SummSales = SUM(OrDet.UnitPrice * OrDet.Quantity) FROM Orders AS Ord JOIN [Order Details] AS OrDet ON (Ord.OrderID = OrDet.OrderID) GROUP BY Ord.EmployeeID ORDER BY Ord.EmployeeID -- SELECT per settare il parametro di ritorno SELECT @MaxQuantity = MAX(Quantity) FROM [Order Details] -- Ritorna il numero di item ordinati RETURN (SELECT SUM(Quantity) FROM [Order Details]) Test -- Test della stored procedure -- DECLARE variabili per il valore di ritorno e il -- parametro di output DECLARE @OrderSum INT DECLARE @LargestOrder INT -- Esegue la procedura che ritorna il result set -- della prima select Execute the procedure EXEC @OrderSum = OrderSummary @MaxQuantity = @LargestOrder OUTPUT -- Utilizziamo il valore di ritorno e il parametro di output PRINT 'The size of the largest single order was: ' + CONVERT(CHAR(6), @LargestOrder) PRINT 'The sum of the quantities ordered was: ' + CONVERT(CHAR(6), @OrderSum) Output EmployeeID SummSales ----------- -------------------------- 1 202,143.71 2 177,749.26 3 213,051.30 4 250,187.45 5 075,567.75 6 078,198.10 7 141,295.99 8 133,301.03 9 082,964.00 The size of the largest single order was: 130 The sum of the quantities ordered was: 51317
Funzioni Built-in User Defined CREATE FUNCTION Consentono parametri di input Ritornano un singolo valore (che può essere di tipo TABLE) Si dichiare una variabile interna di tipo TABLE, la si popola di righe e la si usa come valore di ritorno Alternative alle VIEW Può essere referenziata come una relazione (FROM, etc...) Integrità Data Integrity Referential Integrity Constraints ( Vincoli ) valori permessi nelle colonne Rules Defaults Triggers Contraints Meccanismo standard per imporre l integrità preferibili a trigger, rules e defaults NOT NULL Non consente valori NULL CHECK verifica l integrità di dominio ammessi CHECK multipli per singola colonna... classe int, CONSTRAINT chk_classe CHECK (classe BETWEEN 0 and 5) UNIQUE forza l unicità dei valori di una determinata colonna codice_prodotto char(30) UNIQUE,
Contraints PRIMARY KEY identifica chiave primaria (no NULL, UNIQUE) codice_prodotto char(30) PRIMARY KEY, FOREIGN KEY identifica una chiave che fa riferimento a una candidata di un altra tabella: mag_codice_prodotto char(30) FOREIGN KEY REFERENCES prodotto(codice_prodotto) ON DELETE NO ACTION, ON DELETE ON UPDATE NO ACTION CASCADE VINCOLI DI TABELLA indipendenti dalla dichiarazione di una colonna (es. chiave primaria composta da due colonne) CONSTRAINT p_key PRIMARY KEY (a1, a2) Rules Servono per forzare l integrità di dominio Costrutto retrocompatibile... usare CHECK CREATE RULE cr_chk AS @cr BETWEEN 0 and 100000 CREATE TABLE cust_sample ( cust_id int PRIMARY KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, ) sp_bindrule cr_chk, 'cust_sample.cust_credit_limit' Defaults Specifica i valori di default di una colonna L espressione deve valutare a una costante: Metodi: costante funzione espressione matematica DEFAULT keyword [raccomandato] CREATE DEFAULT [obsoleto]
Triggers Classe di S.P. speciali che vengono eseguite automaticamente in corrispondenza di un INSERT, UPDATE o DELETE Utili per forzare l integrità referenziale, ma è preferibile utilizzare i vincoli (CONSTRAINTS) CREATE TRIGGER (nome) ON (tabella) FOR (operazione) AS... FOR AFTER (default) Il trigger viene eseguito dopo il completamento dell operazione INSTEAD OF Il trigger viene eseguito al posto dell operazione. Funziona sia su tabelle che VIEW e si può utilizzare come metodo per ottenere VIEW aggiornabili anche su più tabelle Indici CLUSTERED Condiziona l organizzazione del data file: i dati sono ordinati secondo l indice NONCLUSTERED Struttura separata dal data file Fattore di riempimento definisce la densità delle pagine associate all indice condiziona le performance dell associazione dati<->indici Indice basso => migliora le prestazioni di INSERT, UPDATE Indice alto => migliora la navigazione riducendo il numero di I/O Indici USE pubs CREATE TABLE emp_sample ( emp_id int PRIMARY KEY CLUSTERED, emp_name char(50), emp_address char(50), emp_title char(25) UNIQUE NONCLUSTERED ) CREATE NONCLUSTERED INDEX sample_nonclust ON emp_sample(emp_name) Index Tuning Wizard
Protezione e sicurezza Login Necessari per la connessione a SQL-Server Users [Utenti] Identifica un utente all interno di un database Roles [Ruoli] Mansioni che possono competere a un utente mansioni di sistema mansioni di database Groups [Gruppi] obsoleti in SQL2000. sostituiti dai gruppi del S.O. Ruoli predefiniti (database) Sysadmin Serveradmin Setupadmin Securityadmin Processadmin Dbcreator Diskadmin bulkadmin Consente di eseguire qualsiasi attività in SQL Server. Consente di impostare opzioni di configurazione valide per tutto il server e di chiudere il server. Consente di gestire i server collegati e le procedure di avvio. Consente di gestire gli account di accesso e le autorizzazioni CREATE DATABASE nonché di leggere i log degli errori e modificare le password. Consente di gestire i processi in esecuzione in SQL Server. Consente di creare, modificare ed eliminare i database. Consente di gestire i file su disco. Consente di eseguire istruzioni BULK INSERT. Ruoli predefiniti (database) db_owner db_accessadmin db_securityadmin db_ddladmin db_backupoperator db_datareader db_datawriter db_denydatareader db_denydatawriter Dispone di tutte le autorizzazioni del database. Consente di aggiungere o rimuovere gli ID utente. Consente di gestire tutte le autorizzazioni, i proprietari degli oggetti, i ruoli e l'appartenenza ai ruoli. Consente di eseguire tutte le istruzioni DDL, ma non le istruzioni GRANT, REVOKE o DENY. Consente di eseguire le istruzioni DBCC, CHECKPOINT e BACKUP. Consente di selezionare tutti i dati di qualsiasi tabella utente del database. Consente di modificare tutti i dati di qualsiasi tabella utente del database. Impedisce di selezionare i dati di tutte le tabelle utente del database. Impedisce di modificare i dati di tutte le tabelle utente del database.