Пошаговое руководство. Создание и выполнение плана создания данных
В этом пошаговом руководстве создается план создания данных и выполняется для заполнения тестовой базы данных случайным образом сгенерированными данными. Сначала создается проект базы данных и развертывается в изолированной тестовой базе данных. Затем эту изолированную базу данных можно использовать для тестирования создания данных, не затрагивая рабочие данные или базу данных.
Обязательные компоненты
Для работы с этим пошаговым руководством потребуются следующие установленные продукты.
Visual Studio Premium
SQL Server 2008 или SQL Server 2005
Создание проекта базы данных
Сначала создается проект базы данных, куда импортируется схема из скрипта.
Примечание
В среде на основе рабочих групп можно извлечь имеющийся проект из системы управления версиями для работы с проектом базы данных.Дополнительные сведения см. в разделе Начало командной разработки базы данных.
Создание скрипта базы данных
В меню Файл выберите Создать и щелкните Файл.
Откроется диалоговое окно Новый файл.
В списке Категории щелкните элемент Общие, если он еще не выделен.
В списке Шаблоны выберите SQL-файл, а затем нажмите кнопку Открыть.
Откроется редактор Transact-SQL.
Скопируйте следующий код Transact-SQL и вставьте его в редактор Transact-SQL.
PRINT N'Creating dbo.Customer...'; GO CREATE TABLE [dbo].[Customer] ( [CustomerId] UNIQUEIDENTIFIER NOT NULL, [UserId] UNIQUEIDENTIFIER NOT NULL, [UserName] VARCHAR (256) NOT NULL ); GO PRINT N'Creating dbo.Menu...'; GO CREATE TABLE [dbo].[Menu] ( [MenuId] UNIQUEIDENTIFIER NOT NULL, [RestaurantId] UNIQUEIDENTIFIER NOT NULL, [StartDate] DATETIME NOT NULL, [EndDate] DATETIME NOT NULL, [MenuType] VARCHAR (50) NULL ); GO PRINT N'Creating dbo.MenuItem...'; GO CREATE TABLE [dbo].[MenuItem] ( [MenuItemId] UNIQUEIDENTIFIER NOT NULL, [MenuId] UNIQUEIDENTIFIER NOT NULL, [Name] VARCHAR (128) NULL, [Description] VARCHAR (512) NULL, [ImageLocation] VARCHAR (MAX) NULL, [Price] MONEY NULL, [PreparationTime] INT NULL ); GO PRINT N'Creating dbo.Order...'; GO CREATE TABLE [dbo].[Order] ( [OrderId] UNIQUEIDENTIFIER NOT NULL, [SubmittedDate] SMALLDATETIME NOT NULL, [CustomerID] UNIQUEIDENTIFIER NOT NULL, [Total] MONEY NOT NULL, [ContactTelephone] CHAR (20) NULL, [PostalCode] CHAR (10) NULL, [State] CHAR (2) NULL, [StreetAddress] VARCHAR (75) NULL, [City] VARCHAR (25) NULL ); GO PRINT N'Creating dbo.OrderDetail...'; GO CREATE TABLE [dbo].[OrderDetail] ( [OrderDetailId] UNIQUEIDENTIFIER NOT NULL, [OrderId] UNIQUEIDENTIFIER NOT NULL, [RestaurantId] UNIQUEIDENTIFIER NOT NULL, [MenuItemId] UNIQUEIDENTIFIER NOT NULL, [DeliveryId] UNIQUEIDENTIFIER NOT NULL, [Quantity] INT NOT NULL, [UnitCost] MONEY NOT NULL, [Status] NCHAR (20) NOT NULL, [StatusUpdatedTime] SMALLDATETIME NOT NULL, [WorkflowId] UNIQUEIDENTIFIER NOT NULL, [ETA] SMALLDATETIME NULL ); GO PRINT N'Creating dbo.OrderPayment...'; GO CREATE TABLE [dbo].[OrderPayment] ( [PaymentID] UNIQUEIDENTIFIER NOT NULL, [OrderID] UNIQUEIDENTIFIER NOT NULL, [CreditCardNumber] CHAR (4) NULL, [NameOnCard] VARCHAR (75) NULL, [Address] VARCHAR (50) NULL, [Country] VARCHAR (50) NULL, [City] VARCHAR (50) NULL, [State] VARCHAR (50) NULL, [PostalCode] CHAR (10) NULL, [ExpirationDate] SMALLDATETIME NULL, [CreditCardType] VARCHAR (50) NULL ); GO PRINT N'Creating dbo.Restaurant...'; GO CREATE TABLE [dbo].[Restaurant] ( [RestaurantId] UNIQUEIDENTIFIER NOT NULL, [Name] VARCHAR (256) NULL, [Description] VARCHAR (1024) NULL, [RestaurantCategoryId] UNIQUEIDENTIFIER NOT NULL, [LogoImageLocation] NVARCHAR (MAX) NULL, [SmallLogoImageLocation] NVARCHAR (MAX) NULL, [BannerImageLocation] NVARCHAR (MAX) NULL, [MainImageLocation] NVARCHAR (MAX) NULL, [BackgroundLocation] NVARCHAR (MAX) NULL, [PostalCode] VARCHAR (128) NOT NULL, [StreetAddress] VARCHAR (256) NULL, [City] VARCHAR (512) NULL, [State] VARCHAR (256) NULL ); GO PRINT N'Creating dbo.RestaurantCategory...'; GO CREATE TABLE [dbo].[RestaurantCategory] ( [RestaurantCategoryId] UNIQUEIDENTIFIER NOT NULL, [Description] VARCHAR (255) NOT NULL ); GO PRINT N'Creating dbo.Default_Menu_StartDate...'; GO ALTER TABLE [dbo].[Menu] ADD CONSTRAINT [Default_Menu_StartDate] DEFAULT GETDATE() FOR [StartDate]; GO PRINT N'Creating dbo.PK_Customer...'; GO ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED ([CustomerId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_Menu...'; GO ALTER TABLE [dbo].[Menu] ADD CONSTRAINT [PK_Menu] PRIMARY KEY CLUSTERED ([MenuId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_MenuItem...'; GO ALTER TABLE [dbo].[MenuItem] ADD CONSTRAINT [PK_MenuItem] PRIMARY KEY CLUSTERED ([MenuItemId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_Order2...'; GO ALTER TABLE [dbo].[Order] ADD CONSTRAINT [PK_Order2] PRIMARY KEY CLUSTERED ([OrderId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_OrderDetail...'; GO ALTER TABLE [dbo].[OrderDetail] ADD CONSTRAINT [PK_OrderDetail] PRIMARY KEY CLUSTERED ([OrderDetailId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_OrderPayment...'; GO ALTER TABLE [dbo].[OrderPayment] ADD CONSTRAINT [PK_OrderPayment] PRIMARY KEY CLUSTERED ([PaymentID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_Restaurant...'; GO ALTER TABLE [dbo].[Restaurant] ADD CONSTRAINT [PK_Restaurant] PRIMARY KEY CLUSTERED ([RestaurantId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.PK_RestaurantCategory...'; GO ALTER TABLE [dbo].[RestaurantCategory] ADD CONSTRAINT [PK_RestaurantCategory] PRIMARY KEY CLUSTERED ([RestaurantCategoryId] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating dbo.FK_Menu_Restaurant...'; GO ALTER TABLE [dbo].[Menu] ADD CONSTRAINT [FK_Menu_Restaurant] FOREIGN KEY ([RestaurantId]) REFERENCES [dbo].[Restaurant] ([RestaurantId]) ON DELETE NO ACTION ON UPDATE NO ACTION; GO PRINT N'Creating dbo.FK_MenuItem_Menu...'; GO ALTER TABLE [dbo].[MenuItem] ADD CONSTRAINT [FK_MenuItem_Menu] FOREIGN KEY ([MenuId]) REFERENCES [dbo].[Menu] ([MenuId]) ON DELETE NO ACTION ON UPDATE NO ACTION; GO PRINT N'Creating dbo.FK_Order2_Customer...'; GO ALTER TABLE [dbo].[Order] ADD CONSTRAINT [FK_Order2_Customer] FOREIGN KEY ([CustomerID]) REFERENCES [dbo].[Customer] ([CustomerId]) ON DELETE NO ACTION ON UPDATE NO ACTION; GO PRINT N'Creating dbo.FK_OrderDetail_MenuItem...'; GO ALTER TABLE [dbo].[OrderDetail] ADD CONSTRAINT [FK_OrderDetail_MenuItem] FOREIGN KEY ([MenuItemId]) REFERENCES [dbo].[MenuItem] ([MenuItemId]) ON DELETE NO ACTION ON UPDATE NO ACTION; GO PRINT N'Creating dbo.FK_OrderDetail_Order2...'; GO ALTER TABLE [dbo].[OrderDetail] ADD CONSTRAINT [FK_OrderDetail_Order2] FOREIGN KEY ([OrderId]) REFERENCES [dbo].[Order] ([OrderId]) ON DELETE CASCADE ON UPDATE CASCADE; GO PRINT N'Creating dbo.FK_OrderDetail_Restaurant...'; GO ALTER TABLE [dbo].[OrderDetail] ADD CONSTRAINT [FK_OrderDetail_Restaurant] FOREIGN KEY ([RestaurantId]) REFERENCES [dbo].[Restaurant] ([RestaurantId]) ON DELETE NO ACTION ON UPDATE CASCADE; GO PRINT N'Creating dbo.FK_OrderPayment_Order...'; GO ALTER TABLE [dbo].[OrderPayment] ADD CONSTRAINT [FK_OrderPayment_Order] FOREIGN KEY ([OrderID]) REFERENCES [dbo].[Order] ([OrderId]) ON DELETE CASCADE ON UPDATE CASCADE; GO PRINT N'Creating dbo.FK_Restaurant_RestaurantCategory...'; GO ALTER TABLE [dbo].[Restaurant] ADD CONSTRAINT [FK_Restaurant_RestaurantCategory] FOREIGN KEY ([RestaurantCategoryId]) REFERENCES [dbo].[RestaurantCategory] ([RestaurantCategoryId]) ON DELETE NO ACTION ON UPDATE NO ACTION; GO PRINT N'Creating dbo.CK_Menu_EndDate...'; GO ALTER TABLE [dbo].[Menu] ADD CONSTRAINT [CK_Menu_EndDate] CHECK (([EndDate] > '01/01/2000') AND ([EndDate] >= [StartDate])); GO PRINT N'Creating dbo.CK_Menu_StartDate...'; GO ALTER TABLE [dbo].[Menu] ADD CONSTRAINT [CK_Menu_StartDate] CHECK ([StartDate] > '01/01/2000'); GO PRINT N'Creating AutoCreatedLocal...'; GO CREATE ROUTE [AutoCreatedLocal] AUTHORIZATION [dbo] WITH ADDRESS = N'LOCAL'; GO PRINT N'Creating dbo.Menu.EndDate.ExtProp_Menu_EndDate_Description...'; GO EXECUTE sp_addextendedproperty @name = N'ExtProp_Menu_EndDate_Description', @value = 'Date the menu expired. Must be > 01/01/2000 and must be after the StartDate', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Menu', @level2type = N'COLUMN', @level2name = N'EndDate'; GO
В меню Файл выберите пункт Сохранить SqlQuery_1.sql как.
Откроется диалоговое окно Сохранить файл как.
В поле Имя объекта введите SampleImportScript.sql.
Этот файл можно сохранить в любой папке на компьютере. Запишите расположение файла, чтобы использовать его в следующей процедуре.
Нажмите кнопку Сохранить.
В меню Файл выберите команду Закрыть решение.
Затем создается проект базы данных, куда импортируется схема из только что созданного скрипта.
Создание проекта базы данных
В меню Файл последовательно выберите пункты Создать и Проект.
Отобразится диалоговое окно Новый проект.
В области Установленные шаблоны разверните узел База данных и щелкните SQL Server.
Примечание
Если вы используете Visual Studio Professional, зайдите в Установленные шаблоны, последовательно раскройте узлы База данных и SQL Server и щелкните Дополнительно.
В списке шаблонов выберите Проект базы данных SQL Server 2008.
Примечание
Если необходимо выполнить развертывание не на SQL Server 2008, а на другой сервер, щелкните шаблон, соответствующий целевой среде развертывания.
В поле Имя введите WalkthroughDataGenerator и нажмите кнопку ОК.
Будет создано решение, содержащее пустой проект WalkthroughDataGenerator. Это проект базы данных. Более никто не имеет доступа к проекту базы данных, когда вы над ним работаете.
В обозревателе решений щелкните WalkthroughDataGenerator.
В меню Проект выберите команду Импортировать скрипт.
В диалоговом окне Импорт файла скрипта SQL нажмите кнопку Далее.
В поле Имя файла введите путь и имя файла скрипта, созданного ранее в ходе выполнения этого пошагового руководства.
Как вариант, также можно нажать кнопку Обзор, чтобы найти файл скрипта.
Нажмите кнопку Готово.
Скрипт, содержащий определение структуры базы данных, импортирован.
По завершении импорта схемы нажмите кнопку Готово.
Схема базы данных импортирована в проект базы данных. Элементы проекта, соответствующие объектам в базе данных, появляются в проекте базы данных в Обозревателе решений and Представлении схемы. Далее вы настроите, построите и развернете проект в локальной среде разработки.
Развертывание в изолированной среде разработки
Далее вы развернете проект в новой базе данных. Данная процедура позволяет создать базу данных, которая включает импортированную схему, но не содержит данных. Эта база данных представляет собой изолированную среду разработки (или песочницу), в которой можно разрабатывать и тестировать базу данных.
Построение проекта базы данных
В Обозревателе решений щелкните проект базы данных WalkthroughDataGenerator.
В меню Проект выберите команду Свойства WalkthroughDataGenerator.
На экран будут выведены свойства проекта.
Перейдите на вкладку Развертывание.
В списке Действие развертывания щелкните Создать скрипт развертывания (SQL) и развернуть в базу данных.
В окне Параметры конечной базы данных щелкните Изменить, чтобы отобразить диалоговое окно Свойства подключения.
Задайте свойства подключения для базы данных, в которой предполагаете работать, и щелкните ОК.
В поле Конечное подключение будет помещена необходимая строка подключения.
Предупреждение
Вам необходимо создать новую базу данных на тестовом сервере, сервере разработки или на локальном компьютере.Рабочий сервер использовать не следует.
В текстовом поле Имя конечной базы данных введите DinnerNowDataGenerator.
В меню Файл выберите команду Сохранить все.
В меню Построение выберите Построить решение.
При построении проекта следует убедиться, что файл .dbschema может создаваться без ошибок. Состояние построения отображается в окне Выходные данные, в последней строке которого вы увидите сообщение Построение: успешно и без изменений: 1.
Развертывание проекта базы данных
В Обозревателе решений щелкните проект базы данных WalkthroughDataGenerator.
В меню Построение щелкните Развернуть WalkthroughDataGenerator. Можно также щелкнуть правой кнопкой мыши проект в обозревателе решений и выбрать команду Развернуть.
Предупреждение
Вам необходимо снова выполнить это развертывание на тестовом сервере, сервере разработки или на локальном компьютере.Рабочий сервер использовать не следует.
Проект базы данных развертывается в новой базе данных. Вы увидите состояние развертывания в окне Выходные данные, в последней строке которого будет выведено сообщение Развертывание: успешно: 1.
Примечание
Если окно Выходные данные не появится, откройте меню Вид и выберите команду Выходные данные.
Создание плана создания данных
Далее вы создадите план создания данных. План создания данных содержит сведения о том, какие таблицы и столбцы требуется заполнить данными. Дополнительные сведения см. в разделе Практическое руководство. Создание плана создания данных.
Создание плана создания данных
В Обозревателе решений щелкните правой кнопкой узел Планы создания данных, выберите пункт Добавить и щелкните План создания данных.
Откроется диалоговое окно Добавление нового элемента.
В текстовом поле Имя введите PartialDGenPlan.dgen.
Щелкните Добавить.
Будет создан создания данных. Отобразится план создания данных и окно Предварительный просмотр созданных данных. Окно плана создания данных будет поделено на две области по горизонтали. В верхней области указываются таблицы, определенные в схеме проекта базы данных. В нижней области отображаются данные столбцов таблицы, выделенной в верхней области.
Примечание
Если окно Предварительный просмотр созданных данных не открыто, его можно открыть, выбрав в меню Данные команду Генератор данных, а затем выбрав Просмотр создания данных.По умолчанию окно Предварительный просмотр созданных данных закреплено и добавлено в виде вкладки в нижней области окна плана создания данных.Чтобы развернуть представление, щелкните окно и выберите команду Закрепить как вкладку в меню Окно.Можно также щелкнуть правой кнопкой мыши в заголовке окна и выбрать пункт Закрепить как вкладку.
В конструкторе PartialDGenPlan.dgen снимите флажки для всех таблиц.
Примечание
Можно установить или снять флажки для всех таблиц с помощью команд Включить все таблицы в генерацию данных и Исключить все таблицы из генерации данных.Для доступа к этим командам можно щелкнуть правой кнопкой мыши любую строку в окне плана создания данных или выбрать в меню Данные команду Генератор данных.
В конструкторе PartialDGenPlan.dgen установите флажок для таблицы dbo.Restaurant.
Флажок для таблицы dbo.RestaurantCategory устанавливается автоматически. Так как таблица Restaurant имеет внешний ключ для таблицы RestaurantCategory, необходимо ввести данные в другой таблице, чтобы заполнить данными таблицу Restaurant. Дополнительные сведения см. в разделе Практическое руководство. Указание таблиц для создания данных.
В меню Файл выберите команду Сохранить все.
Задание сведений о создания данных
Далее необходимо задать сведения о том, как столбцы должны заполняться данными. Дополнительные сведения см. в разделе Задание сведений о создании данных для столбца.
Задание сведений о создания данных
Установите следующим образом количество создаваемых строк данных.
В конструкторе PartialDGenPlan.dgen щелкните строку таблицы Restaurant.
Щелкните столбец Связанная таблица и воспользуйтесь направленной вниз стрелкой для выбора таблицы RestaurantCategories.
Щелкните столбец Отношение к связанной таблице и введите «10:1».
В соответствии с этими параметрами, для каждой созданной категории будет создаваться 10 ресторанов. Дополнительные сведения см. в разделе Практическое руководство. Задание количества создаваемых строк.
Установите следующим образом количество создаваемых строк данных NULL.
В конструкторе PartialDGenPlan.dgen щелкните строку таблицы Restaurant.
В области сведений о столбцах щелкните строку для столбца Description.
В окне Свойства задайте для свойства «Доля Null» значение 10.
В соответствии с этими параметрами, 10% данных, создаваемых для столбца Description, будут содержать значение NULL. Можно открыть окно Предварительный просмотр созданных данных и убедиться, что столбец содержит некоторое количество значений NULL.
Задайте следующим образом текст создаваемых данных.
В конструкторе PartialDGenPlan.dgen щелкните строку таблицы Restaurant.
В области сведений о столбцах щелкните строку для столбца Name.
Щелкните столбец Generator и, воспользовавшись направленной вниз стрелкой, укажите генератор данных RegularExpression.
В окне Свойства задайте для свойства «Выражение» следующее значение:
(Delicious|Golden|Family|Sweet|Dancing|Magic|Thai) (Ginger|Duck|Flower|Potato|Pumpkin|Kitchen|Grill|Onion|Corral)
Данные, создаваемые в столбце ProductName, будут содержать имена из двух слов. Можно открыть окно Предварительный просмотр созданных данных и убедиться, что столбец Name содержит выбранные случайным образом названия ресторанов. Дополнительные сведения см. в разделе Генератор регулярных выражений.
В меню Файл выберите команду Сохранить все.
Выполнение плана создания данных
В заключение вы выполните план создания данных. После создания данных можно использовать другое средство для входа в базу данных и проверки новых данных.
Выполнение плана создания данных
В обозревателе решений дважды щелкните PartialDGenPlan.dgen.
Примечание
План создания данных должен быть открыт.Если план не открыт, нельзя создавать данные.
В меню Данные выберите команду Генератор данных и щелкните Генерировать данные.
Откроется диалоговое окно Подключение к базе данных.
В списке Создание данных: сведения о подключении укажите подключение к базе данных, которая разворачивалась ранее в ходе выполнения этого пошагового руководства, а затем нажмите кнопку ОК.
Нажмите кнопку Yes, когда вам будет предложено очистить содержимое таблиц перед вставкой новых строк.
Будут созданы данные. В окне "Заполнение" столбец состояния обновляется состоянием создания данных. В строке состояния отобразится сводка создания данных для всех таблиц.
(Необязательно.) С помощью другого средства войдите в базу данных. Для этого шага можно воспользоваться редактором Transact-SQL, предусмотренным в Visual Studio Premium. Дополнительные сведения см. в документе Editing Database Scripts and Objects with the Transact-SQL Editor на веб-сайте Майкрософт. Просмотрите новые данные с помощью следующего запроса:
use DinnerNowDataGenerator select * from [dbo].[RestaurantCategory] select * from [dbo].[Restaurant]
Убедитесь, что для таблицы Restaurant было создано в 10 раз больше строк, чем для таблицы RestaurantCategory. Убедитесь, что столбец Description таблицы Restaurant содержит значения NULL. Убедитесь, что столбец Name таблицы Restaurant содержит данные, которые соответствуют заданному регулярному выражению.
Следующие действия
Обычно создание данных настраивается для других столбцов и таблиц базы данных. По завершении настройки вы делаете проект доступным для группы путем его возврата, включая план создания данных, в систему управления версиями. Дополнительные сведения см. в разделе Добавление файлов в систему управления версиями.
См. также
Основные понятия
Создание данных теста для баз данных с помощью генераторов данных
Задание сведений о создании данных для столбца
Проверка кода базы данных при помощи модульных тестов
Создание специализированных тестовых данных с помощью пользовательского генератора данных