![Page 1: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/1.jpg)
Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010
Дмитрий Андреев[email protected]
![Page 2: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/2.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 3: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/3.jpg)
Очень важные вопросы
Где находится «истинная» схема?Эксплуатационная база?Что насчет исправлений?Что будем делать с следующей версией?
Как вести версии базы данных?Что делать с тестовыми данными?Как проверить логику базы данных?Какие средства использовать для сравнения схем?Как развертывать БД и как делать апгрейд?
![Page 4: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/4.jpg)
4
Visual Studio 2010
ПроблемаГде «истинная» схема?
Как вести версии?
Как проводить тестирование?
Как управлять изменениями?
РешениеГде угодно. Схема это исходный проект.Так же как и в привычных программных проектах.Генерация тестовых данных. Юнит тестирование баз данных.Рефакторинг, сравнение схем.
![Page 5: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/5.jpg)
Правда о «истинной схеме»
Эксплуатационная база – единственная верная схема соответствующая версии вашей эксплуатационной системыВозможны исправления для этой базы.Разработка будущей версии ведется безотносительно к эксплуатационной версииПатч для эксплуатационной версии это возникновение:
Новой эксплуатационной версии базыНовой версии эксплуатационной системы
Патч+«Старая версия БД»=релиз билд
![Page 6: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/6.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 7: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/7.jpg)
Проектная модель
Проект базы данных (Visual Studio Project) отражает эволюционирующую схемуПроект содержит DDL скрипты (*.SQL файлы)Контроль версий ведется на уровне исходных текстов этих скриптовКлюч к успеху:
Автоматическая генерация тестовых данныхЮнит тестирование
![Page 8: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/8.jpg)
Жизненный цикл
SQL Server
Database
DatabaseProject
Template
SQL Script
DatabaseProject
Импорт схемы
Создание нового проекта
Реверс сущ
ествую
щего
скрипта
![Page 9: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/9.jpg)
Жизненный цикл: классика ALM
DatabaseProject
Edit
Refactor
Compare
Data Gen
Test
Compare
BuildDeploy
![Page 10: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/10.jpg)
Проблема с контролем версий
CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
class AuctionApplication( int id; void MethodA();)
class AuctionApplication( int id; void MethodA();)
DatabaseDatabase
class AuctionApplication( int id; void MethodA(); void MethodB();)
class AuctionApplication( int id; void MethodA(); void MethodB();)
class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)
class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)
Revision History
AppApp
V 1 V 2 V 3
ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)
ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)
ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)
ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)
![Page 11: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/11.jpg)
Ручное ведение версий-- version 1 Add table dbo.AuctionIF OBJECT_ID (N'dbo.Auction', N'U') IS NULLBEGINCREATE TABLE dbo.Auction(
id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)END-- version 2 Add PK Au_PKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_PK' AND type = 'PK')BEGIN
ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)END-- version 3 Add UC Au_SKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_SK' AND type = ‘UQ')BEGIN
ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)END
-- version 1 Add table dbo.AuctionIF OBJECT_ID (N'dbo.Auction', N'U') IS NULLBEGINCREATE TABLE dbo.Auction(
id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)END-- version 2 Add PK Au_PKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_PK' AND type = 'PK')BEGIN
ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_PK PRIMARY KEY (id)END-- version 3 Add UC Au_SKIF NOT EXISTS (SELECT * FROM sys.key_constraints WHERE name = 'Au_SK' AND type = ‘UQ')BEGIN
ALTER TABLE Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)END
![Page 12: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/12.jpg)
Верный подход к ведению версий
CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
LogicalDatabaseLogical
Database
class AuctionApplication( int id; void MethodA();)
class AuctionApplication( int id; void MethodA();)
class AuctionApplication( int id; void MethodA(); void MethodB();)
class AuctionApplication( int id; void MethodA(); void MethodB();)
class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)
class AuctionApplication( int id; string cacheTitle; void MethodA(); void MethodB();)
Revision History
AppApp
V 1 V 2 V 3
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)
![Page 13: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/13.jpg)
Инкрементальное Развертывание
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL, start DATETIME NULL, len INT NULL)
Эксплуатируемая система
Эксплуатируемая система
Логическая база
Логическая база
Revision HistoryV 1 V 2 V 3
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)
CREATE TABLE dbo.Auction( id INT NOT NULL PRIMARY KEY, name VARCHAR(25) NOT NULL UNIQUE, start DATETIME NULL, len INT NULL)
Новая системаНовая
система ALTER TABLE dbo.Auction WITH CHECK ADD CONSTRAINT Au_SK UNIQUE (name)
![Page 14: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/14.jpg)
Демонстрация
![Page 15: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/15.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 16: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/16.jpg)
Тестовые данные и Q&A
Почему бы не использовать эксплуатационные данные?
Они могут быть не верны!Не позволят протестировать «острые углы».Не позволят проверить изменения в схемах данных!
Какие тестовые данные необходимы?Случайные!Детерминируемые.Распределенные соответствующим образом
Количественно (сто первичных ключей -> десять тысяч дочерних записей)Качественно (длина строк, границы числовых значений и дат,…)
![Page 17: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/17.jpg)
Тестовые данные и Q&A
Какие отличия необходимы для тестовых данных
ФункциональныеНагрузочные
ВерсионированиеНеобходимы разные тестовые данные и тесты для разных схемНеобходимы даже разные тестовые планы для одной и той же схемы
![Page 18: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/18.jpg)
Генерация тестовых данных
Основные инструментыГенерация данных для таблицКоличество записей
Генераторы для различных типов полей
String, RegEx, data boundМожно написать свой собственный генераторТонкие настройки генераторов
![Page 19: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/19.jpg)
Демонстрация
![Page 20: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/20.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 21: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/21.jpg)
Юнит тестирование
Автоматическая генерация юнит-тестов для
Хранимых процедур, Функций, Триггеров
Валидация результатов тестов (asserts)T-SQL Server based
RAISEERROR
Ожидаемые значения Не пустые результатыКоличество записейВремя выполнения
Предварительные и пост скрипты
![Page 22: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/22.jpg)
Юнит тестирование
Автоматизированное развертывание
Перед запуском тестов будет сформирована БД
По соответствующему плану генерации тестовых данных будет создана основа для проверки
![Page 23: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/23.jpg)
Демонстрация
![Page 24: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/24.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 25: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/25.jpg)
Управление изменениями
РефакторингСравнение схемСравнение данных
![Page 26: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/26.jpg)
Демонстрация
![Page 27: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/27.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 28: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/28.jpg)
Развертывание
Стандартный подходГенерация скриптов изменений
Через сравнение схемы
Взаимодействие с администратором БД
Новый подходПредставляем: Data Tier Application Project System
![Page 29: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/29.jpg)
Database Project vs. Data Tier Project
Data-tier Application Project V1
Visual Studio
SQL Server 2008 R2
Build
.dacpac
Стандартный проект БД
Visual Studio
.dbschema.sql
SQL Server 2005, 2008, 2008 R2
Build
DeployDeploy
Генерация скриптов
![Page 30: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/30.jpg)
Database Project vs. Data Tier Project
Стандартный проект БД Data-tier Application Projects V1
Целевые приложения
Бизнес критические системы Приложения уровня подразделения
Поддержка БД SQL 2005, 2008, 2010 и БД третьих производителей
SQL 2008 R2; планируется поддержка SQL 2008.
Сложность схемы Не ограниченная До тысячи обьектов
Апгрейд(schema + data)
Проект генерирует .sql скрипты которые обновляют схему. Данные остаются на месте или подвергаются миграционным операциям в зависимости от сценариев апгрейда.
.sql скриптов нет. Единый пакет для развертывания или апгрейда содержащий всю необходимую информацию.Данные сохраняются в автоматическом режиме.
Типы поддерживаемых SQL обьектов
Полная поддержка Частичная поддержка
IntelliSense, Debugging,T-SQL Editor
Одинаковые возможности
![Page 31: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/31.jpg)
31
DBA
SQL Server Management Studio
9
Managed Instances
HR
ControlPoint
SALE
S
Разработка Развертывание MANAGE
Visual Studio 2010
Разработчик
FinAppProd DB
DBA
SQL Server Management Studio
FinAppDev DB1
Reverse Engineer
DAC
2
Create policies
3
Deploy /
Upgrade DAC
4
.dacpac
Compile
+ Build
5
Hand-off to DBA
6
Deploy /
Upgrade DAC
7
Manage, Register, Uninstall, Extract,
Upgrade DAC
8
![Page 32: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/32.jpg)
Демонстрация
![Page 33: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/33.jpg)
СодержаниеВведениеПроект БД и жизненный цикл БДГенерация тестовых данныхЮнит-тестированиеУправление изменениямиРазвертываниеЗаключение
![Page 34: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/34.jpg)
Заключение
Разработка БД может быть полностью интегрирована в стандартный процесс ALMИнструментальные средства позволяют легко создавать объекты БД благодаря IntelliSense, встроенному отладчикуГибкие варианты развертывания могут снизить затраты на управление эксплуатационными БД
![Page 35: Разработка, тестирование и развертывание баз данных в Visual Studio Team System 2010](https://reader036.vdocuments.net/reader036/viewer/2022062308/558c94fed8b42a13258b45ed/html5/thumbnails/35.jpg)
Вопросы?