Общ преглед
Тази статия говори за използването на моментни снимки на схемата на базата данни за поддържане на различни версии на база данни, които да бъдат разгърнати в различни среди.
Моментните снимки на схемата на базата данни са копия в момента на текущото състояние на базата данни, които обикновено се използват за съгласуване на разликите при внедряване на промени от една среда в друга среда.
Тази статия ще бъде фокусирана върху конкретен сценарий, при който моментните снимки на схемата на базата данни са повече от просто копия на базата данни в даден момент, а се използват за създаване на нови версии на специфични среди.
Какво е моментна снимка на схемата на базата данни
Моментната снимка на схемата на база данни е просто запазено копие на база данни във времето.
С други думи, моментната снимка на схемата на базата данни е точно копие на структурата на базата данни, която не включва данни в оригиналния им вид.
Схемата на базата данни се отнася до всички обекти на базата данни, включително таблици, изгледи и съхранени процедури. Създаваме моментна снимка на схема на база данни, за да замразим дефинициите на обектите за по-късна употреба.
Защо е необходима моментна снимка на схемата на базата данни
Моментните снимки на схемата на базата данни могат да се използват за следните цели:
- Копиране на съществуващо състояние на база данни за бъдеща справка или бъдеща употреба.
- Версиониране на база данни чрез множество моментни снимки на схема на база данни.
- Създаване на моментно копие на структурата на базата данни за бързо възстановяване.
- Създаване на копие на схемата на целевата база данни преди внедряване на нови промени.
- Създаване на най-новото стабилно копие на схемата на базата данни, преди да продължите с още промени.
- Създаване и споделяне на промени в базата данни за външен член на екипа, който няма директен достъп до средата на базата данни.
- Моментна снимка на схемата на базата данни може да се използва и за сравняване на разликите между текущата работа и работата, извършена в миналото.
- Снимките на схемата на базата данни могат да се използват и за публикуване без връзка.
Изискване за поддържане на множество версии на база данни
Ако вашият екип за разработка на база данни е получил специално изискване да съхранява и поддържа множество версии на базата данни, които да бъдат разгръщани в множество среди тогава едно от решенията е да се използват моментни снимки на схема на база данни, за да се отговори на изискването.
Създаване на множество версии на база данни
Както беше обсъдено по-рано, моментните снимки на схемата на базата данни се използват не само като копия в момента на структурата на базата данни, но могат да се използват и за създаване и разгръщане на множество версии на база данни едновременно.
Примерна настройка на базата данни (техническо обучение)
Отворете dbForge Studio за SQL Server или SSMS (SQL Server Management Studio), за да настроите примерна база данни, наречена TechnicalTraining която съдържа информацията за технически курсове, студенти и обучители с няколко таблици, както следва:
-- (1) Създаване на примерна база данни за TechnicalTraining CREATE DATABASE TechnicalTraining;GOUSE TechnicalTraining-- (2) Създаване на таблица на учащиCREATE TABLE Student ( StudentId INT IDENTITY ,Име VARCHAR(50) NOT NULL ,RegistrationDate NULLTIME 02 DATE NULL ,CONSTRAINT PK_Student_StudentId PRIMARY KEY CLUSTERED (StudentId))GO-- (3) Създаване на таблица за обучениеCREATE TABLE Trainer ( TrainerId INT IDENTITY ,Име VARCHAR(50) NOT NULL ,Квалификация VARCHAR(50)Qualification VARCHAR(50) ОГРАНИЧЕНИЕ PK_Trainer_TrainerId PRIMARY KEY CLUSTERED (TrainerId))GO-- (4) Създаване на таблица на курсовеCREATE TABLE Курс ( CourseId INT IDENTITY ,Име VARCHAR(50) NOT NULL ,TrainerId INT tail NUVARCHNUCRUSTE 0ourCHNURSe2,KourYCNURSEINT,URCHNURSe2 CourseId)) ON [PRIMARY]GOALTER TABLE CourseADD CONSTRAINT FK_Course_TrainerId ВЪНШЕН КЛЮЧ (TrainerId) РЕФЕРЕНЦИИ dbo.Trainer (TrainerId)GO-- (5) Създаване на таблица StudentCourse CREATE TABLE [StudentCourse].[dbo].[ rseId] INT IDENTITY(1,1) NOT NULL, [StudentId] INT NULL, [CourseId] INT NULL, [PercentScore] DECIMAL (5, 2) NULL, NULL, CONSTRAINT [PK_StudentCourse_StudentCourseId] PRIMARY KEY CLUSTERED ([Студентски CLUSTED] COURSTED CLUSTERY CLUSTED) [FK_StudentCourse_Student_StudentId] ВЪНШЕН КЛЮЧ ([StudentId]) РЕФЕРЕНЦИИ [dbo].[Student] ([StudentId]), CONSTRAINT [FK_StudentCourse_Course_CourseId] ВЪНШЕН КЛЮЧ ([CourseId]) REFERENCES [CourseId]]d REFERENCES [CourseId]] [CourseId]] [CourseId]] [CourseId]] [CourseId]] [CourseId]] [CourseId] [CourseId]] [CourseId]] [CES]; GO-- (6) Създайте изглед, за да видите отчета за напредъка на студента.CREATE VIEW StudentProgress asSELECT s.Name AS StudentName,c.Name като CourseName,t.Name AS Trainer,sc.PercentScore FROM StudentCourse sc INNER JOIN Студентски син s.StudentId=sc. StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN Trainer ton t.TrainerId=c.TrainerIdGO
Моля, имайте предвид, че базата данни TechnicalTraining е структурирана по такъв начин, че много студенти могат да вземат много курсове, докато всеки курс може да има само един обучител, както е показано по-долу:
Моля, имайте предвид, че използвам dbForge Studio за SQL Server, така че изходният вид може да се различава, ако стартирате същия код в SSMS (SQL Server Management Studio). Въпреки това, няма разлика между скриптовете и техните резултати.
Попълнете базата данни, като използвате следния скрипт:
ИЗПОЛЗВАЙТЕ TechnicalTraining-- (1) Попълване на таблица на TrainerSET IDENTITY_INSERT [dbo].[Trainer] ONINSERT INTO [dbo].[Trainer] ([TrainerId], [Име], [Квалификация], [Бележки]) СТОЙНОСТИ (1) (1). , N'George', N'MSc Computer Science', NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Name], [Qualification], [Notes]) VALUES (2, N'Akeel',). N'MSc Database Management', NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Име], [Квалификация], [Бележки]) СТОЙНОСТИ (3, N'Sarah', N'MSc Data Science') , NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Name], [Qualification], [Notes]) VALUES (4, N'Ben', N'BSc Computer Science', NULL)SET IDENTITY_INSERT [ dbo].[Trainer] OFF-- (2) Попълване на таблицата на курсаSET IDENTITY_INSERT [dbo].[Course] ONINSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) STORYS (1, N'Разработка на база данни', 1, NULL)ВЪВЕТЕ В [dbo].[Курс] ([CourseId], [Име], [TrainerId], [Подробности]) СТОЙНОСТИ (2, N'Data Analysis', 2). , NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Det]). ail]) СТОЙНОСТИ (3, N'Разработка на отчети за данни', 2, NULL)ВЪВЕТЕ ВЪВ [dbo].[Курс] ([CourseId], [Име], [TrainerId], [Подробности]) СТОЙНОСТИ (4, N') Основи на бизнес разузнаването“, 3, NULL)ВЪВЕТЕ В [dbo].[Курс] ([CourseId], [Име], [TrainerId], [Подробности]) СТОЙНОСТИ (5, N'Основи на големите данни', 4, NULL) )ЗАДАДЕТЕ IDENTITY_INSERT [dbo].[Курс] ИЗКЛЮЧЕНО-- (3) Попълване на таблица на учащитеSET IDENTITY_INSERT [dbo].[Студент] ONINSERT INTO [dbo].[Студент] ([StudentId], [Име], [Дата на регистрация], [] Бележки]) СТОЙНОСТИ (1, N'Asif', N'2017-01-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Име], [RegistrationDate], [Бележки]) СТОЙНОСТИ (2, N'Mike', N'2017-02-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Име], [RegistrationDate] , [Бележки]) СТОЙНОСТИ (3, N'Naveed', N'2017-03-10 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate]). ], [Бележки]) СТОЙНОСТИ (4, N'Sam', N'2017-04-15 00:00:00', NULL)INSERT INTO [dbo].[Студент] ([StudentId], [Име], [[Име], [Ученик], [Бележки]) Дата на регистрация], [Бележки]) VALUES (5, N'Mona', N'2017-07-10 00:00:00', NULL)SET IDENTITY_INSERT [dbo].[Student] OFF-- (4) Попълване на таблица StudentCourseSET IDENTITY_INSERT [dbo].[StudentCourse]. ] ONINSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) СТОЙНОСТИ (1, 1, 1, CAST(72.00 КАТО десетично число(5, 2)))INSERT INTO [ dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) СТОЙНОСТИ (2, 1, 2, CAST(75.00 КАТО десетично число (5, 2))) INSERT INTO [dbo].[ StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) СТОЙНОСТИ (3, 2, 2, CAST(80.00 AS Decimal(5, 2))) INSERT INTO [dbo].[StudentCourse] ([StudentCourse] ([CAST(80.00 AS Decimal(5, 2))). StudentCourseId], [StudentId], [CourseId], [PercentScore]) СТОЙНОСТИ (4, 2, 3, CAST(70.00 AS Decimal(5, 2))) INSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [StudentCourseId], [ StudentId], [CourseId], [PercentScore]) VALUES (5, 3, 5, CAST(80.00 AS Decimal(5, 2)))SET IDENTITY_INSERT [dbo].[StudentCourse] OFF
Проверка на базата данни
Щракнете с десния бутон върху StudentProgress под Изгледи папка и щракнете върху Извличане на данни или алтернативно въведете следния T-SQL код:
-- Преглед на напредъка на студентите SELECT s.Name,c.Name като CourseName,t.Name,sc.PercentScore ОТ StudentCourse scINNER JOIN Студентски син s.StudentId=sc.StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN ton t.TrainerId=c.TrainerIdorder по s.Name
Резултатът е както следва:
Настройте версия 1 чрез създаване на моментна снимка на схемата на базата данни
Това е моментът за запазване на копието в момента на схемата на базата данни, тъй като текущата структура на базата данни отговаря на изискванията за версия 1 на базата данни.
Създаване на моментна снимка на схемата версия 1
Щракнете с десния бутон върху Техническо обучение база данни в Database Explorer на dbForge Studio за SQL Server (или можете да използвате всеки подобен инструмент по ваш избор, който може да създаде моментна снимка на схемата на базата данни), щракнете върху Задачи и след това щракнете върху Създаване на папка със скриптове или моментна снимка... както е показано по-долу:
Създайте моментна снимка на желаното от вас местоположение и го наречете TechnicalTraining-Version-001-StudentCourseTrainer.snap както следва:
Проверете версия на моментна снимка на схемата 1
Проверете папката, за да видите наскоро създадената моментна снимка на схемата на базата данни на версия 1:
Добавяне на нов тип курс на таблица
Нека сега добавим още една таблица, наречена CourseType към съществуващата база данни с помощта на следния скрипт:
-- Добавяне на таблица на CourseType CREATE TABLE CourseType ( CourseTypeId INT IDENTITY ,Име VARCHAR(50) NOT NULL ,Подробност VARCHAR(250) NULL ,CONSTRAINT PK_CourseType_KourseId CourseId CURSEYD PRIMARYpe (CourseId CourseId PRIMARY);Вмъкнете данни в таблицата, както следва:
ЗАДАДЕТЕ IDENTITY_INSERT [dbo].[CourseType] ONINSERT INTO [dbo].[CourseType] ([CourseTypeId], [Name], [Detail]) STOJI (1, N'Basic', NULL)INSERT INTO [dbo] .[CourseType] ([CourseTypeId], [Име], [Детайл]) VALUES (2, N'Intermediate', NULL)INSERT INTO [dbo].[CourseType] ([CourseTypeId], [Name], [Detail]) СТОЙНОСТИ (3, N'Advanced', NULL)SET IDENTITY_INSERT [dbo].[CourseType] OFFПроменете таблицата на курса, за да добавите колона тип курс
Актуализирайте таблицата Course, за да добавите външния ключ CourseType:
-- Изхвърлете ограничението на външния ключALTER TABLE StudentCourseDrop Constraint [FK_StudentCourse_Course_CourseId]-- Изхвърлете таблицата на курсаDROP TABLE Course-- Създайте таблица на курса с нова колона CourseTypeIdCREATE TABLE [dbo].[CourseId] (CourseId) (1] NOT NULL, [CourseTypeId] INT, [Име] VARCHAR (50) NOT NULL, [TrainerId] INT NULL, [Подробности] VARCHAR (200) NULL, ОГРАНИЧЕНИЕ [PK_Course_CourseId] PRIMARY KEY CLUSTERED ([INTURISCourse_Trainer_Course_Trainer]) ] ВЪНШЕН КЛЮЧ ([TrainerId]) РЕФЕРЕНЦИИ [dbo].[Trainer] ([TrainerId]), CONSTRAINT [FK_Course_CourseTypeId] ВЪНШЕН КЛЮЧ ([CourseTypeId]) РЕФЕРЕНЦИИ [CourseType]([CourseType]([Course>));Добавете данни към новопроменената таблица на курса, както следва:
-- Добавете данни към таблицата на курсаSET IDENTITY_INSERT [dbo].[Course] ONINSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) СТОЙНОСТИ (1, 1, N'Разработка на база данни', 1, NULL)ВЪВЕТЕ В [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) СТОЙНОСТИ (2, 3). , N'Data Analysis', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (3, 2, N'Data) Разработка на отчети“, 2, NULL)ВЪВЕТЕ В [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) СТОЙНОСТИ (4, 1, N'Basics of Business Intelligence). ', 3, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (5, 1, N'Big Data Fundamentals', 4). , NULL)SET IDENTITY_INSERT [dbo].[Course] OFF-- Добавете ограничение за външния ключ обратно към StudentCourse tableALTER TABLE StudentCourse ДОБАВИ ОГРАНИЧЕНИЕ [FK_StudentCourse_Course_CourseId] ВЪНШЕН КЛЮЧ ([CourseId]) [CourseId]) [нашият курс]] [CourseId]] [нашият курс]].[CES].[CES].Добавяне на нов преглед на курсове с типове
Сега добавете нов изглед, за да видите всички курсове с техните типове, както следва:
-- Създаване на изглед, за да видите курсове с техните типове Създаване на VIEW CoursesWithTypes ASSELECT c.CourseId,c.Name като CousreName,ct.Name като CourseType FROM dbo.Course c inner join dbo.CourseType cton c.CourseTypeourdseId=CourseTypeourseId=c.;GOПроверка на базата данни
Вижте структурата на базата данни, за да видите най-новите промени:
Стартирайте изгледа CoursesWithTypes:
Настройте версия 2 чрез създаване на моментна снимка на схемата на базата данни
Създайте друго копие на структурата на базата данни в даден момент, за да маркирате версия 2 на базата данни.
Създайте моментна снимка на схемата на базата данни и я наречете TechnicalTraining-Version-002-StudentCourseTrainerCourseType.snap както следва:
Внедряване на множество версии на база данни
След успешно създаване на моментни снимки на схема на база данни за версия 1 и версия 2, вече можем да разположим всяка версия във всяка среда според изискването.
Създаване на база данни за разработчици от снимка на схемата версия 1
Щракнете върху Сравнение-> Ново сравнение на схема от лентата с менюта в dbForge Studio за SQL Server:
След това задайте Тип на източника като Моментна снимка и Намерете моментната снимка на схемата на базата данни версия 1 TechnicalTraining-Version-001-StudentCourseTrainer.snap създадохме по-рано и щракнете върху символа плюс, за да създадете целева база данни в движение:
Въведете името на базата данни TechnicalTrainingV1_DEV и щракнете върху OK:
Кликнете върху Напред :
Кликнете върху Напред отново, за да изберете Опции по подразбиране и след това щракнете върху Напред за да продължите с опциите за картографиране на схемата по подразбиране и след това щракнете върху Сравни :
Синхронизирайте източник и цел, като щракнете върху зелена икона в средата, както е показано по-долу:
След още няколко стъпки щракнете върху Синхронизиране :
След това изпълнете скрипта, за да създадете най-накрая TechnicalTrainingV1_DEV база данни от моментна снимка на схемата на базата данни, представляваща версия 1 на базата данни:
Вижте новосъздадената база данни, която е копие на версия 1 на базата данни TechnicalTraining:
Създаване на база данни за разработчици от снимка на схемата версия 2
Сега създайте версия 2 на базата данни, като следвате стъпките, споменати за създаване на версия 1, просто като посочите моментна снимка на схемата на базата данни на версия 2 TechnicalTraining-Version-002-StudentCourseTrainerCourseType този път:
Сравняване на версия 1 и версия 2
Нека бързо сравним двете бази данни, за да видим разликите.
Честито! Успешно създадохте множество версии на базата данни чрез моментни снимки на схемата на базата данни.
Неща за правене
Вече можете лесно да използвате моментни снимки на схемата на базата данни, за да създавате и разгръщате множество версии на базата данни.
- Създайте няколко версии на SQLDevBlogTDD, споменати в предишната ми статия.
- Създайте множество версии на базата данни със среща от версия 1 Общ брой статии на доклад на автор изискване и среща на версия 2 Отчет за общ брой статии на година след моята предишна статия.
- Прегледайте предишната ми статия Изкуство за изолиране на зависимости и данни при тестване на база данни и вижте дали можете да създадете две различни версии на базата данни чрез моментни снимки на схемата на базата данни, едната с tSQLt модульни тестове, а другата без tSQLt модулни тестове.
Полезен инструмент:
dbForge Studio за SQL Server – мощна IDE за управление на SQL Server, администриране, разработка, отчитане и анализ на данни.