sql >> Base de Datos >  >> RDS >> Database

Creación e implementación de múltiples versiones de la base de datos a través de instantáneas de esquema

Resumen

Este artículo habla sobre el uso de instantáneas del esquema de la base de datos para mantener diferentes versiones de una base de datos que se implementará en diferentes entornos.

Las instantáneas del esquema de la base de datos son copias puntuales del estado actual de la base de datos que normalmente se utilizan para reconciliar las diferencias cuando se implementan cambios de un entorno a otro.

Este artículo se centrará en un escenario particular en el que las instantáneas del esquema de la base de datos son más que simples copias puntuales de la base de datos, sino que se utilizan para crear versiones nuevas de entornos específicos.

¿Qué es la instantánea del esquema de la base de datos?

Una instantánea del esquema de la base de datos es simplemente una copia guardada en un momento dado de una base de datos.

En otras palabras, una instantánea del esquema de la base de datos es una copia exacta de la estructura de la base de datos que no incluye datos en su forma original.

El esquema de la base de datos se refiere a todos los objetos de la base de datos, incluidas tablas, vistas y procedimientos almacenados. Creamos una instantánea del esquema de la base de datos para congelar las definiciones de los objetos para su uso posterior.

¿Por qué se necesita una instantánea del esquema de la base de datos?

Las instantáneas del esquema de la base de datos se pueden utilizar para los siguientes propósitos:

  1. Copiar un estado existente de una base de datos para futura referencia o uso futuro.
  2. Versionar una base de datos a través de varias instantáneas del esquema de la base de datos.
  3. Crear una copia de un punto en el tiempo de la estructura de la base de datos para una restauración rápida.
  4. Crear una copia del esquema de la base de datos de destino antes de implementar nuevos cambios.
  5. Crear una copia estable más reciente del esquema de la base de datos antes de continuar con más cambios.
  6. Crear y compartir cambios en la base de datos con un miembro del equipo externo que no puede acceder directamente al entorno de la base de datos.
  7. La instantánea del esquema de la base de datos también se puede utilizar para comparar las diferencias entre el trabajo actual y el trabajo realizado en el pasado.
  8. Las instantáneas del esquema de la base de datos también se pueden usar para la publicación desconectada.

Requisito para mantener múltiples versiones de la base de datos

Si su equipo de desarrollo de bases de datos ha recibido un requisito especial para conservar y mantener varias versiones de bases de datos para implementarlas en varios entornos entonces una de las soluciones es usar instantáneas del esquema de la base de datos para cumplir con el requisito.

Creación de múltiples versiones de bases de datos

Como se mencionó anteriormente, las instantáneas del esquema de la base de datos no solo se usan como copias puntuales de la estructura de la base de datos, sino que también se pueden usar para crear e implementar varias versiones de la base de datos al mismo tiempo.

Configuración de base de datos de muestra (capacitación técnica)

Abra dbForge Studio para SQL Server o SSMS (SQL Server Management Studio) para configurar una base de datos de muestra llamada TechnicalTraining que contiene la información sobre cursos técnicos, estudiantes y formadores con las pocas tablas de la siguiente manera:

-- (1) Creación de una base de datos de muestra de TechnicalTraining CREATE DATABASE TechnicalTraining;GOUSE TechnicalTraining-- (2) Creación de una tabla de estudiantesCREATE 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) Creación de tabla de EntrenadorCREATE TABLE Trainer ( TrainerId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,Calificación VARCHAR(50) NOT NULL ,Notes VARCHAR(200) NULL , CONSTRAINT PK_Trainer_TrainerId PRIMARY KEY CLUSTERED (TrainerId))GO-- (4) Creación de la tabla del cursoCREATE TABLE Course ( CourseId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,TrainerId INT NULL ,Detail VARCHAR(200) NULL ,CONSTRAINT PK_Course_CourseId PRIMARY KEY CLUSTERED ( CourseId)) ON [PRIMARY]GOALTER TABLE CourseADD CONSTRAINT FK_Course_TrainerId FOREIGN KEY (TrainerId) REFERENCES dbo.Trainer (TrainerId)GO-- (5) Creación de la tabla StudentCourse CREATE TABLE [dbo].[StudentCourse] ( [StudentCourse 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 ([StudentCourseId] ASC), CONSTRAINT [FK_StudentCourse_Student_StudentId] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[Student] ([StudentId]), CONSTRAINT [FK_StudentCourse_Course_CourseId] FOREIGN KEY ([CourseId]) REFERENCIAS [dbo].[CourseId])); IR-- (6) Crear vista para ver el informe de progreso del estudiante CREAR VISTA StudentProgress asSELECT s.Name AS StudentName,c.Name as CourseName,t.Name AS Trainer,sc.PercentScore FROM StudentCourse sc INNER JOIN Student son s.StudentId=sc. StudentIdINNER JOIN Curso con c.CourseId=sc.CourseIdINNER JOIN Entrenador ton t.TrainerId=c.TrainerIdGO

