5. Agenda
• Le problematiche
• Cosa è un Database Project
• Deploy
• Unit Testing
• Refactoring e Code Analysis
6. Le Problematiche
• Lo sviluppo di un database spesso
segue procedure di ALM differenti
rispetto al resto del progetto
• Solitamente molte funzionalità che
sono disponibili per il codice sono
assenti per lo sviluppo del database
8. Database Project
• I database project sono stati
introdotti per superare questo gap
• Un database project permette di
«definire» la struttura di un
database tramite file sorgente
• Un DP può essere compilato,
deployato e su di esso si possono
scrivere unit tests
10. SQL START!ANCONA, 11 NOVEMBRE 2011
Introduciamo i Db Projects
Creazione e funzionalità base di un
database project
11. Se ho gia un progetto avviato?
• La possibilità di importare la
struttura di un database esistente
garantisce l’introduzione dei DB
Project su progetti esistenti
• La possibilità di sincronizzazione
permette inoltre di mixare lo
sviluppo «tradizionale» all’uso dei
DB Project
12. DEMO
Sincronia
Gestire la sincronia tra un database reale
ed un Db Project per Utilizzare in
contemporanea un database condiviso
ed un DB project
13. Come rilascio gli update del DB
• Esistono strumenti che sincronizzano la
struttura di due istanze di database
• In questo modo possiamo generare script di
upgrade da includere in un setup
14. Come rilascio update del DB?
• Cosa accade se in produzione ho
potenzialmente versioni differenti del
database?
• Cosa accade se qualcuno ha modificato il
database? (non è infrequente come potete
pensare )
15. Come rilascio update del DB?
• Compilando un database project viene
prodotto un file .dbschema chiamato
«database logico»
• Esiste un tool redistribuibile che può
sincronizzare un «database logico» con un
database fisico
19. Unit Testing
• Stored procedures e funzioni dovrebbero
essere coperte da Unit Testing
• Grazie ad un DB Project possiamo
automatizzare
– Creazione di un db locale di test
– Popolazione di dati di test
– Unit test eseguibili da MsTest e quindi integrati nel
ciclo di sviluppo
20. Dati di test
• Affinche uno Unit Test sia ripetibile è
necessario poter replicare i dati nel db
• È possibile associare ad un DBProj uno o più
Data Generation Plan
• La generazione dei dati è automatica, rispetta
le chiavi del database e permette flessibilità /
ripetibilità sui dati generati.
22. Unit Testing
• Si possono creare con pochi click unit test
di stored procedure, trigger e funzioni
• Visual Studio si occupa di
generare il database di test, allinearlo ed
eseguire la generazione dati
23. Unit Testing
• Gli unit test di database sono scritti in T-SQL
rispettando il paradigma per cui gli unit test
dovrebbero essere scritti nello stesso
linguaggio del codice
• Internamente viene comunque generato un
test standard che può comunque essere
editato
24. Customizzazione Unit Test
• È quindi possibile aggiungere funzionalità ai
test del database semplicemente andando ad
editare il file di «code behind»
• Grazie a questo si possono aggiungere
interessanti funzionalità, come i Data Driven
Database test
25. Es. Unit Test Transazionali
• È possibile ad esempio anche aggiungere una
gestione delle transazioni
26. DEMO
Unit Test
Come creare unit test per le
funzionalità incluse in un database
27. Refactoring
• Il refactoring è una procedura standard dello
sviluppo agile
• In un DB Project si hanno a disposizione dei
refactoring sulla struttura
– Rename
– Move to schema
– Expand wildcards
28. Analisi del codice
• Analogamente ai progetti C# o di altri
linguaggi è presente un analizzatore di codice
• Tre distinte categorie: Naming, Performance e
Design attivabili distintamente
• Possibilità di scrivere Regole proprie per
assicurare ad esempio le proprie naming
conventions
30. Integrazione con Tfs Build
• E’ possibile integrare il deploy del progetto DB
in una team build. Es, progetto web.
• In questo modo si automatizzano le procedure
di deploy, sia nell’ambiente di test che in
produzione
31. Integrazione con Tfs Build
TFS
Check In Aggiorna Web
Sincronizza DB
Build Server DB Test
33. Sql Server 2012 e Juneau
• I database project verranno rimpiazzati dai Sql
Server Developer Tools (code-name Juneau)
– http://msdn.microsoft.com/en-us/library/hh272686(v=vs.103).aspx
– http://blogs.msdn.com/b/ssdt/archive/2010/11/08/welcome.aspx
• Conversioni e compatibilità con gli attuali
Database Project
– http://msdn.microsoft.com/en-us/library/hh272689(v=vs.103).aspx
• Informazioni sui nuovi Database Project
– http://msdn.microsoft.com/en-us/library/hh272702(v=VS.103).aspx
34. Grazie!
Non dimenticate di compilare
i moduli di feedback.
Commenta la sessione che hai
appena seguito su Twitter
#sqlstart
Editor's Notes
Per i data driven database test rimando a questo link del mio blog inglese. http://www.codewrecks.com/blog/index.php/2009/11/16/data-driven-test-of-a-stored-procedure-in-database-edition/
TabelleRename: Rinomina una tabella o colonnaMoveToSchema: Sposta una tabella in uno schema differenteFullyQualifyName: Qualifica in modo completo i nomi con il nome a tre parti databasename.schema.nameView (tutte quelle delle tabelle più)ExpandWildcards: Analizza una stored ed ogni volta che viene trovato il wildcard * in una selezione lo espande.Stored e funzioniRename: Rinomina una stored funzione o parametroMoveToSchema: Sposta una tabella in uno schema differenteExpandWildcards: Analizza una stored ed ogni volta che viene trovato il wildcard * in una selezione lo espande.FullyQualifyName: Qualifica in modo completo i nomi con il nome a tre parti databasename.schema.name