Przegląd
W tym artykule omówiono używanie migawek schematu bazy danych do obsługi różnych wersji bazy danych do wdrożenia w różnych środowiskach.
Migawki schematu bazy danych to kopie bieżącego stanu bazy danych w określonym czasie, które są zwykle używane do uzgadniania różnic podczas wdrażania zmian z jednego środowiska do drugiego.
W tym artykule skupimy się na konkretnym scenariuszu, w którym migawki schematu bazy danych są czymś więcej niż tylko kopiami bazy danych z określonego punktu w czasie, a raczej służą do tworzenia nowych wersji określonych środowisk.
Co to jest migawka schematu bazy danych
Migawka schematu bazy danych to po prostu zapisana kopia bazy danych w określonym czasie.
Innymi słowy, migawka schematu bazy danych jest dokładną kopią struktury bazy danych, która nie zawiera danych w swojej oryginalnej formie.
Schemat bazy danych odnosi się do wszystkich obiektów bazy danych, w tym tabel, widoków i procedur składowanych. Tworzymy migawkę schematu bazy danych, aby zamrozić definicje obiektów do późniejszego wykorzystania.
Dlaczego potrzebna jest migawka schematu bazy danych
Migawki schematu bazy danych mogą być używane do następujących celów:
- Kopiowanie istniejącego stanu bazy danych do wykorzystania w przyszłości lub w przyszłości.
- Wersjonowanie bazy danych za pomocą wielu migawek schematu bazy danych.
- Tworzenie kopii struktury bazy danych do określonego momentu w celu szybkiego przywrócenia.
- Tworzenie kopii schematu docelowej bazy danych przed wdrożeniem nowych zmian.
- Tworzenie najnowszej stabilnej kopii schematu bazy danych przed kontynuowaniem dalszych zmian.
- Tworzenie i udostępnianie zmian w bazie danych członkowi zespołu zewnętrznego, który nie ma bezpośredniego dostępu do środowiska bazy danych.
- Migawkę schematu bazy danych można również wykorzystać do porównania różnic między pracą bieżącą a pracą wykonaną w przeszłości.
- Migawki schematu bazy danych mogą być również używane do publikowania bez połączenia.
Wymaganie przechowywania wielu wersji bazy danych
Jeśli Twój zespół programistów baz danych otrzymał specjalne wymaganie przechowywania i utrzymywania wielu wersji baz danych do wdrożenia w wielu środowiskach wtedy jednym z rozwiązań jest użycie migawek schematu bazy danych, aby spełnić wymagania.
Tworzenie wielu wersji bazy danych
Jak wspomniano wcześniej, migawki schematu bazy danych są używane nie tylko jako kopie struktury bazy danych w określonym czasie, ale mogą być również używane do tworzenia i wdrażania wielu wersji bazy danych w tym samym czasie.
Przykładowa konfiguracja bazy danych (szkolenie techniczne)
Otwórz dbForge Studio dla SQL Server lub SSMS (SQL Server Management Studio), aby skonfigurować przykładową bazę danych o nazwie Szkolenie techniczne który zawiera informacje o kursach technicznych, studentach i trenerach wraz z kilkoma tabelami w następujący sposób:
-- (1) Tworzenie przykładowej bazy danych TechnicalTraining CREATE DATABASE TechnicalTraining;GOUSE TechnicalTraining-- (2) Tworzenie tabeli StudentCREATE TABLE Student ( StudentId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,RegistrationDate DATETIME2 NULL ,Notes VARCHAR(200) NULL ,CONSTRAINT PK_Student_StudentId PRIMARY KEY CLUSTERED (StudentId))GO-- (3) Tworzenie tabeli trenera CREATE TABLE Trainer ( TrainerId INT IDENTITY ,Nazwa VARCHAR(50) NOT NULL ,Kwalifikacja VARCHAR(50) NOT NULL ,Uwagi VULL ,(200) CONSTRAINT PK_Trainer_TrainerId PRIMARY KEY CLUSTERED (TrainerId))GO-- (4) Tworzenie tabeli kursówCREATE TABLE Kurs ( CourseId INT IDENTITY ,Nazwa VARCHAR(50) NOT NULL ,TrainerId INT NULL ,Szczegóły VARCHAR(200) NULL ,CONSTRAINT. CourseId). rseId] INT IDENTITY(1,1) NOT NULL, [StudentId] INT NULL, [CourseId] INT NULL, [PercentScore] DECIMAL (5, 2) NULL, CONSTRAINT [PK_StudentCourse_StudentCourseId] PRIMARY KEY CLUSTERED ([StudISTRACENT] [FK_StudentCourse_Student_StudentId] KLUCZ OBCY ([StudentId]) ODNIESIENIA [dbo].[Student] ([StudentId]), OGRANICZENIE [FK_StudentCourse_Course_CourseId] KLUCZ OBCY (dbo]);eCours][eCours] GO-- (6) Utwórz widok, aby zobaczyć raport o postępach ucznia UTWÓRZ WIDOK Postęp ucznia asSELECT s.Name AS StudentName,c.Name as CourseName,t.Name AS Trener,sc.Procentwynik FROM StudentCourse sc INNER JOIN Student syn s.StudentId=sc. Kurs StudentIdINNER JOIN z c.CourseId=sc.CourseIdINNER JOIN Trener ton t.TrainerId=c.TrainerIdGO
Należy pamiętać, że baza danych TechnicalTraining jest skonstruowana w taki sposób, że wielu uczniów może wziąć udział w wielu kursach, podczas gdy każdy kurs może mieć tylko jednego trenera, jak pokazano poniżej:
Pamiętaj, że używam dbForge Studio dla SQL Server, więc wygląd danych wyjściowych może się różnić, jeśli uruchomisz ten sam kod w SSMS (SQL Server Management Studio). Jednak nie ma różnicy między skryptami a ich wynikami.
Wypełnij bazę danych za pomocą następującego skryptu:
USE TechnicalTraining-- (1) Wypełnianie tabeli trenera IDENTITY_INSERT [dbo].[trener] ONINSERT INTO [dbo].[trener] ([identyfikator trenera], [imię i nazwisko], [kwalifikacja], [uwagi]) WARTOŚCI (1 , N'George', N'MSc Computer Science', NULL)WSTAW W [dbo]. [Trener] ([Identyfikator Trenera], [Nazwa], [Kwalifikacja], [Uwagi]) WARTOŚCI (2, N'Akeel', N'MSc Database Management', NULL)WSTAW W [dbo].[Trainer] ([TrainerId], [Name], [Kwalifikacje], [Notes]) WARTOŚCI (3, N'Sarah', N'MSc Data Science' , NULL)WSTAW DO [dbo].[Trener] ([Identyfikator instruktora], [Nazwa], [Kwalifikacja], [Uwagi]) WARTOŚCI (4, N'Ben', N'BSc Computer Science', NULL)SET IDENTITY_INSERT [ dbo].[Trener] OFF-- (2) Wypełnianie tabeli kursu SET IDENTITY_INSERT [dbo].[Kurs] ONINSERT INTO [dbo].[Kurs] ([Identyfikator kursu], [Nazwa], [Identyfikator instruktora], [Szczegóły]) VALUES (1, N'Rozwijanie bazy danych', 1, NULL)WSTAW DO [dbo].[Kurs] ([Identyfikator Kursu], [Nazwa], [Identyfikator Trenera], [Szczegóły]) WARTOŚCI (2, N'Analiza danych ', 2 , NULL)INSERT INTO [dbo].[Kurs] ([Identyfikator kursu], [Nazwa], [Identyfikator instruktora], [Szczeg. ail]) WARTOŚCI (3, N'Data Reports Development', 2, NULL)WSTAW W [dbo].[Kurs] ([Identyfikator Kursu], [Nazwa], [Identyfikator Trenera], [Szczegóły]) WARTOŚCI (4, N' Podstawy analizy biznesowej', 3, NULL)WSTAW W [dbo].[Kurs] ([Identyfikator kursu], [Nazwa], [Identyfikator trenera], [Szczegóły]) WARTOŚCI (5, N'Podstawy Big Data', 4, NULL )SET IDENTITY_INSERT [dbo].[Kurs] OFF-- (3) Wypełnianie tabeli Student SET IDENTITY_INSERT [dbo].[Student] ONINSERT INTO [dbo].[Student] ([Identyfikator Studenta], [Nazwa], [Data Rejestracji], [ Uwagi]) VALUES (1, N'Asif', N'2017-01-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([Identyfikator Studenta], [Imię i nazwisko], [Data Rejestracji], [Uwagi]) WARTOŚCI (2, N'Mike', N'2017-02-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([Identyfikator studenta], [Imię i nazwisko], [Data rejestracji] , [Uwagi]) VALUES (3, N'Naveed', N'2017-03-10 00:00:00', NULL)INSERT INTO [dbo].[Student] ([Identyfikator Studenta], [Nazwa], [Data Rejestracji ], [Notatki]) VALUES (4, N'Sam', N'2017-04-15 00:00:00', NULL)INSERT INTO [dbo].[Student] ([Identyfikator studenta], [Imię i nazwisko], [ Data rejestracji], [Uwagi]) VALUES (5, N'Mona', N'2017-07-10 00:00:00', NULL)SET IDENTITY_INSERT [dbo].[Student] OFF-- (4) Wypełnianie tabeli StudentCourseSET IDENTITY_INSERT [dbo].[StudentCourse ] ONINSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) VALUES (1, 1, 1, CAST(72.00 AS Decimal(5, 2)))INSERT INTO [ dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) WARTOŚCI (2, 1, 2, CAST(75.00 AS Decimal(5, 2)))INSERT INTO [dbo].[ KursStudenta] ([IdentyfikatorKursuStudenta], [IdentyfikatorKursuStudenta], [IdentyfikatorKursu], [WynikProcentowy]) WARTOŚCI (3, 2, 2, CAST(80,00 AS Decimal(5, 2)))INSERT INTO [dbo].[Kurs Studenta] ([ IdentyfikatorKursuStudenta], [Identyfikator Kursu], [Identyfikator Kursu], [WynikProcentowy]) WARTOŚCI (4, 2, 3, CAST(70,00 AS Decimal(5, 2))) INSERT INTO [dbo]. [StudentCourse] ([StudentCourseId], [ Identyfikator studenta], [Identyfikator kursu], [Wynik procentowy]) WARTOŚCI (5, 3, 5, CAST (80.00 AS Decimal (5, 2))) USTAW IDENTITY_INSERT [dbo]. [Kurs studenta] WYŁ.
Sprawdzenie bazy danych
Kliknij prawym przyciskiem myszy Postępy uczniów pod Widokami folderu i kliknij Pobierz dane lub alternatywnie wpisz następujący kod T-SQL:
-- Wyświetl postępy uczniówSELECT s.Name,c.Name jako CourseName,t.Name,sc.ProcentScore FROM StudentCourse scINNER JOIN Student son s.StudentId=sc.StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN ton t.TrainerId=c.TrainerIdorder by s.Name
Dane wyjściowe są następujące:
Konfiguruj wersję 1, tworząc migawkę schematu bazy danych
Jest to czas na zapisanie kopii schematu bazy danych z określonego punktu w czasie, ponieważ bieżąca struktura bazy danych spełnia wymagania wersji 1 bazy danych.
Utwórz migawkę schematu w wersji 1
Kliknij prawym przyciskiem myszy Szkolenie techniczne baza danych w Eksploratorze bazy danych dbForge Studio dla SQL Server (lub możesz użyć dowolnego podobnego narzędzia, które jest w stanie utworzyć migawkę schematu bazy danych), kliknij Zadania a następnie kliknij Utwórz folder lub migawkę skryptów… jak pokazano poniżej:
Utwórz migawkę w wybranej lokalizacji i nazwij ją TechnicalTraining-Version-001-StudentCourseTrainer.snap w następujący sposób:
Sprawdź wersję 1 migawki schematu
Sprawdź folder, aby wyświetlić ostatnio utworzoną migawkę schematu bazy danych w wersji 1:
Dodaj nową tabelę CourseType
Dodajmy teraz kolejną tabelę o nazwie CourseType do istniejącej bazy danych za pomocą następującego skryptu:
-- Dodawanie tabeli CourseType CREATE TABLE CourseType ( CourseTypeId INT IDENTITY ,Nazwa VARCHAR(50) NOT NULL ,Szczegóły VARCHAR(250) NULL ,CONSTRAINT PK_CourseType_CourseId PRIMARY KEY CLUSTERED (CourseTypeId));GO
Wstaw dane do tabeli w następujący sposób:
SET IDENTITY_INSERT [dbo]. [TypKursu] ONINSERT INTO [dbo].[TypKursu] ([IdentyfikatorTypuKursu], [Nazwa], [Szczegóły]) WARTOŚCI (1, N'Basic', NULL)INSERT INTO [dbo] .[TypKursu] ([Identyfikator TypuKursu], [Nazwa], [Szczegóły]) WARTOŚCI (2, N'Pośrednie', NULL)INSERT INTO [dbo].[TypKursu] ([Identyfikator TypuKursu], [Nazwa], [Szczegóły]) VALUES (3, N'Advanced', NULL)SET IDENTITY_INSERT [dbo].[CourseType] OFF
Zmodyfikuj tabelę kursów, aby dodać kolumnę CourseType
Zaktualizuj tabelę Course, aby dodać klucz obcy CourseType:
-- Usuń ograniczenie klucza obcegoALTER TABLE StudentCourseDrop Constraint [FK_StudentCourse_Course_CourseId]-- Usuń Course tableDROP TABLE Kurs-- Utwórz tabelę kursu z nową kolumną CourseTypeIdCREATE TABLE [dbo].[Course] ( [CourseITY (1, 1) INT ID NOT NULL, [Identyfikator kursu] INT, [Nazwa] VARCHAR (50) NOT NULL, [Identyfikator kursu] INT NULL, [Szczegóły] VARCHAR (200) NULL, OGRANICZENIE [PK_Course_CourseId] KLUCZ PODSTAWOWY ([Identyfikator kursu] ASC), CONSTRAINT_F ] KLUCZ OBCY ([TrainerId]) REFERENCJE [dbo].[Trainer] ([TrainerId]), OGRANICZENIE [FK_Course_CourseTypeId] KLUCZ OBCY ([CourseTypeId]) REFERENCJE [CourseType]([CourseTypeId>]);Dodaj dane do nowo zmodyfikowanej tabeli Kursy w następujący sposób:
-- Dodaj dane do tabeli kursuSET IDENTITY_INSERT [dbo].[Kurs] ONINSERT INTO [dbo].[Kurs] ([Identyfikator kursu], [Identyfikator typu kursu], [Nazwa], [Identyfikator trenera], [Szczegóły]) WARTOŚCI (1, 1, N'Rozwijanie bazy danych', 1, NULL)INSERT INTO [dbo].[Kurs] ([Identyfikator Kursu], [Identyfikator TypuKursu], [Nazwa], [Identyfikator Trenera], [Szczegóły]) WARTOŚCI (2, 3 , N'Analiza danych ', 2, NULL)WSTAW DO [dbo].[Kurs] ([IdentyfikatorKursu], [Identyfikator TypuKursu], [Nazwa], [Identyfikator Trenera], [Szczegóły]) WARTOŚCI (3, 2, N'Dane Tworzenie raportów', 2, NULL)WSTAW W [dbo].[Kurs] ([Identyfikator kursu], [Identyfikator kursu], [Nazwa], [Identyfikator trenera], [Szczegóły]) WARTOŚCI (4, 1, N'Podstawy analizy biznesowej ', 3, NULL)WSTAW W [dbo].[Kurs] ([Identyfikator Kursu], [Identyfikator Typu Kursu], [Nazwa], [Identyfikator Trenera], [Szczegóły]) WARTOŚCI (5, 1, N'Podstawy Big Data', 4 , NULL)SET IDENTITY_INSERT [dbo].[Kurs] OFF-- Dodaj ograniczenie klucza obcego z powrotem do tabeli Kursów Studentów ALTER TABLE Kurs Studentów ADD CONSTRAINT [FK_StudentCourse_Course_CourseId] KLUCZ OBCY ([CourseId]) ([CourseId]) REFERENCES][sebo].Dodaj nowy widok kursówWithTypes
Teraz dodaj nowy widok, aby zobaczyć wszystkie kursy wraz z ich typami w następujący sposób:
-- Tworzenie widoku, aby zobaczyć kursy wraz z ich typamiCreate VIEW CoursesWithTypes ASSELECT c.CourseId,c.Name as CousreName,ct.Name as CourseType FROM dbo.Course c łączenie wewnętrzne dbo.CourseType cton c.CourseTypeId=ct.CourseTypeId;IdźSprawdzenie bazy danych
Wyświetl strukturę bazy danych, aby zobaczyć najnowsze zmiany:
Uruchom widok CoursesWithTypes:
Konfiguruj wersję 2, tworząc migawkę schematu bazy danych
Utwórz kolejną kopię struktury bazy danych w określonym czasie, aby oznaczyć wersję 2 bazy danych.
Utwórz migawkę schematu bazy danych i nazwij ją TechnicalTraining-Version-002-StudentCourseTrainerCourseType.snap w następujący sposób:
Wdrażanie wielu wersji bazy danych
Po pomyślnym utworzeniu migawek schematu bazy danych dla wersji 1 i 2, możemy teraz wdrożyć dowolną wersję w dowolnym środowisku zgodnie z wymaganiami.
Tworzenie bazy danych deweloperów na podstawie migawki schematu w wersji 1
Kliknij Porównanie-> Nowe porównanie schematów z paska menu w dbForge Studio dla SQL Server:
Następnie ustaw typ źródła jako Migawka i znajdź migawkę schematu bazy danych w wersji 1 TechnicalTraining-Version-001-StudentCourseTrainer.snap stworzyliśmy wcześniej i kliknij symbol plusa, aby utworzyć docelową bazę danych w locie:
Wpisz nazwę bazy danych Szkolenie techniczneV1_DEV i kliknij OK:
Kliknij Dalej :
Kliknij Dalej ponownie, aby wybrać domyślne Opcje a następnie kliknij Dalej aby kontynuować z domyślnymi opcjami mapowania schematu, a następnie kliknij Porównaj :
Zsynchronizuj źródło i cel, klikając zieloną ikonę pośrodku, jak pokazano poniżej:
Po kilku kolejnych krokach kliknij Synchronizuj :
Następnie uruchom skrypt, aby w końcu utworzyć Szkolenie techniczneV1_DEV baza danych z migawki schematu bazy danych reprezentująca wersję 1 bazy danych:
Wyświetl nowo utworzoną bazę danych, która jest kopią bazy danych TechnicalTraining w wersji 1:
Tworzenie bazy danych deweloperów na podstawie migawki schematu w wersji 2
Teraz utwórz wersję 2 bazy danych, wykonując wymienione kroki, aby utworzyć wersję 1, po prostu wskazując na migawkę schematu bazy danych w wersji 2 TechnicalTraining-Version-002-StudentCourseTrainerCourseType tym razem:
Porównanie wersji 1 i wersji 2
Szybko porównajmy obie bazy danych, aby zobaczyć różnice.
Gratulacje! Pomyślnie utworzyłeś wiele wersji bazy danych za pomocą migawek schematu bazy danych.
Rzeczy do zrobienia
Możesz teraz łatwo korzystać z migawek schematu bazy danych do tworzenia i wdrażania wielu wersji bazy danych.
- Utwórz wiele wersji SQLDevBlogTDD wspomnianych w moim poprzednim artykule.
- Utwórz wiele wersji bazy danych ze spotkaniem w wersji 1 Łączna liczba artykułów na raport autora wymagania i wersja 2 spełniająca Raport o łącznej liczbie artykułów rocznie po moim poprzednim artykule.
- Przejrzyj mój poprzedni artykuł Sztuka izolowania zależności i danych w testach jednostkowych bazy danych i zobacz, czy możesz stworzyć dwie różne wersje bazy danych za pomocą migawek schematu bazy danych, jedną z testami jednostkowymi tSQLt, a drugą bez testów jednostkowych tSQLt.
Przydatne narzędzie:
dbForge Studio dla SQL Server – potężne IDE do zarządzania, administrowania, rozwoju, raportowania i analizy danych SQL Server.