Tenga en cuenta que la base de datos de TechnicalTraining está estructurada de tal manera que muchos estudiantes pueden tomar muchos cursos, mientras que cada curso solo puede tener un entrenador, como se muestra a continuación:

Tenga en cuenta que estoy usando dbForge Studio para SQL Server, por lo que el aspecto de salida puede diferir si ejecuta el mismo código en SSMS (SQL Server Management Studio). Sin embargo, no hay diferencia entre los scripts y sus resultados.

Rellene la base de datos utilizando el siguiente script:

USE TechnicalTraining-- (1) Rellenar la tabla del EntrenadorSET IDENTITY_INSERT [dbo].[Entrenador] ONINSERT INTO [dbo].[Entrenador] ([TrainerId], [Nombre], [Cualificación], [Notas]) VALORES (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], [Name], [Qualification], [Notes]) VALUES (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].[Entrenador] APAGADO-- (2) Poblando la tabla del cursoSET IDENTITY_INSERT [dbo].[Curso] ONINSERT INTO [dbo].[Curso] ([CourseId], [Name], [TrainerId], [Detalle]) VALORES (1, N'Desarrollo de base de datos', 1, NULL)INSERTAR EN [dbo].[Curso] ([Id. del curso], [Nombre], [Id. del formador], [Detalle]) VALORES (2, N'Análisis de datos ', 2 , NULL) INSERTAR EN [dbo]. [Curso] ([ID del curso], [Nombre], [Id del entrenador], [Det ail]) VALORES (3, N'Desarrollo de informes de datos', 2, NULO) INSERTAR EN [dbo].[Curso] ([Id. del curso], [Nombre], [Id. del entrenador], [Detalle]) VALORES (4, N' Conceptos básicos de Business Intelligence', 3, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) VALUES (5, N'Big Data Fundamentals', 4, NULL )SET IDENTITY_INSERT [dbo].[Curso] OFF-- (3) Rellenar la tabla StudentSET IDENTITY_INSERT [dbo].[Student] ONINSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate], [ Notas]) VALORES (1, N'Asif', N'2017-01-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate], [Notas]) VALORES (2, N'Mike', N'2017-02-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate] , [Notas]) VALUES (3, N'Naveed', N'2017-03-10 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate ], [Notas]) VALORES (4, N'Sam', N'2017-04-15 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [ Fecha de registro], [Notas]) VALORES (5, N'Mona', N'2017-07-10 00:00:00', NULL)SET IDENTITY_INSERT [dbo].[Student] OFF-- (4) Poblando StudentCourse tableSET 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].[CursoEstudiante] ([IdCursoEstudiante], [IdEstudiante], [IdCurso], [PuntuaciónPercentual]) VALORES (2, 1, 2, CAST(75.00 AS Decimal(5, 2)))INSERTAR EN [dbo].[ StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) VALUES (3, 2, 2, CAST(80.00 AS Decimal(5, 2)))INSERT INTO [dbo].[StudentCourse] ([ StudentCourseId], [StudentId], [CourseId], [PercentScore]) VALUES (4, 2, 3, CAST(70.00 AS Decimal(5, 2)))INSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [ StudentId], [CourseId], [PercentScore]) VALUES (5, 3, 5, CAST(80.00 AS Decimal(5, 2)))SET IDENTITY_INSERT [dbo].[StudentCourse] OFF

Comprobación de la base de datos

Haga clic derecho en StudentProgress en Vistas carpeta y haga clic en Recuperar datos o, alternativamente, escriba el siguiente código T-SQL:

