Ringkasan
Artikel ini membahas tentang penggunaan snapshot skema database untuk mempertahankan versi database yang berbeda untuk diterapkan ke lingkungan yang berbeda.
Snapshot skema database adalah salinan point-in-time dari status database saat ini yang biasanya digunakan untuk merekonsiliasi perbedaan saat menerapkan perubahan dari satu lingkungan ke lingkungan lain.
Artikel ini akan difokuskan pada skenario tertentu di mana snapshot skema database lebih dari sekadar salinan database point-in-time, melainkan digunakan untuk membuat versi baru dari lingkungan tertentu.
Apa itu Cuplikan Skema Basis Data
Cuplikan skema basis data hanyalah salinan basis data titik waktu yang disimpan.
Dengan kata lain, snapshot skema database adalah salinan persis dari struktur database yang tidak menyertakan data dalam bentuk aslinya.
Skema basis data mengacu pada semua objek basis data termasuk tabel, tampilan, dan prosedur tersimpan. Kami membuat snapshot skema database untuk membekukan definisi objek untuk digunakan nanti.
Mengapa Snapshot Skema Basis Data Diperlukan
Snapshot skema database dapat digunakan untuk tujuan berikut:
- Menyalin status database yang ada untuk referensi di masa mendatang atau penggunaan di masa mendatang.
- Membuat versi database melalui beberapa snapshot skema database.
- Membuat salinan struktur database titik waktu untuk pemulihan cepat.
- Membuat salinan skema database target sebelum menerapkan perubahan baru.
- Membuat salinan stabil terbaru dari skema database sebelum melanjutkan lebih jauh dengan lebih banyak perubahan.
- Membuat dan membagikan perubahan basis data ke anggota tim eksternal yang tidak dapat mengakses lingkungan basis data secara langsung.
- Snapshot skema database juga dapat digunakan untuk membandingkan perbedaan antara pekerjaan saat ini dan pekerjaan yang dilakukan di masa lalu.
- Snapshot skema database juga dapat digunakan untuk publikasi yang terputus.
Persyaratan untuk Menyimpan Beberapa Versi Basis Data
Jika tim pengembangan database Anda telah menerima persyaratan khusus untuk menyimpan dan memelihara beberapa versi database untuk diterapkan di beberapa lingkungan maka salah satu solusinya adalah menggunakan snapshot skema database untuk memenuhi persyaratan.
Membuat Beberapa Versi Basis Data
Seperti yang telah dibahas sebelumnya, snapshot skema database tidak hanya digunakan sebagai salinan struktur database point-in-time tetapi juga dapat digunakan untuk membuat dan menerapkan beberapa versi database pada saat yang bersamaan.
Contoh Penyiapan Basis Data (Pelatihan Teknis)
Buka dbForge Studio untuk SQL Server atau SSMS (SQL Server Management Studio) untuk menyiapkan database sampel yang disebut TechnicalTraining yang berisi informasi tentang kursus teknis, siswa dan pelatih dengan beberapa tabel sebagai berikut:
-- (1) Membuat database sampel Pelatihan Teknis CREATE DATABASE Pelatihan Teknis;Pelatihan Teknis GOUSE-- (2) Membuat tabel SiswaCREATE TABLE Siswa ( StudentId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,RegistrationDate DATETIME2 NULL ,Catatan VARCHAR(200) NULL ,CONSTRAINT PK_Student_StudentId PRIMARY KEY CLUSTERED (StudentId))GO-- (3) Membuat tabel TrainerCREATE TABLE Trainer ( TrainerId INT IDENTITY ,Nama VARCHAR(50) NOT NULL ,Qualification VARCHAR(50) NOT NULL HAR (Catatan) (KONSTRUKSI PK_Trainer_TrainerId PRIMARY KEY CLUSTERED (TrainerId))GO-- (4) Membuat tabel KursusCREATE TABLE Kursus ( CourseId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,TrainerId INT NULL ,Detail VARCHAR_IMACourseCHARRY(200) TRANULL kami CourseId)) PADA [PRIMARY]GOALTER TABLE CourseADD CONSTRAINT FK_Course_TrainerId REFERENSI KUNCI ASING (TrainerId) dbo.Trainer (TrainerId)GO-- (5) Membuat tabel StudentCourse CREATE TABLE [dbo].[StudentCourse] ( [StudentCourse] ( [StudentCourse] ( [StudentCourse] ( [StudentCourse] ( [StudentCourse] ( [StudentCourse] ( [StudentCourse] ( [StudentCou] rseId] IDENTITAS INT(1,1) NOT NULL, [StudentId] INT NULL, [CourseId] INT NULL, [PercentScore] DECIMAL (5, 2) NULL, CONSTRAINT [PK_StudentCourse_StudentCourseId] PRIMARY KEY CLUSTERED ([StudentCourse_StudentCourseId] PRIMARY KEY CLUSTERD [FK_StudentCourse_Student_StudentId] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[Student] ([StudentId]), CONSTRAINT [FK_StudentCourse_Course_CourseId] FOREIGN KEY ([CourseId]) ([CourseId]) FOREIGN KEY ([CourseId]) [CourseId]) [CourseId]) GO-- (6) Buat tampilan untuk melihat laporan kemajuan siswaCREATE VIEW StudentProgress asSELECT s.Name AS StudentName,c.Name sebagai CourseName,t.Name AS Trainer,sc.PercentScore DARI StudentCourse sc INNER JOIN Putra siswa s.StudentId=sc. StudentIdINNER BERGABUNG Kursus dengan c.CourseId=sc.CourseIdINNER BERGABUNG Pelatih ton t.TrainerId=c.TrainerIdGO
Harap dicatat bahwa database Pelatihan Teknis disusun sedemikian rupa sehingga banyak siswa dapat mengambil banyak kursus sementara setiap kursus hanya dapat memiliki satu pelatih seperti yang ditunjukkan di bawah ini:
Harap dicatat bahwa saya menggunakan dbForge Studio untuk SQL Server sehingga tampilan output mungkin berbeda jika Anda menjalankan kode yang sama di SSMS (SQL Server Management Studio). Namun, tidak ada perbedaan antara skrip dan hasilnya.
Isi database menggunakan skrip berikut:
GUNAKAN Pelatihan Teknis-- (1) Mengisi tabel PelatihSET IDENTITY_INSERT [dbo].[Trainer] OINSERT INTO [dbo].[Trainer] ([TrainerId], [Name], [Qualification], [Notes]) NILAI (1 , N'George', N'MSc Computer Science', NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Name], [Qualification], [Notes]) NILAI (2, N'Akeel', N'MSc Database Management', NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Name], [Qualification], [Notes]) NILAI (3, N'Sarah', N'MSc Data Science' , NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Name], [Qualification], [Notes]) NILAI (4, N'Ben', N'BSc Computer Science', NULL)SET IDENTITY_INSERT [ dbo].[Trainer] OFF-- (2) Mengisi tabel KursusSET IDENTITY_INSERT [dbo].[Course] ONINSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) NILAI (1, N'Pengembangan Basis Data', 1, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) NILAI (2, N'Data Analysis ', 2 , NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Det ail]) NILAI (3, N'Data Reports Development', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) NILAI (4, N' Dasar-dasar Business Intelligence', 3, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) NILAI (5, N'Big Data Fundamentals', 4, NULL )SET IDENTITY_INSERT [dbo].[Kursus] NONAKTIF-- (3) Mengisi tabel SiswaSET IDENTITY_INSERT [dbo].[Student] OINSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate], [ Catatan]) NILAI (1, N'Asif', N'2017-01-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate], [Catatan]) NILAI (2, N'Mike', N'2017-02-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate] , [Catatan]) NILAI (3, N'Naveed', N'2017-03-10 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate ], [Catatan]) NILAI (4, N'Sam', N'2017-04-15 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [ Tanggal Pendaftaran], [Catatan]) NILAI (5, N'Mona', N'2017-07-10 00:00:00', NULL)SET IDENTITY_INSERT [dbo].[Student] OFF-- (4) Mengisi tabel StudentCourseSET IDENTITY_INSERT [dbo].[StudentCourse] ] ONINSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) NILAI (1, 1, 1, CAST(72.00 AS Desimal(5, 2)))INSERT INTO [ dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) NILAI (2, 1, 2, CAST(75.00 AS Desimal(5, 2)))INSERT INTO [dbo].[ StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) NILAI (3, 2, 2, CAST(80.00 AS Desimal(5, 2)))INSERT INTO [dbo].[StudentCourse] ([ StudentCourseId], [StudentId], [CourseId], [PercentScore]) NILAI (4, 2, 3, CAST(70.00 AS Desimal(5, 2)))INSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [ StudentId], [CourseId], [PercentScore]) NILAI (5, 3, 5, CAST(80.00 AS Desimal(5, 2)))SET IDENTITY_INSERT [dbo].[StudentCourse] OFF
Pemeriksaan Basis Data
Klik kanan Kemajuan Siswa di bawah Tampilan folder dan klik Ambil Data atau sebagai alternatif ketik kode T-SQL berikut:
-- Melihat kemajuan siswaPILIH s.Name,c.Name sebagai CourseName,t.Name,sc.PercentScore FROM StudentCourse scINNER JOIN Putra siswa s.StudentId=sc.StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN Trainer ton t.TrainerId=c.TrainerIdorder menurut s.Name
Outputnya adalah sebagai berikut:
Siapkan Versi 1 dengan Membuat Snapshot Skema Basis Data
Inilah saatnya untuk menyimpan salinan skema database secara tepat waktu karena struktur database saat ini memenuhi persyaratan untuk versi 1 database.
Buat Cuplikan Skema Versi 1
Klik kanan Pelatihan Teknis database di Database Explorer dari dbForge Studio untuk SQL Server (atau Anda dapat menggunakan alat serupa pilihan Anda yang mampu membuat snapshot skema database), klik Tugas lalu klik Buat Folder Skrip atau Cuplikan… seperti yang ditunjukkan di bawah ini:
Buat cuplikan di lokasi yang Anda inginkan dan beri nama TechnicalTraining-Version-001-StudentCourseTrainer.snap sebagai berikut:
Periksa Cuplikan Skema Versi 1
Periksa folder untuk melihat snapshot skema database yang baru dibuat dari versi 1:
Tambahkan Jenis Kursus Tabel Baru
Sekarang mari kita tambahkan tabel lain yang disebut CourseType ke database yang ada dengan bantuan script berikut:
-- Menambahkan tabel CourseType CREATE TABLE CourseType ( CourseTypeId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,Detail VARCHAR(250) NULL ,CONSTRAINT PK_CourseType_CourseId PRIMARY KEY CLUSTERED (CourseTypeId));GO
Masukkan data ke dalam tabel sebagai berikut:
SET IDENTITY_INSERT [dbo].[CourseType] ONINSERT INTO [dbo].[CourseType] ([CourseTypeId], [Name], [Detail]) NILAI (1, N'Basic', NULL)INSERT INTO [dbo] .[Jenis Kursus] ([IdJenis Kursus], [Nama], [Rincian]) NILAI (2, N'Menengah', NULL)MASUKKAN KE [dbo].[Jenis Kursus] ([Id Jenis Kursus], [Nama], [Rincian]) NILAI (3, N'Lanjutan', NULL)SET IDENTITY_INSERT [dbo].[CourseType] OFF
Ubah Tabel Kursus untuk Menambahkan Kolom Jenis Kursus
Perbarui tabel Kursus untuk menambahkan kunci asing CourseType:
-- Lepas batasan kunci asingALTER TABLE StudentCourseDrop Constraint [FK_StudentCourse_Course_CourseId]-- Lepas tabel KursusDROP TABLE Kursus-- Buat tabel Kursus dengan kolom baru CourseTypeIdCREATE TABLE [dbo].[Course] ( [CourseId] INT IDENTITY (1, 1) INT IDENTITY NOT NULL, [CourseTypeId] INT, [Name] VARCHAR (50) NOT NULL, [TrainerId] INT NULL, [Detail] VARCHAR (200) NULL, CONSTRAINT [PK_Course_CourseId] PRIMARY KEY CLUSTERED ([CourseId_CourseId ASC), ] REFERENSI KUNCI ASING ([TrainerId]) [dbo].[Trainer] ([TrainerId]), CONSTRAINT [FK_Course_CourseTypeId] FOREIGN KEY ([CourseTypeId]) REFERENSI [CourseType]([CourseTypeId]));GO));Tambahkan data ke tabel Kursus yang baru dimodifikasi sebagai berikut:
-- Tambahkan data ke tabel KursusSET IDENTITY_INSERT [dbo].[Course] OINSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (1, 1, N'Pengembangan Basis Data', 1, NULL)MASUKKAN KE [dbo].[Kursus] ([Id Kursus], [IdKursus], [Nama], [IdPelatih], [Rincian]) NILAI (2, 3 , N'Data Analysis ', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) NILAI (3, 2, N'Data Pengembangan Laporan', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) NILAI (4, 1, N'Basics of Business Intelligence ', 3, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) NILAI (5, 1, N'Big Data Fundamentals', 4 , NULL)SET IDENTITY_INSERT [dbo].[Course] OFF-- Tambahkan batasan kunci Asing kembali ke tabel StudentCourseALTER TABLE StudentCourse ADD CONSTRAINT [FK_StudentCourse_Course_CourseId] FOREIGN KEY ([CourseId]) REFERENCES [CourseId] [CourseId]][CourseId] [CourseId] [CourseId] [CourseId]] [CourseId]Tambahkan Tampilan KursusDenganJenis Baru
Sekarang tambahkan tampilan baru untuk melihat semua kursus dengan jenisnya sebagai berikut:
-- Membuat tampilan untuk melihat kursus dengan tipenyaBuat VIEW CoursesWithTypes ASSELECT c.CourseId,c.Name as CousreName,ct.Name as CourseType FROM dbo.Course c inner join dbo.CourseType cton c.CourseTypeId=ct.CourseTypeId;PERGIPemeriksaan Basis Data
Lihat struktur database untuk melihat perubahan terbaru:
Jalankan tampilan CoursesWithTypes:
Siapkan Versi 2 dengan Membuat Snapshot Skema Basis Data
Buat salinan lain dari struktur database untuk menandai Versi 2 database.
Buat Cuplikan Skema Basis Data dan beri nama TechnicalTraining-Version-002-StudentCourseTrainerCourseType.snap sebagai berikut:
Menerapkan Beberapa Versi Basis Data
Setelah berhasil membuat snapshot skema database untuk versi 1 dan versi 2, kini kami dapat menerapkan versi apa pun ke lingkungan apa pun sesuai kebutuhan.
Membuat Database Dev dari Skema Snapshot Versi 1
Klik Perbandingan-> Perbandingan Skema Baru dari bilah menu di dbForge Studio untuk SQL Server:
Selanjutnya tetapkan Jenis Sumber sebagai Snapshot dan Temukan Cuplikan Skema Basis Data versi 1 TechnicalTraining-Version-001-StudentCourseTrainer.snap kita buat sebelumnya dan klik simbol plus untuk membuat database target dengan cepat:
Ketik nama database TechnicalTrainingV1_DEV dan klik Oke:
Klik Berikutnya :
Klik Berikutnya lagi untuk memilih Opsi default default lalu klik Berikutnya untuk melanjutkan dengan opsi Pemetaan Skema default lalu klik Bandingkan :
Sinkronkan Sumber dan Target dengan mengklik Ikon Hijau di tengah seperti gambar di bawah ini:
Setelah beberapa langkah lagi, klik Sinkronkan :
Selanjutnya, jalankan skrip untuk akhirnya membuat TechnicalTrainingV1_DEV database dari snapshot skema database yang mewakili versi 1 dari database:
Lihat database yang baru dibuat yang merupakan salinan database TechnicalTraining versi 1:
Membuat Database Dev dari Skema Snapshot Versi 2
Sekarang buat Database Versi 2 dengan mengikuti langkah-langkah yang disebutkan untuk membuat Versi 1 cukup dengan mengarahkan ke Versi 2 Ringkasan Skema Database TechnicalTraining-Version-002-StudentCourseTrainerCourseType kali ini:
Membandingkan Versi 1 dan Versi 2
Mari kita bandingkan kedua database dengan cepat untuk melihat perbedaannya.
Selamat! Anda telah berhasil membuat beberapa versi database melalui snapshot skema database.
Hal yang Dapat Dilakukan
Sekarang Anda dapat dengan mudah menggunakan snapshot skema database untuk membuat dan menerapkan beberapa versi database.
- Buat beberapa versi SQLDevBlogTDD yang disebutkan di artikel saya sebelumnya.
- Buat beberapa versi database dengan pertemuan versi 1 Jumlah Total Artikel per Penulis Laporan persyaratan dan versi 2 memenuhi Total Jumlah Artikel per Tahun Laporan mengikuti artikel saya sebelumnya.
- Baca artikel saya sebelumnya Seni Mengisolasi Dependensi dan Data dalam Pengujian Unit Basis Data dan lihat apakah Anda dapat membuat dua versi basis data yang berbeda melalui cuplikan skema basis data satu dengan pengujian unit tSQLt dan yang lainnya tanpa pengujian unit tSQLt.
Alat yang berguna:
dbForge Studio untuk SQL Server – IDE canggih untuk manajemen, administrasi, pengembangan, pelaporan dan analisis data SQL Server.