SlideShare a Scribd company logo
1 of 47
Visual Studio Database projects
Autore Ricci Gian Maria E-mail:	ricci.gm@nablasoft.com Blog: 	http://www.nablasoft.com/alkampfer http://blogs.ugidotnet.org/rgm
Alm e database, le problematiche attuali Parte prima
Database ed ALM - Problemi
Soluzioni tradizionali Database di sviluppo condiviso Aggiornamento tramite script sequenziali ,[object Object]
Assenza di script per il rollback delle modifiche
Difficoltà nell’individuare lo sviluppatore che ha scritto una specifica porzione di codice,[object Object]
Soluzioni tradizionali - Deploy Confronto con una struttura master per la generazione di script di update DEV Prod ,[object Object]
Si deve generare uno script per ogni possibile versione che si ha in produzione
Problemi nel caso il database di produzione sia stato modificato ,[object Object]
Database Project	 Visual Studio Database Edition (Team System Developer o Team Suite) introduce il concetto di Database Project Un Database Project è un progetto dedicato per lo sviluppo di database Lo scopo finale è garantire un’integrazione completa dello sviluppo DB nell’ALM
Quando introdurre un Database Project nel ciclo produttivo  Grazie all’importazione automatica è possibile introdurre un Database Project anche in un progetto iniziato Le molte funzionalità fornite, tra cui il controllo sintattico e dei riferimenti tra oggetti porta immediati vantaggi. E’ comunque necessario che gli sviluppatori abbiano una familiarità con lo strumento, per cui è consigliabile un progetto pilota  Operare immediatamente su un progetto relativo ad un database complesso può essere dispersivo Importazione DB Dev DB Project
Demo – familiarizzare con i database project
Ogni oggetto un file Il paradigma più importante è che ogni oggetto è identificato da un file sorgente In questo modo è possibile confrontare le varie versioni e monitorare l’evoluzione degli oggetti del database nel tempo Il database viene effettivamente “modellato” partendo da dei file sorgente CREATE TABLE [dbo].[Customers] (     [CustomerID]   NCHAR (5)     NOT NULL,     [CompanyName]  NVARCHAR (40) NOT NULL,     [ContactName]  NVARCHAR (30) NULL,     [ContactTitle] NVARCHAR (30) NULL,     [Address]      NVARCHAR (60) NULL,     [City]         NVARCHAR (15) NULL, … CREATE TABLE [dbo].[Customers] (     [CustomerID]   NCHAR (5)     NOT NULL,     [CompanyName]  NVARCHAR (40) NOT NULL,     [ContactName]  NVARCHAR (30) NULL,     [ContactTitle] NVARCHAR (30) NULL,     [MainAddress]      NVARCHAR (60) NULL,     [City]         NVARCHAR (15) NULL, …
Sviluppo dichiarativo Un database project contiene al suo interno tutte le dichiarazione di creazione degli oggetti Si può passare dalla dichiarazione, alla generazione del database e di nuovo al codice Nel database project sono contenute le definizioni di tutti gli oggetti che compongono un database: tabelle, storedprocedures, funzioni, utenti, assembly CLR, trigger, indici, etc. Tutti questi file sorgente possono essere “compilati” per generare artefatti. Per contro gli sviluppatori necessitano della conoscenza della sintassi T-SQL relativa alla creazione degli oggetti, ma si può sempre usare il Management Studio e poi portare il codice in Visual Studio
Database Logico  Un Database Project definisce quindi un “database logico”che è il risultato della compilazione di un database project ,[object Object]
Vengono individuate anche anomalie, come riferimenti ad oggetti inesistenti,[object Object]
Compilazione
Analisi di codice	 Procedura analoga  a quella disponibile sui normali progetti C# o VB Permette di analizzare il Database Project al fine di evidenziare pattern di codice critici Suddivise in tre distinte categorie: Naming, Performance e Design attivabili distintamente Possibilità di attivare/disattivare non solo le categorie ma i singoli warning Mostra punti con possibili problemi nel codice.
Controllo di versione Visualizzando la storia di un file si ottiene la storia del corrispondente oggetto del DB Si può effettuare un confronto tra le versioni per vedere come un oggetto è cambiato nel tempo Si può capire chi e quando ha scritto una particolare porzione di codice e perché Si può effettuare un rollback annullando le modifiche
DEMO – compilazione e Controllo di codice sorgente
Deploy Il database logico può essere confrontato con un database fisico per generare uno script di aggiornamento Il confronto non necessita di avere una istanza “viva” del database di sviluppo Confronto DB Logico DB Fisico
Deploy in produzione Le modifiche possono anche essere applicate immediatamente senza passare per uno script  DB Fisico DB Logico ,[object Object]
Il confronto e l’aggiornamento vengono fatti tramite un tool ridistribuibile e gratuito, oppure direttamente da Visual Studio,[object Object]
Un’altra situazione è quella in cui un database di test viene ottimizzato da un DBA, che crea indici o modifica le viste direttamente in un’istanza di test.
In questo modo è sufficiente effettuare una sincronia al contrario per portare le modifiche, da un database reale, al Database Project,[object Object]
Come viene effettuato il deploy Il confronto passa sempre per lo schema model Le differenze vengono calcolate in base agli Schema Model Sulla base delle differenze viene generato lo script di upgrade Nella generazione si tiene conto delle caratteristiche delle varie versioni Schema Model Schema Model Diff
Interfaccia per VsDbCmd.exe Il tool di deploy è un utility a riga di comando chiamato VSDBCMD.exe Il formato “Riga di comando” è eccezionale per includerlo in procedure automatiche di setup e di aggiornamento del db. L’essere ridistribuibile permette di includerlo in programmi di aggiornamento senza spese di sorta Per semplificarne l’uso, un MVP Team System ha sviluppato una interfaccia grafica che permette di specificare le opzioni tramite una GUI molto più userfriendly rispetto alla modalità in riga di comando. Ulteriori dettagli sul mio blog http://blogs.ugidotnet.org/rgm/archive/2009/10/14/una-mini-ui-per-vsdbcmd.exe.aspx
DEMO Deploy
Unit test del database Si possono creare con pochi click unit test di stored procedure, trigger e funzioni ,[object Object]
Il test è scritto in T-SQL
I test sono ripetibili e robusti.,[object Object]
Unit test del database Equiparazione tra database unittesting e code unittesting Strutturazione del test con il classico fourphase test. Dietro le quinte è sempre presente un normale test C# o VisualBasic generato dal designer, che costituisce il wrapper del database test. La classe wrapper può, se necessario, essere modificata per aggiungere funzionalità Wrapper FixtureSetup T-Sql Code TestSetup T-Sql Code Test T-Sql Code TestCleanup T-Sql Code FixtureTeardown T-Sql Code
Unit Test del database - Asserzioni
Data Generation Plan Motore di generazione di dati per test. Altamente configurabile Rispetta chiavi, relazioni e vincoli del database Genera dati in maniera ripetibile Può generare dati sulla base di dati preesistenti su un database di test Espandibile con generatori custom per soddisfare qualsiasi esigenza
DEMO Unittesting
Refactoring Alcune operazioni su db sono molto invasive, come ad esempio il rinominare una colonna di una tabella Grazie alla conoscenza della struttura, in un Database Project questa operazione può essere automatizzata Il Visual Studio mostra tutte le modifiche che verranno effettuate al progetto prima di aggiornare tutti gli oggetti che fanno riferimento all’oggetto modificato È possibile avere una preview dettagliata per capire l’impatto che la modifica avrà nel database I refactoring sono possibili sia per le tabelle, ma anche per altri oggetti, come trigger, storedprocedures, funzioni
Refactoring - Dettagli Tabelle Rename: Rinomina una tabella o colonna MoveToSchema: Sposta una tabella in uno schema differente FullyQualifyName: Qualifica in modo completo i nomi con il nome a tre parti databasename.schema.name View (tutte quelle delle tabelle più) ExpandWildcards: Analizza una stored ed ogni volta che viene trovato il wildcard * in una selezione lo espande. Stored e funzioni Rename: Rinomina una stored funzione o parametro MoveToSchema: Sposta una tabella in uno schema differente ExpandWildcards: 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
Altre caratteristiche	 Visualizzazione dipendenze Permette di visualizzare, partendo da un oggetto radice, le dipendenze che esso ha nel database. Vengono mostrati gli oggetti che dipendono dall’oggetto radice, ma anche gli oggetti da cui l’oggetto radice dipende È possibile gestire le ExtendedProperty dei vari oggetti Supporto dell’integrazione con CLR Possibilità di aggiungere assembly al database project Gestione dei tipi nativi Modella qualsiasi oggetto supportato dal motore di database Certificati Chiavi di sicurezza Utenti Code / Servizi Etc.
Tip and tricks
Mantenere il numero di versione È sempre utile creare e mantenere una tabella con il numero di versione nel database Nel post deploy script si aggiunge uno script per inserire il numero di versione, solitamente si esegue un insert, in modo da conoscere tutte le versioni passate di un database Fondamentale quando avvengono modifiche al db che non possono essere propagate automaticamente dal tool di aggiornamento struttura. In questo caso infatti un predeployment script, può effettuare aggiornamenti specifici, conoscendo il numero attuale di versione. Utile se da codice si vuole permettere di usare una versione vecchia del database senza forzare un aggiornamento. Fondamentale per diagnostica, permette di capire la storia del database in caso di problemi
Ridurre le dimensioni degli script di reference I file di riferimento delle strutture master sono molto grandi e rallentano molto il Visual Studio Dato che sono file normali XML se ne può fare una copia e lasciare in essa solo le funzioni che si vogliono referenziare. Questa operazione può cambiare drasticamente i tempi di apertura del progetto e di compilazione. Necessario ogni qualvolta si faccia riferimento a funzioni base presenti nel database Master
Eseguire programmaticamente un data generation plan Ai fini del testing può essere molto utile eseguire in maniera programmatica un Data Generation Plan È possibile sfruttare msbuild da codice C# o VB per automatizzare l’operazione. In questo modo si può decidere quando e quale piano di generazione eseguire prima di ogni test. Generation Plan Test Data DB Database Project
Integrazione con Team 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 TFS Aggiorna Web  Check In Sincronizza DB Build Server DB Test
Test In memoria	 Grazie al concetto di “variabili” è possibile parametrizzare i sorgenti del progetto In particolare si può utilizzare un RAMDisk e far creare i file di database in memoria Utilizzando questa tecnica per un deploy locale per gli unittesting, si può velocizzare l’esecuzione. Test in memoria
Test transazionali Un test transazionale è un test che non modifica il contenuto del db È possibile rendere ogni test di database transazionale semplicemente aggiungendo codice alla classe wrapper. In questo modo dopo ogni test il contenuto del database viene riportato al contenuto iniziale, ed i test sono più ripetibili Wrapper FixtureSetup Test Setup BeginTransaction Test Execute test code TestCleanup RollbackTransaction FixtureTeardown
DEMO Unittesting

More Related Content

Similar to Database Project in Visual Studio 2010

Similar to Database Project in Visual Studio 2010 (20)

Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOps
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOps
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita felice
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps Serie
 
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
 
Quick intro sul Source Control su SQL Server
Quick intro sul Source Control su SQL ServerQuick intro sul Source Control su SQL Server
Quick intro sul Source Control su SQL Server
 
Database under source control
Database under source controlDatabase under source control
Database under source control
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerDoaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
 
Visual basic: odbc su MySql
Visual basic: odbc su MySqlVisual basic: odbc su MySql
Visual basic: odbc su MySql
 
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control
 
Laravel Framework PHP
Laravel Framework PHPLaravel Framework PHP
Laravel Framework PHP
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 

More from Gian Maria Ricci

More from Gian Maria Ricci (20)

Se non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorandoSe non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorando
 
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure DevopsGestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
 
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a Git
 
Real World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOpsReal World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOps
 
Gestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devopsGestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devops
 
Build and release in code with azure devops pipelines
Build and release in code with azure devops pipelinesBuild and release in code with azure devops pipelines
Build and release in code with azure devops pipelines
 
Azure Pipeline in salsa yaml
Azure Pipeline in salsa yamlAzure Pipeline in salsa yaml
Azure Pipeline in salsa yaml
 
Git gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teamsGit gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teams
 
Distribute your code with NUget and build vNext
Distribute your code with NUget and build vNextDistribute your code with NUget and build vNext
Distribute your code with NUget and build vNext
 
Manage your environment with DSC
Manage your environment with DSCManage your environment with DSC
Manage your environment with DSC
 
Introduction to Application insights
Introduction to Application insightsIntroduction to Application insights
Introduction to Application insights
 
Git branching model
Git branching modelGit branching model
Git branching model
 
Deploy applications with TFS Build
Deploy applications with TFS BuildDeploy applications with TFS Build
Deploy applications with TFS Build
 
TFS - Quale source control
TFS - Quale source controlTFS - Quale source control
TFS - Quale source control
 
Branch model in Git
Branch model in GitBranch model in Git
Branch model in Git
 
Introduction to Visual Studio Online
Introduction to Visual Studio OnlineIntroduction to Visual Studio Online
Introduction to Visual Studio Online
 
Git si o Git No
Git si o Git NoGit si o Git No
Git si o Git No
 
Testing
TestingTesting
Testing
 
Come Organizzare il proprio Team Project
Come Organizzare il proprio Team ProjectCome Organizzare il proprio Team Project
Come Organizzare il proprio Team Project
 
Git Perchè Usarlo
Git Perchè UsarloGit Perchè Usarlo
Git Perchè Usarlo
 

Database Project in Visual Studio 2010

  • 2. Autore Ricci Gian Maria E-mail: ricci.gm@nablasoft.com Blog: http://www.nablasoft.com/alkampfer http://blogs.ugidotnet.org/rgm
  • 3. Alm e database, le problematiche attuali Parte prima
  • 4. Database ed ALM - Problemi
  • 5.
  • 6. Assenza di script per il rollback delle modifiche
  • 7.
  • 8.
  • 9. Si deve generare uno script per ogni possibile versione che si ha in produzione
  • 10.
  • 11. Database Project Visual Studio Database Edition (Team System Developer o Team Suite) introduce il concetto di Database Project Un Database Project è un progetto dedicato per lo sviluppo di database Lo scopo finale è garantire un’integrazione completa dello sviluppo DB nell’ALM
  • 12. Quando introdurre un Database Project nel ciclo produttivo Grazie all’importazione automatica è possibile introdurre un Database Project anche in un progetto iniziato Le molte funzionalità fornite, tra cui il controllo sintattico e dei riferimenti tra oggetti porta immediati vantaggi. E’ comunque necessario che gli sviluppatori abbiano una familiarità con lo strumento, per cui è consigliabile un progetto pilota Operare immediatamente su un progetto relativo ad un database complesso può essere dispersivo Importazione DB Dev DB Project
  • 13. Demo – familiarizzare con i database project
  • 14. Ogni oggetto un file Il paradigma più importante è che ogni oggetto è identificato da un file sorgente In questo modo è possibile confrontare le varie versioni e monitorare l’evoluzione degli oggetti del database nel tempo Il database viene effettivamente “modellato” partendo da dei file sorgente CREATE TABLE [dbo].[Customers] ( [CustomerID] NCHAR (5) NOT NULL, [CompanyName] NVARCHAR (40) NOT NULL, [ContactName] NVARCHAR (30) NULL, [ContactTitle] NVARCHAR (30) NULL, [Address] NVARCHAR (60) NULL, [City] NVARCHAR (15) NULL, … CREATE TABLE [dbo].[Customers] ( [CustomerID] NCHAR (5) NOT NULL, [CompanyName] NVARCHAR (40) NOT NULL, [ContactName] NVARCHAR (30) NULL, [ContactTitle] NVARCHAR (30) NULL, [MainAddress] NVARCHAR (60) NULL, [City] NVARCHAR (15) NULL, …
  • 15. Sviluppo dichiarativo Un database project contiene al suo interno tutte le dichiarazione di creazione degli oggetti Si può passare dalla dichiarazione, alla generazione del database e di nuovo al codice Nel database project sono contenute le definizioni di tutti gli oggetti che compongono un database: tabelle, storedprocedures, funzioni, utenti, assembly CLR, trigger, indici, etc. Tutti questi file sorgente possono essere “compilati” per generare artefatti. Per contro gli sviluppatori necessitano della conoscenza della sintassi T-SQL relativa alla creazione degli oggetti, ma si può sempre usare il Management Studio e poi portare il codice in Visual Studio
  • 16.
  • 17.
  • 19. Analisi di codice Procedura analoga a quella disponibile sui normali progetti C# o VB Permette di analizzare il Database Project al fine di evidenziare pattern di codice critici Suddivise in tre distinte categorie: Naming, Performance e Design attivabili distintamente Possibilità di attivare/disattivare non solo le categorie ma i singoli warning Mostra punti con possibili problemi nel codice.
  • 20. Controllo di versione Visualizzando la storia di un file si ottiene la storia del corrispondente oggetto del DB Si può effettuare un confronto tra le versioni per vedere come un oggetto è cambiato nel tempo Si può capire chi e quando ha scritto una particolare porzione di codice e perché Si può effettuare un rollback annullando le modifiche
  • 21. DEMO – compilazione e Controllo di codice sorgente
  • 22. Deploy Il database logico può essere confrontato con un database fisico per generare uno script di aggiornamento Il confronto non necessita di avere una istanza “viva” del database di sviluppo Confronto DB Logico DB Fisico
  • 23.
  • 24.
  • 25. Un’altra situazione è quella in cui un database di test viene ottimizzato da un DBA, che crea indici o modifica le viste direttamente in un’istanza di test.
  • 26.
  • 27. Come viene effettuato il deploy Il confronto passa sempre per lo schema model Le differenze vengono calcolate in base agli Schema Model Sulla base delle differenze viene generato lo script di upgrade Nella generazione si tiene conto delle caratteristiche delle varie versioni Schema Model Schema Model Diff
  • 28. Interfaccia per VsDbCmd.exe Il tool di deploy è un utility a riga di comando chiamato VSDBCMD.exe Il formato “Riga di comando” è eccezionale per includerlo in procedure automatiche di setup e di aggiornamento del db. L’essere ridistribuibile permette di includerlo in programmi di aggiornamento senza spese di sorta Per semplificarne l’uso, un MVP Team System ha sviluppato una interfaccia grafica che permette di specificare le opzioni tramite una GUI molto più userfriendly rispetto alla modalità in riga di comando. Ulteriori dettagli sul mio blog http://blogs.ugidotnet.org/rgm/archive/2009/10/14/una-mini-ui-per-vsdbcmd.exe.aspx
  • 30.
  • 31. Il test è scritto in T-SQL
  • 32.
  • 33. Unit test del database Equiparazione tra database unittesting e code unittesting Strutturazione del test con il classico fourphase test. Dietro le quinte è sempre presente un normale test C# o VisualBasic generato dal designer, che costituisce il wrapper del database test. La classe wrapper può, se necessario, essere modificata per aggiungere funzionalità Wrapper FixtureSetup T-Sql Code TestSetup T-Sql Code Test T-Sql Code TestCleanup T-Sql Code FixtureTeardown T-Sql Code
  • 34. Unit Test del database - Asserzioni
  • 35. Data Generation Plan Motore di generazione di dati per test. Altamente configurabile Rispetta chiavi, relazioni e vincoli del database Genera dati in maniera ripetibile Può generare dati sulla base di dati preesistenti su un database di test Espandibile con generatori custom per soddisfare qualsiasi esigenza
  • 37. Refactoring Alcune operazioni su db sono molto invasive, come ad esempio il rinominare una colonna di una tabella Grazie alla conoscenza della struttura, in un Database Project questa operazione può essere automatizzata Il Visual Studio mostra tutte le modifiche che verranno effettuate al progetto prima di aggiornare tutti gli oggetti che fanno riferimento all’oggetto modificato È possibile avere una preview dettagliata per capire l’impatto che la modifica avrà nel database I refactoring sono possibili sia per le tabelle, ma anche per altri oggetti, come trigger, storedprocedures, funzioni
  • 38. Refactoring - Dettagli Tabelle Rename: Rinomina una tabella o colonna MoveToSchema: Sposta una tabella in uno schema differente FullyQualifyName: Qualifica in modo completo i nomi con il nome a tre parti databasename.schema.name View (tutte quelle delle tabelle più) ExpandWildcards: Analizza una stored ed ogni volta che viene trovato il wildcard * in una selezione lo espande. Stored e funzioni Rename: Rinomina una stored funzione o parametro MoveToSchema: Sposta una tabella in uno schema differente ExpandWildcards: 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
  • 39. Altre caratteristiche Visualizzazione dipendenze Permette di visualizzare, partendo da un oggetto radice, le dipendenze che esso ha nel database. Vengono mostrati gli oggetti che dipendono dall’oggetto radice, ma anche gli oggetti da cui l’oggetto radice dipende È possibile gestire le ExtendedProperty dei vari oggetti Supporto dell’integrazione con CLR Possibilità di aggiungere assembly al database project Gestione dei tipi nativi Modella qualsiasi oggetto supportato dal motore di database Certificati Chiavi di sicurezza Utenti Code / Servizi Etc.
  • 41. Mantenere il numero di versione È sempre utile creare e mantenere una tabella con il numero di versione nel database Nel post deploy script si aggiunge uno script per inserire il numero di versione, solitamente si esegue un insert, in modo da conoscere tutte le versioni passate di un database Fondamentale quando avvengono modifiche al db che non possono essere propagate automaticamente dal tool di aggiornamento struttura. In questo caso infatti un predeployment script, può effettuare aggiornamenti specifici, conoscendo il numero attuale di versione. Utile se da codice si vuole permettere di usare una versione vecchia del database senza forzare un aggiornamento. Fondamentale per diagnostica, permette di capire la storia del database in caso di problemi
  • 42. Ridurre le dimensioni degli script di reference I file di riferimento delle strutture master sono molto grandi e rallentano molto il Visual Studio Dato che sono file normali XML se ne può fare una copia e lasciare in essa solo le funzioni che si vogliono referenziare. Questa operazione può cambiare drasticamente i tempi di apertura del progetto e di compilazione. Necessario ogni qualvolta si faccia riferimento a funzioni base presenti nel database Master
  • 43. Eseguire programmaticamente un data generation plan Ai fini del testing può essere molto utile eseguire in maniera programmatica un Data Generation Plan È possibile sfruttare msbuild da codice C# o VB per automatizzare l’operazione. In questo modo si può decidere quando e quale piano di generazione eseguire prima di ogni test. Generation Plan Test Data DB Database Project
  • 44. Integrazione con Team 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 TFS Aggiorna Web Check In Sincronizza DB Build Server DB Test
  • 45. Test In memoria Grazie al concetto di “variabili” è possibile parametrizzare i sorgenti del progetto In particolare si può utilizzare un RAMDisk e far creare i file di database in memoria Utilizzando questa tecnica per un deploy locale per gli unittesting, si può velocizzare l’esecuzione. Test in memoria
  • 46. Test transazionali Un test transazionale è un test che non modifica il contenuto del db È possibile rendere ogni test di database transazionale semplicemente aggiungendo codice alla classe wrapper. In questo modo dopo ogni test il contenuto del database viene riportato al contenuto iniziale, ed i test sono più ripetibili Wrapper FixtureSetup Test Setup BeginTransaction Test Execute test code TestCleanup RollbackTransaction FixtureTeardown
  • 48. Estendibilità Il Visual Studio database edition può essere esteso in vari punti http://msdn.microsoft.com/en-us/library/aa833285(VS.100).aspx Condizioni di test custom per gli unit test su oggetti di database Regole custom per l’analisi di codice Refactoring custom, sia definendo nuovi refactoring per tipi di oggetti esistenti, sia definendo refactoring per tipi che di base non supportano refactoring. Nuovi generatori dati.
  • 49. Database Supportati Visual Studio 2008 Database Edition GDR2 Sql Server 2000 Sql Server 2005 Sql Server 2008 Visual Studio 2010 Database Edition Aggiunto il supporto per Oracle tramite un plugin esterno chiamato TeamFuze: http://www.teamfuze.net/index.jspa IBM ha annunciato il supporto a DB2, ma attualmente non c’è un link pubblico per poterlo provare. L’intero modello della struttura di un database project è estendibile, è quindi possibile virtualmente fornire supporto a qualsiasi tipologia di database relazionale.
  • 50. Data Dude 2010 Alcune funzionalità sono presenti direttamente nella versione Professional Per le team build non è più necessario installare la versione completa DatabaseEdition per compilare progetti di database. Questo evita di usare una licenza per ogni macchina di build. Maggiore estendibilità La nuova versione dei Database Project presenta alcune migliorie ed innovazioni rispetto la versione attuale Intellisense: nell’editor del codice T-SQL è presente l’integrazione dell’intellisense dell’editor di Sql Server 2008 R2 T-Sqldebuger: integrazione del debugger di Sql Server 2008R2 all’interno di Visual Studio 2010
  • 51. Data Dude 2010 - Versioni Visual Studio 2010 Premium/Ultimate Database Unit Testing* Command Line Deploy Schema Compare Data Compare Refactoring Data Generation* Static Code Analysis* Project System IntelliSense Build Deploy Build Integration Visual Studio 2010 Professional