-- Ver el progreso de los estudiantesSELECT s.Name,c.Name as CourseName,t.Name,sc.PercentScore FROM StudentCourse scINNER JOIN Student son s.StudentId=sc.StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN Entrenador ton t.TrainerId=c.TrainerIdorder por s.Name

La salida es la siguiente:

Configurar la versión 1 creando una instantánea del esquema de la base de datos

Este es el momento de guardar la copia puntual del esquema de la base de datos, ya que la estructura actual de la base de datos cumple los requisitos para la versión 1 de la base de datos.

Crear instantánea de esquema versión 1

Haga clic con el botón derecho en Formación técnica. base de datos en Explorador de bases de datos de dbForge Studio para SQL Server (o puede usar cualquier herramienta similar de su elección que sea capaz de crear una instantánea del esquema de la base de datos), haga clic en Tareas y luego haga clic en Crear carpeta de secuencias de comandos o instantánea... como se muestra a continuación:

Cree una instantánea en la ubicación deseada y asígnele el nombre TechnicalTraining-Version-001-StudentCourseTrainer.snap de la siguiente manera:

Comprobar instantánea de esquema versión 1

Verifique la carpeta para ver la instantánea del esquema de la base de datos creada recientemente de la versión 1:

Agregar nueva tabla CourseType

Agreguemos ahora otra tabla llamada CourseType a la base de datos existente con la ayuda del siguiente script:

-- Adición de la tabla CourseType CREATE TABLE CourseType ( CourseTypeId INT IDENTITY ,Name VARCHAR(50) NOT NULL ,Detail VARCHAR(250) NULL ,CONSTRAINT PK_CourseType_CourseId PRIMARY KEY CLUSTERED (CourseTypeId));IR

Inserte datos en la tabla de la siguiente manera:

SET IDENTITY_INSERT [dbo].[CourseType] ONINSERT INTO [dbo].[CourseType] ([CourseTypeId], [Name], [Detail]) VALUES (1, N'Basic', NULL)INSERT INTO [dbo] .[TipoCurso] ([IdTipoCurso], [Nombre], [Detalle]) VALORES (2, N'Intermedio', NULL)INSERTAR EN [dbo].[TipoCurso] ([IdTipoCurso], [Nombre], [Detalle]) VALORES (3, N'Avanzado', NULO)SET IDENTITY_INSERT [dbo].[CourseType] OFF

Modificar la tabla del curso para agregar la columna CourseType

Actualice la tabla de cursos para agregar la clave externa de CourseType:

-- Quitar la restricción de clave externa ALTER TABLE StudentCourseDrop Constraint [FK_StudentCourse_Course_CourseId]-- Quitar la tabla del cursoDROP TABLE Course-- Crear la tabla del curso con la nueva columna CourseTypeIdCREATE TABLE [dbo].[Course] ([CourseId] INT IDENTITY (1, 1) NOT NULL, [CourseTypeId] INT, [Name] VARCHAR (50) NOT NULL, [TrainerId] INT NULL, [Detalle] VARCHAR (200) NULL, CONSTRAINT [PK_Course_CourseId] PRIMARY KEY CLUSTERED ([CourseId] ASC), CONSTRAINT [FK_Course_TrainerId ] CLAVE EXTRANJERA ([Id. del curso]) REFERENCIAS [dbo].[Formador] ([Id. del curso]), RESTRICCIÓN [FK_Course_CourseTypeId] CLAVE EXTRANJERA ([Id. del tipo de curso]) REFERENCIAS [Tipo de curso]([Id. del tipo de curso]));IR

Agregue datos a la tabla del curso recién modificada de la siguiente manera:

VALORES (1, 1, N'Desarrollo de la base de datos', 1, NULL) INSERTAR EN [dbo]. [Curso] ([Id. del curso], [Id. del tipo de curso], [Nombre], [Id. del formador], [Detalle]) VALORES (2, 3 , N'Análisis de datos ', 2, NULL)INSERT INTO [dbo].[Curso] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (3, 2, N'Data Desarrollo de informes', 2, NULL)INSERT INTO [dbo].[Curso] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (4, 1, N'Fundamentos de Business Intelligence ', 3, NULL)INSERT INTO [dbo].[Curso] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (5, 1, N'Fundamentos de Big Data', 4 , NULL)SET IDENTITY_INSERT [dbo].[Course] OFF-- Agregar restricción de clave foránea nuevamente a la tabla StudentCourse ALTER TABLE StudentCourse ADD CONSTRAINT [FK_StudentCourse_Course_CourseId] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Course] ([CourseId])

Agregar nuevos cursos de vista con tipos

Ahora agregue una nueva vista para ver todos los cursos con sus tipos de la siguiente manera:

-- Crear una vista para ver cursos con sus tiposCrear VER CursosConTipos ASSELECT c.CourseId,c.Name as CousreName,ct.Name as CourseType FROM dbo.Course c unión interna dbo.CourseType cton c.CourseTypeId=ct.CourseTypeId;IR

Comprobación de la base de datos

Vea la estructura de la base de datos para ver los cambios más recientes:

Ejecute la vista CoursesWithTypes:

Configurar la versión 2 creando una instantánea del esquema de la base de datos

Cree otra copia puntual de la estructura de la base de datos para marcar la Versión 2 de la base de datos.

Cree una instantánea de esquema de base de datos y llámela TechnicalTraining-Version-002-StudentCourseTrainerCourseType.snap de la siguiente manera:

Implementación de múltiples versiones de bases de datos

Después de la creación exitosa de instantáneas del esquema de la base de datos para la versión 1 y la versión 2, ahora podemos implementar cualquier versión en cualquier entorno según los requisitos.

Creación de una base de datos de desarrollo a partir de la versión 1 de Schema Snapshot

Haga clic en Comparación-> Nueva comparación de esquemas desde la barra de menú en dbForge Studio para SQL Server:

A continuación, establezca el Tipo de fuente como Instantánea y busque la instantánea del esquema de base de datos versión 1 TechnicalTraining-Version-001-StudentCourseTrainer.snap creamos anteriormente y haga clic en el símbolo más para crear la base de datos de destino sobre la marcha:

Escriba el nombre de la base de datos TechnicalTrainingV1_DEV y haga clic en Aceptar:

Haga clic en Siguiente :

Haga clic en Siguiente de nuevo para seleccionar Opciones predeterminadas y luego haga clic en Siguiente para continuar con las opciones predeterminadas de mapeo de esquemas y luego haga clic en Comparar :

Sincronice el origen y el destino haciendo clic en el ícono verde en el medio como se muestra a continuación:

Después de algunos pasos más, haga clic en Sincronizar :

A continuación, ejecute el script para finalmente crear el TechnicalTrainingV1_DEV base de datos de la instantánea del esquema de la base de datos que representa la versión 1 de la base de datos:

Ver la base de datos recién creada que es una copia de la base de datos de TechnicalTraining versión 1:

Creación de una base de datos de desarrollo a partir de la versión 2 de Schema Snapshot

Ahora cree la versión 2 de la base de datos siguiendo los pasos mencionados para crear la versión 1 simplemente señalando la instantánea del esquema de la base de datos de la versión 2 TechnicalTraining-Version-002-StudentCourseTrainerCourseType esta vez:

Comparación de la versión 1 y la versión 2

Comparemos rápidamente ambas bases de datos para ver las diferencias.

¡Felicidades! Ha creado correctamente varias versiones de la base de datos a través de instantáneas del esquema de la base de datos.

Cosas que hacer

Ahora puede utilizar fácilmente las instantáneas del esquema de la base de datos para crear e implementar varias versiones de la base de datos.

  1. Cree múltiples versiones de SQLDevBlogTDD mencionado en mi artículo anterior.
  2. Cree múltiples versiones de la base de datos con la reunión de la versión 1 Número total de artículos por informe de autor requisito y reunión de la versión 2 Número total de artículos por informe anual siguiendo mi artículo anterior.
  3. Revise mi artículo anterior El arte de aislar dependencias y datos en pruebas unitarias de bases de datos y vea si puede crear dos versiones diferentes de la base de datos a través de instantáneas del esquema de la base de datos, una con pruebas unitarias tSQLt y la otra sin pruebas unitarias tSQLt.

Herramienta útil:

dbForge Studio para SQL Server:potente IDE para la gestión, administración, desarrollo, generación de informes y análisis de datos de SQL Server.